2011-01-27 9 views
0

このコードを編集して1枚の画像を2枚にアップロードしましたが、醜いです - 基本的には以前の変数を複製しました。私は8つの画像を取得したいと思いますし、各画像の個別のインスタンスを作る代わりに、ループを作成して配列を作成する方法があると想像してください。任意の洞察力のための複数画像をSQL DBにアップロードするためのループ

おかげ..

これは、これまでの私のコードです:

<?PHP 

include("inc/header.php"); 

$back = "<a href='sell.php'>Click Here To Go Back And Try Again</a>"; 

if(isset($_POST['upload']) && $_FILES['userfile']['size'] > 0 || $_FILES['userfile2']['size'] > 0) 
{ 

$title = $_POST['title']; 
$description = $_POST['description']; 
$category = $_POST['category']; 
$price = $_POST['price']; 
$name = $_POST['name']; 
$number = $_POST['number']; 
$email = $_POST['email']; 
$password = $_POST['password'];  


// PICTURE UPLOAD SYSTEM 

$imagename = basename($_FILES['userfile']['name']); 
$imagename2 = basename($_FILES['userfile2']['name']); 


if(empty($imagename) || empty($imagename2)) { 
$error = 1; 
echo"<h2 class='error'>The name of the image was not found.</h2>".$back; 
} 

if($error != 1 && $noimg != 1) 
{ 

     $filename = stripslashes($_FILES['userfile']['name']); 
     $extension = substr(strrchr($filename, '.'), 1); 
     $extension = strtolower($extension); 

     $filename2 = stripslashes($_FILES['userfile2']['name']); 
     $extension2 = substr(strrchr($filename2, '.'), 1); 
     $extension2 = strtolower($extension2); 

//if it is not a known extension, we will suppose it is an error and will not upload the file, 
//otherwise we will do more tests 
    } 

if (($extension != "jpg") && ($extension2 != "jpg") && ($extension != "jpeg") && ($extension != "jpeg") && ($extension != "png") && ($extension2 != "png") && ($extension != "gif") && ($extension2 != "gif")) 
     { 
     //print error message 
      echo '<h2 class="error">Error. Images Must Be Jpg, Gif, or Png Format! Please Go Back And Try Another Image.</h2>'.$back.''; 
      $errors=1; 
     } 
     else 
     { 
$time = time(); 
$newimage = "photos/" . $time . $imagename; 
$newimage2 = "photos/" . $time . $imagename2; 

$result = @move_uploaded_file($_FILES['userfile']['tmp_name'], $newimage); 
$result2 = @move_uploaded_file($_FILES['userfile2']['tmp_name'], $newimage2); 
if(empty($result)) { 
$error = 1; 
echo "<h2 class='error'>There was an error moving the uploaded file.</h2><br/>".$back.""; 
} 

// insert to SQL 

$date = date("Y-m-d G:i:s"); 
$query = "INSERT INTO classifieds (adid, title, description, cat, price, name, number, email, password, picture, picture2, date, views, authorized) VALUES ('', '$title', '$description', '$category', '$price', '$name', '$number', '$email', '$password', '$newimage', '$newimage2', '$date', '0', '0')"; 
mysql_query($query) or die(mysql_error()); 

} 
+0

なぜ@move_uploaded_file()を使用していますか? – JakeParis

+0

私はこれをすべて書きませんでした。これは編集中のものです。 $ _FILESグローバルを呼び出してSQLテーブルにイメージを取得しなくても、move_uploaded_fileを使って一時ファイルを取り出し、変数$ newimageにロードするのが好きなようです。あなたが指摘したように、本当に適切な「動き」ではありません。 –

+0

いいえ、私の主張は「なぜあなたはエラー抑制を使用していますか?」でした。しかし、私はあなたがそれを書かなかったと思います。 – JakeParis

答えて

1

あなたは

<input type='file' name='file[]' /> 
<input type='file' name='file[]' /> 
<input type='file' name='file[]' /> 

を使用して配列に入力を強制する場合、私はあなたが非常に簡単に配列をループできるようになりますfile-upload.multiple.php

function reArrayFiles(&$file_post) { 
    $file_ary = array(); 
    $file_count = count($file_post['name']); 
    $file_keys = array_keys($file_post); 

    for ($i=0; $i<$file_count; $i++) { 
     foreach ($file_keys as $key) { 
      $file_ary[$i][$key] = $file_post[$key][$i]; 
     } 
    } 
    return $file_ary; 
} 

から見つかった次の関数を使用しますあなたが複数のファイルを扱っていることにほとんど気付かない。

if (isset ($_POST['upload'])) { 
    extract ($_POST, EXTR_PREFIX_ALL, 'post'); 

    $file_ary = reArrayFiles ($_FILES['file']); 

    $error = 0; 
    foreach ($file_ary as $file) { 
     // Test a file is uploaded for each input 
     if ($file['size'] == 0 || empty ($file['name'])) { 
      $error = 1; 
      break; 
      // Note: If not all input slots are required to be filled, 
      //  replace the above with: 
      //   continue; 
      //  This will stop running this step of the loop here 
      //  and start the next one. 
     } 
     // Test file format 
     if (!in_array ($file['type'], array (
       'image/jpg', 'image/png', 
       'image/jpeg', 'image/gif')) { 
      $error = 2; 
      break; 
     } 
    } 

    if (!$error) { // True is returned if value is not 0; 
     $newpath = 'photos/'.time(); 
     foreach ($file_ary as $file) { 
      $res = @move_uploaded_file($file['tmp_name'], 
        $newpath.'-'.$file['name']); 
      unlink ($file['tmp_name']); 
      if (!$res) { 
       $error = 3; 
       break; 
      } 
     } 
    } 

    if (!$error) { 
     $res = mysql_query(' ... insert query ... '); 
     if (!$res) { 
      $error = 4; 
     } 
    } 

    if ($error) { 
     // If you wanted to be super thorough, you could loop through 
     // and make sure that if any files did get moved that they 
     // were deleted. 
     $msg = ""; 
     switch ($error) { 
      case 1: $msg = 'File not found.'; break; 
      case 2: $msg = 'Incorrect file format.'; break; 
      case 3: $msg = 'Error moving uploaded file.'; break; 
      case 4: $msg = 'Database query failed. '.mysql_error(); break; 
      default: $msg = 'Error'; 
     } 
     echo "<h2 class='error'>$msg</h2><a href='sell.php'>Try Again.</a>"; 
    } 
} 
+0

うわー、そのガッターボールのおかげで。それをまだ差し込んでいませんが、とてもきれいに見えます。フルコードを書いていただきありがとうございます。 –

0

チェックアウト:私は過去にそれをやったhttp://www.php.net/manual/en/features.file-upload.multiple.php

一つのハードコード化された方法があります:

<input type="file" name="file_1" /> 
<input type="file" name="file_2" /> 
<input type="file" name="file_3" /> 

してから提出:

foreach($_FILES as $file) { 
    // file actions 
} 
関連する問題