2012-04-14 50 views
0

好吧我有一個困境。我希望能夠上傳最多六個圖像和兩個文本字段(標題和desc)到數據庫...實際上讓我糾正自己,我想存儲在圖像的名稱,所以我可以得到後來的照片。我知道如何將多個圖片上傳到一個文件夾,並且我知道如何將行插入到數據庫中,但是我無法弄清楚如何組合這兩者。如果將其與圖像工作結合起來,如果其中一個文件存在問題,將取消整個過程?上傳多個圖像到db與2個文本字段

my db setup is simply id |標題| desc | img1 | img2 | img3 | img4 | img5 | img6

我寫到目前爲止代碼:

if (isset($_POST['formsubmitted'])) { //if form was submitted 
$error = array();//Declare An Array to store any error message 

if (empty($_POST['title'])) {//if no name has been supplied 
    $error[] = 'Please enter a title for your post.';//add to array "error" 
    $show_errors = 'show'; 
} else { 
    $title = $_POST['title'];//else assign it a variable 
} 



if (empty($_POST['desc'])) { 
    $error[] = 'Please enter a short desc of your post.';//add to array "error" 
    $show_errors = 'show'; 
} else { 
    $desc = $_POST['desc'];//else assign it a variable 
} 



    if (empty($error)){ //if no error, insert into db 

$new_post = "INSERT INTO `posts` (`title`, `desc`) VALUES ('$title', '$desc')"; 
    $result = mysql_query($new_post) or die(mysql_error('error inserting post')); 

} 


} 

那麼HTML是:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
</head> 

<body> 
<?php if (isset($show_errors)) { 
    //show user the errors if form cant be submitted 
    echo '<div> <ol>'; 
     foreach ($error as $key => $values) { echo ' <li>'.$values.'</li>'; } 
     echo '</ol></div><br />'; }?> 

<br /> 
<form method="post" id="newpost" action="" enctype="multipart/form-data"> 
<div><input name="title" type="text" value="" class="title_input"></div> 
<div><textarea id="area4" cols="40" rows="5" name="desc" class="desc_texbox"></textarea></div> 
<div><input type="file" name="images1"></div> 
<div><input type="file" name="images2"></div> 
<div><input type="file" name="images3"></div> 
<div><input type="file" name="images4"></div> 
<div><input type="file" name="images5"></div> 
<div><input type="file" name="images6"></div> 
<input type="hidden" name="formsubmitted" value="TRUE" /> 
<input type="submit" id="upload" value="Upload"> 
</form> 
</body> 
</html> 
+1

我會建議通過將圖像移動到圖像表而不是在posts表中設置重複字段來規範化數據結構。 – nnichols 2012-04-14 15:55:00

回答

1

這並沒有完成,但它應該讓你朝着正確的方向前進。請注意,我已經根據更改文件字段的方式將其重命名爲<input type="file" name="images[1]" />,以便它們可以作爲數組進行處理。

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', true); 

$db = new PDO('mysql:dbname=test;host=127.0.0.1', 'user', 'pass'); 


if (isset($_POST['formsubmitted'])) { //if form was submitted 

    $error_array = array();//Declare An Array to store any error message 

    // check all images for upload errors 
    // you should probably add extra file validation here - check image type etc 
    $upload_error = false; 
    foreach($_FILES['images']['error'] as $error) { 
     if ($error != 0 && $error != 4) { 
      $upload_error = true; 
     } 
    } 

    if ($upload_error) { 
     $error_array[] = 'One of the image uploads failed!'; 
    } 


    if (empty($_POST['title'])) {//if no name has been supplied 
     $error_array[] = 'Please enter a title for your post.';//add to array "error" 
    } else { 
     $title = $_POST['title'];//else assign it a variable 
    } 

    if (empty($_POST['desc'])) { 
     $error_array[] = 'Please enter a short desc of your post.';//add to array "error" 
    } else { 
     $desc = $_POST['desc'];//else assign it a variable 
    } 

    if (empty($error_array)){ //if no error, insert into db 

     $new_post = "INSERT INTO `posts` (`title`, `desc`) VALUES (?, ?)"; 
     $stmt = $db->prepare($new_post); 
     $stmt->execute(array($title, $desc)); 

     $new_post_id = $db->lastInsertId(); 

     // now start processing the images 
     $image_sql = "INSERT INTO `post_images` (`post_id`, `img_name`) VALUES (?, ?)"; 
     $stmt = $db->prepare($image_sql); 

     for ($i = 1; $i <= 6; $i++) { 

      // you need to add some code to vlaidate, move and rename the files 

      // add the files to the db 
      $file_name = $_FILES['images']['name'][$i]; 
      $stmt->execute(array($new_post_id, $file_name)); 

     } 

    } else { 
     print_r($error_array); 
    } 

} 
?> 
+0

謝謝!我絕對可以用這個 – Keezy 2012-04-16 11:07:00

0

我覺得比較好,首先要上傳的圖片服務器上,如果move_uploaded_file( )函數返回錯誤,在$ error數組中添加一個值。 這樣,只有上傳成功完成,數據纔會被插入到數據庫中。