PHP提交表单而不选择图像


php submit form without selecting images

我需要在这段代码编辑,我需要提交的形式,即使没有选择的图像。当我提交表单而不选择图像时,我得到了这个错误"未知扩展!",因为我想提交没有图像的其余数据

<?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>';
     }
 }
}
?>

您的代码正在寻找不存在的文件扩展名。这就是误差。如果你不想需要图片,只在有图片提交时才执行检查。

你可以这样包装你的图像代码:

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.
}