2013-04-24 33 views
0

如何使用可選上傳文件提交表格數據。我的意思是,我可以提交表格數據和上傳的文件嗎?但是我想讓上傳文件可選。下面是我的代碼:如何使用可選上傳文件提交表格數據

<?php 
define ("MAX_SIZE","5000"); 
$errors=0; 



if(($_SERVER["REQUEST_METHOD"] == "POST") && isset($_FILES["file"]["size"]) && ($_FILES["file"]["size"] > 0)) 
{ 

    $image =$_FILES["file"]["name"]; 
    $uploadedfile = $_FILES['file']['tmp_name']; 


    if ($image) 
    { 

     $filename = stripslashes($_FILES['file']['name']); 

     $extension = getExtension($filename); 
     $extension = strtolower($extension); 


     if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) 
     { 

      $change='<div class="msgdiv">Unknown Image extension </div> '; 
      $errors=1; 
     } 
     else 
     { 

      $size=filesize($_FILES['file']['tmp_name']); 


      if ($size > MAX_SIZE*1024) 
      { 
       $change='<div class="msgdiv">You have exceeded the size limit!</div> '; 
       $errors=1; 
      } 


      if($extension=="jpg" || $extension=="jpeg") 
      { 
       $uploadedfile = $_FILES['file']['tmp_name']; 
       $src = imagecreatefromjpeg($uploadedfile); 

      } 
      else if($extension=="png") 
      { 
       $uploadedfile = $_FILES['file']['tmp_name']; 
       $src = imagecreatefrompng($uploadedfile); 

      } 
      else 
      { 
       $src = imagecreatefromgif($uploadedfile); 
      } 

      echo $scr; 

      list($width,$height)=getimagesize($uploadedfile); 


      $newwidth=500; 
      $newheight=($height/$width)*$newwidth; 
      $tmp=imagecreatetruecolor($newwidth,$newheight); 


      $newwidth1=300; 
      $newheight1=($height/$width)*$newwidth1; 
      $tmp1=imagecreatetruecolor($newwidth1,$newheight1); 
      imagealphablending($tmp1, false); 
      imagesavealpha($tmp1, true); 
      imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height); 

      imagecopyresampled($tmp1,$src,0,0,0,0,$newwidth1,$newheight1,$width,$height); 

      $image_name=time().'_'.$_FILES['file']['name']; 
      $filename = "images/". $image_name; 

      $filename1 = "images/small_". $image_name; 
      $uid=$_SESSION['uid']; 


      imagejpeg($tmp,$filename,100); 

      imagejpeg($tmp1,$filename1,100); 

      imagedestroy($src); 
      imagedestroy($tmp); 
      imagedestroy($tmp1); 
     }} 


} 


if(isset($_POST['Submit']) && !$errors) 
{ 
    $category_group= $_POST['category_group']; 
    $title=$_POST['title']; 
    $details=$_POST['details']; 
    $ad_keywords=$_POST['ad_keywords']; 
    $category_state=$_POST['category_state']; 
    $category_city=$_POST['category_city']; 
    $address=$_POST['address']; 
    $telephone=$_POST['telephone']; 
    $email=$_POST['email']; 
    $website=$_POST['website_link']; 
    $price=$_POST['price']; 
    $filename= ($_FILES["file"]["size"] > 0) ? $filename : ''; 
    $filename1= ($_FILES["file"]["size"] > 0) ? $filename1 : ''; 




    $url=time().'-'. createUrl($title); 
    if(!$category_group || !category_city || !$title || !$details || !$category_state){ 
     echo "enter state and city name"; 
    }else{ 

     try{ 
     $sth = $dbh->prepare(" 
          INSERT INTO 
            advertisement(user_id,ad_image_big,ad_image_small,ad_cat_group,ad_title,ad_details,ad_state,ad_city,ad_address,ad_telephone,ad_email,ad_website,ad_price,ad_slug,ad_keywords) 
          VALUES(:field1,:field2,:field3,:field4,:field5,:field6,:field7,:field8,:field9,:field10,:field11,:field12,:field13,:field14,:field15) 
          "); 
     $sth->execute(array(':field1' => $uid, ':field2' => $filename, ':field3' => $filename1, ':field4' => $category_group, ':field5' => $title, ':field6' => $details, ':field7' => $category_state,':field8'=> $category_city, ':field9' => $address, ':field10' => $telephone,':field11'=> $email,':field12'=> $website, ':field13' => $price, ':field14' => $url , ':field15'=> $ad_keywords)); 
     }catch (PDOException $ex){ 

      echo "An Error occured while inserting data to database"; 
      some_logging_function($ex->getMessage()); 
     } 


     header('location:success.php'); 
    } 
} 
?> 

每當我嘗試提交表單沒有上傳文件我得到這個錯誤:

"An Error occurred while inserting data to database"

這是在閉鎖段。如果我上傳一個文件,我會收到一條沒有任何錯誤的成功消息。請幫幫我。

+0

你寫了多少代碼? – 2013-04-24 22:38:25

+0

這不是我的問題...但我從一些教程得到幫助....現在你可以幫助或浪費你的時間在這裏 – nohan 2013-04-24 22:46:45

+0

Crikey!我只是問問。根據你是否做過,我的答案會有所不同。 – 2013-04-24 22:48:40

回答

1

這裏是我做了不久前的代碼......有同樣的問題:)

