複数の画像を同時アップロードでの、ファイルの置き換え(MySQLのアップデート) - PHPプロ!Q&A掲示板

2029

  • 0P

複数の画像を同時アップロードでの、ファイルの置き換え(MySQLのアップデート)

質問日時 / 2009年5月12日 04:15 (最終編集:5月12日 04:20)    回答数 / 2件

Questioner:  edokko  このエントリーをはてなブックマークに追加 

キーワード / 複数画像アップロード    MySQL    置き換え   

PHPバージョン4.4.4を使用しています。

画像を複数同時アップロードするのを作成中なのですが、

例えば、MySQLの picture_1, picture_2, picture_3 の中には
既に画像ファイル名(写真1、写真2、写真3)があるとします。

その写真1の画像はそのままで、写真2と写真3だけ
新たな画像ファイルに置き換えようとした時、
新たな写真2の画像ファイルは写真1になり、
新たな写真3の画像ファイルは写真2になってしまうのです。

これを写真3だけ新たな画像ファイルに置き換えようとしても、
写真3(picture_3)のデータ名はそのままで、
代わりに写真1(picture_1)のところに
その新たな画像ファイル名が置き換えられるのです。

コードは下記の通りです。


  1. $count = 0;
  2.  
  3.     // as it is multiple uploads, we will parse the $_FILES array to reorganize it into $files
  4.     $files = array();
  5.     foreach ($_FILES['my_field'] as $k => $l) {
  6.         foreach ($l as $i => $v) {
  7.             if (!array_key_exists($i, $files)) 
  8.                 $files[$i] = array();
  9.             $files[$i][$k] = $v;
  10.         }
  11.     }
  12.  
  13.   // we now remove invalid entries for non-uploaded images
  14.   foreach ($files as $k => $v) {
  15.       if ($v['error'] != 0) unset($files[$k]);
  16.   }
  17.   
  18.   $uploaded = array();
  19.  
  20.   foreach (array_keys($files) as $k) {
  21.       $handle = new upload($files[$k]);
  22.     $this_upload = array();
  23.     $time = time();
  24.     $dir = date("mY", $time);
  25.     $slash="/";
  26.     
  27.     $fb=date("dHis",$time);
  28.     $fe=rand(0,999);
  29.     $fn =$fb."_".$fe;
  30.     $intpic = $fn.'.';
  31.     $intpic_t = $fn.'_t';
  32.     
  33.     $handle->jpeg_quality = 80;
  34.     
  35.     // Large image
  36.     $handle->image_resize = true;
  37.     $handle->image_ratio_y = true;  //height
  38.     $handle->image_x = 500;    //width
  39.     $handle->file_new_name_body = $intpic;
  40.     $handle->Process('../img/');
  41.  
  42.     if ($handle->uploaded) {
  43.     
  44.       if ($handle->processed) {
  45.         $this_upload['large'] = $handle->file_dst_name;
  46.         
  47.         $good = "yes";
  48.       }
  49.       
  50.     // Thumbnail image
  51.     $handle->image_resize = true;
  52.     $handle->image_ratio_y = true;  //height
  53.     $handle->image_x = 100;    //width
  54.     $handle->file_new_name_body = $intpic_t;
  55.     $handle->Process('../img/');
  56.     
  57.       if ($handle->processed) {
  58.       // store the small image filename
  59.       $this_upload['small'] = $handle->file_dst_name;
  60.         
  61.               echo '<img src="../img/' . $intpic_t . '.jpg" /><br /><br />';
  62.         
  63.         } else {
  64.                   // one error occured
  65.                   echo '<font color="red">File not uploaded to the wanted location.<br><br>';
  66.                 echo '  Error: ' . $handle->error . ' </font>';
  67.           echo '<br><br><input type="button" value="Retry" onClick="history.go(-1)" class="form_button_1">';
  68.             }
  69.       
  70.       $handle->clean();
  71.     }
  72.     // add this set of pictures to the main array
  73.     $count++;
  74.     $uploaded[] = $this_upload;
  75.   }
  76.  
  77.  
  78.  
  79.  
  80.   // everything was fine !
  81.   if ($good=='yes') {
  82.     echo 'File Successfully Uploaded!<br /><br />';
  83.     echo '<a href="inv.php">Go to Inventory Lists</a>';
  84.   }
  85.  
  86.  
  87.   if (array_key_exists(1, $uploaded)) {
  88.     
  89.     $ch1 = 1;
  90.     $mpic[1]=", picture_1='".$uploaded[1]['large']."', picture_1t='".$uploaded[1]['small']."'";
  91.     } else {
  92.     $ch1 = 0;
  93.     $mpic[1] = '';
  94.   }
  95.   if (array_key_exists(2, $uploaded)) {
  96.     $ch2 = 1;
  97.     $mpic[2]=", picture_2='".$uploaded[2]['large']."', picture_2t='".$uploaded[2]['small']."'";
  98.     } else {
  99.     $ch2 = 0;
  100.     $mpic[2] = '';
  101.   }
  102.   if (array_key_exists(3, $uploaded)) {
  103.     $ch3 = 1;
  104.     $mpic[3]=", picture_3='".$uploaded[3]['large']."', picture_3t='".$uploaded[3]['small']."'";
  105.     } else {
  106.     $ch3 = 0;
  107.     $mpic[3] = '';
  108.   }
  109.  
  110.       // if you want to replace the pics, delete old pic and upload new pic
  111.       if (!empty($row['picture_1'])) {
  112.         if ($ch1==1) {
  113.           unlink('../img/' . $row['picture_1']);
  114.           unlink('../img/' . $row['picture_1t']);
  115.         }
  116.       }
  117.       
  118.       if (!empty($row['picture_2'])) {
  119.         if ($ch2==1) {
  120.           unlink('../img/' . $row['picture_2']);
  121.           unlink('../img/' . $row['picture_2t']);
  122.         }
  123.       }
  124.       
  125.       if (!empty($row['picture_3'])) {
  126.         if ($ch3==1) {
  127.           unlink('../img/' . $row['picture_3']);
  128.           unlink('../img/' . $row['picture_3t']);
  129.         }
  130.       }
  131.  
  132.  
  133.         $todayis = strftime('%A, %B %#d, %Y - %H:%M:%S ') ;
  134.         $who = $session['first_name'];
  135.  
  136.  
  137.       $query = "LOCK TABLES $table3_1 WRITE";
  138.       mysql_query($query);
  139.       
  140.         $query = "UPDATE $table3_1 SET date_time_add_pic_2 = '$todayis', 
  141.           by_who_pic_2 = '$who' 
  142.           $mpic[1] $mpic[2] $mpic[3], 
  143.           date_time_rmv_pic = '', 
  144.           by_who_pic_rmv = '' 
  145.           WHERE cID = '$c_id'";
  146.       
  147.       mysql_query($query);
  148.       
  149.       $query = "UNLOCK TABLES";
  150.       mysql_query($query);

