php提交表单而不选择图像

时间:2014-07-20 21:22:56

标签: php

我需要在此代码中进行编辑,即使没有选择图像,我也需要提交表单。 当我提交表格时没有选择图像我得到了这个错误"未知的扩展名!",因为我想提交没有图像的其余数据

<?php


$session_id='1'; //$session id
define ("MAX_SIZE","9000"); 
function getExtension($str)
{
         $i = strrpos($str,".");
         if (!$i) { return ""; }
         $l = strlen($str) - $i;
         $ext = substr($str,$i+1,$l);
         return $ext;
}


$valid_formats = array("jpg", "png", "gif", "bmp","jpeg");
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST") 
{

$uploaddir = "uploads/"; //a directory inside
foreach ($_FILES['photos']['name'] as $name => $value)
{

    $filename = stripslashes($_FILES['photos']['name'][$name]);
    $size=filesize($_FILES['photos']['tmp_name'][$name]);
    //get the extension of the file in a lower case format
      $ext = getExtension($filename);
      $ext = strtolower($ext);

     if(in_array($ext,$valid_formats))
     {
       if ($size < (MAX_SIZE*1024))
       {
       $image_name=time().$filename;
       echo "<img src='".$uploaddir.$image_name."'  width='50px' height='50px' class='imgList'>";
       $newname=$uploaddir.$image_name;

       if (move_uploaded_file($_FILES['photos']['tmp_name'][$name], $newname)) 
       {
       $time=time();
       $ad_id=$_POST['ad_id'];
       mysql_query("INSERT INTO user_uploads(image_name,user_id_fk,created,ad_id) VALUES('$image_name','$session_id','$time','$ad_id')");
       }
       else
       {
        echo '<span class="imgList">You have exceeded the size limit! so moving unsuccessful! </span>';
        }

       }
       else
       {
        echo '<span class="imgList">You have exceeded the size limit!</span>';

       }

      }
      else
     { 
        echo '<span class="imgList">Unknown extension!</span>';

     }

 }
}

?>

1 个答案:

答案 0 :(得分:2)

您的代码正在寻找不存在的文件扩展名。那是错误。如果您不想要图像,只有在提交图像时才进行检查。

您可以将图片代码包装在此:

if(isset($_FILES['photos']) && $_FILES['photos']['size'] > 0){

}

此代码检查是否有文件上传到临时目录,以及是否大小超过0.如果没有上传文件,PHP默认返回大小为0.

正如Alexis_user的评论中所述,您的查询需要移到此if语句之外,以确保它继续运行。但是,如果您在查询中需要图像,则插入可能是错误的。

您可以将查询保留在原来的位置,只需添加第二个查询:

if(isset($_FILES['photos']) && $_FILES['photos']['size'] > 0){
    //Do image stuff and query
}else{
    //Do query without image.
}