形式本身:

  <form action="index.php" method="post" enctype='multipart/form-data'> 
      <input class="header_input" type="text" name="header" /> 
      <br/><span class="input_headers"><p>Content</p></span> 
      <textarea class="textarea_input" rows="10" cols="30" name="content"> 
      </textarea><br /> 
      Select File: <input type='file' name='filename' size='10' /><br /> 
      <input type="submit" class="submit" /> 
      </form> 

本書雖然它不檢查,閹東西便被輸入到「頭」和「內容」部分,因此要儘量解決這個問題:

if (isset($_POST['header']) && isset($_POST['content'])) { 


     $header = mysql_real_escape_string(htmlentities($_POST['header'])); 
     $content = mysql_real_escape_string(nl2br(htmlentities($_POST['content']))); 

     $sql = mysqli_query($con,"INSERT INTO posts (Header, Content) VALUES 
     ('{$header}','{$content}')"); 
} 

而這個上傳圖片,如果有一個:

if (isset($_FILES['filename']['name'])) { 

    $name = htmlentities($_FILES['filename']['name']); 

     $allowedExts = array("gif", "jpeg", "jpg", "png"); 

     $extension = end(explode(".", $_FILES['filename']['name'])); 

     if ((($_FILES['filename']['type'] == "image/gif") 
     || ($_FILES['filename']['type'] == "image/jpeg") 
     || ($_FILES['filename']['type'] == "image/jpg") 
     || ($_FILES['filename']['type'] == "image/pjpeg") 
     || ($_FILES['filename']['type'] == "image/x-png") 
     || ($_FILES['filename']['type'] == "image/png")) 
     && ($_FILES['filename']['type'] < 20000) 
     && in_array($extension, $allowedExts)) { 

      $result = mysqli_query($con,"SELECT * FROM posts WHERE PID=(SELECT max(PID) FROM posts)"); 

      $row = mysqli_fetch_array($result); 

      $id = $row['PID']; 

      $new_name = $id . "_" . "000" . ".jpg"; 

      if (file_exists("images/" . $new_name)) { 

       $new_name_ex = $id . "_" . "001" . ".jpg"; 

       move_uploaded_file($_FILES['filename']['tmp_name'],"images/" . $new_name_ex); 

       $sql = mysqli_query($con,"UPDATE posts SET Images='{$new_name_ex}' WHERE PID='{$id}'"); 
      } else { 

     move_uploaded_file($_FILES['filename']['tmp_name'],"images/" . $new_name); 

     $sql = mysqli_query($con,"UPDATE posts SET Images='{$new_name}' WHERE PID='{$id}'"); 
    } 
} 
} 

希望幫助:)我是新來的PHP,所以也許有一種方法,使所有這些代碼更簡單,本書雖然我希望這回答你的問題

+0

thnx克里斯...我會檢查出來,但你不調整圖像大小。 – nohan 2013-04-24 22:54:55

1

從PHP文檔(http://php.net/manual/en/features.file-upload.post-method.php),Example#3上傳數組文件通過遍歷每個文件(如果您有一個文件數組)可以完成您所需要的大部分工作,那麼if語句將檢查文件是否存在。下面的代碼來自PHP文檔:

foreach ($_FILES["pictures"]["error"] as $key => $error) { 
     if ($error == UPLOAD_ERR_OK) { 
      $tmp_name = $_FILES["pictures"]["tmp_name"][$key]; 
      $name = $_FILES["pictures"]["name"][$key]; 
      move_uploaded_file($tmp_name, "data/$name"); 
     } 
    } 

如果沒有文件,代碼只是跳過上傳並轉到下一個。

相關問題