多分、この下記コード辺りが問題なのかなと思うのですが、

73. $count++;
74. $uploaded[] = $this_upload;

どのようにコードを修正すればこの問題を解決できるのか
ここで詰まってしまって分かりません。

すみませんが教えて頂けると助かります。

宜しくお願いします。


ツリー一覧

┗A01weekendphpざっとしか見ていないですが、 74行目を >>CODE <?
 ┗A01-1edokkoweekendphpさま、 おかげさまで、やっと問題が解決

回答一覧

並び替え:

A01 満足
answererweekendphp [5月12日 15:54]

ざっとしか見ていないですが、
74行目を
  1. <?php
  2.      $uploaded[$k] = $this_upload;
と変えればいいような気がしますが。

うまく動かない場合、
SQL文や配列などを echo や
  1. <?php
  2.     var_dump($uploaded);
などで、画面に表示させて、期待通りの値になっているかどうかチェックしましょう。

参考まで。

この意見に回答する

ツリーへ TOPへ

A01-1
replyeredokko [5月13日 03:53]

weekendphpさま、

おかげさまで、やっと問題が解決しました。
どうも有難うございます。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
動的なURLを静的に見せる方法
 このエントリーをはてなブックマークに追加 
A
普通に考えて、mod_rewrite でしょうね。 http://www.nishishi.com/blog/2006/01/mod_rewrite_url.html...

>>続きを読む

GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)