2012-03-14 98 views
1

我有一个与我的文件上传的问题,它工作正常,一切都好,但我得到更新我的数据,我想改变一切,除了图像和点击提交,我得到无效图像消息,我没有更新图像,所以文件输入文本框中没有文件,有没有办法绕过这个?PHP文件上传,如果留为空

if (($_FILES["image"]["type"] == "image/jpeg") || ($_FILES["image"]["type"] == "image/pjpeg")){ 
      if ($_FILES["image"]["error"] > 0){ 
       echo $_FILES["image"]["error"]; 
      }else{ 
       move_uploaded_file($_FILES["image"]["tmp_name"], 
       "../upload/CV_1_" . date("Ymd") . $_FILES["image"]["name"]);                  
       $class->update($id, $text, $image); 
       echo "<div style='padding-left:50px'><strong>Updated!</strong></div>"; 
      } 
     }else{ 
      echo "<div style='padding-left:50px'><strong>Invalid Image!</strong></div>"; 
     } 

什么上面的代码确实是拿那个文件,看看它的图像,如果有任何错误,告诉他们,然后将文件移动到正确的文件夹,并更新我的数据库。

这里是形式...

<form action="CV.php?action=updatesubmit" method="post" enctype="multipart/form-data"> 
<input type="hidden" value="<?php echo $array['id']; ?>" name="id" /> 
<p> 
<label for="text" style="vertical-align:top;">Text</label> 
<textarea name="text" id="text" cols="70" rows="20"><?php echo $array['text']; ?></textarea> 
</p> 

<p> 
<label for="image">Image</label> 
<input type="file" name="image" id="image" value="<?php echo $array['image']; ?>" /> 
</p> 

<p> 
<input type="submit" name="submit" id="submit" value="Update" /> 
</p> 

</form> 

我希望我是有道理的,我有绑一些东西的习惯,这听起来不错,但其他人不会知道我在说什么。

与我的代码玩,这是建议,但它不工作,我可能做错了什么。

if ($_FILES['image']['error'] === UPLOAD_ERR_OK) { 

    if (($_FILES["image"]["type"] == "image/jpeg") || ($_FILES["image"]["type"] == "image/pjpeg")){ 
     if ($_FILES["image"]["error"] > 0){ 
      echo $_FILES["image"]["error"]; 
     }else{ 
      move_uploaded_file($_FILES["image"]["tmp_name"], 
      "../upload/CV_1_" . date("Ymd") . $_FILES["image"]["name"]);  
} 
      $class->update($id, $text, $image); 
      echo "<div style='padding-left:50px'><strong>Updated!</strong></div>"; 
     } 
    }else{ 
     echo "<div style='padding-left:50px'><strong>Invalid Image!</strong></div>"; 
    } 

回答

4

您需要检查的实际上传你做任何事情与上传数据之前:

if ($_FILES['image']['error'] === UPLOAD_ERR_OK) { 
    ... got an upload ... 
} 
+0

我仍然收到消息“无效图像”我将编辑我的问题,以便您可以看到我的所作所为 – user1269625 2012-03-14 18:10:39

+0

执行'var_dump($ _ FILES)'来查看会发生什么。脚本中有许多OTHER问题与此同时,在上传文件之前,相信用户不要简单地执行'ren nastyvirus.exe cutekittens.jpg'。 – 2012-03-14 18:19:29

+0

让它工作......感谢MarcB对你的帮助:) – user1269625 2012-03-14 18:25:42

1

只要把if(isset($_FILES['image']))围绕整个街区。如果没有图像上传,文件条目将不存在。

+0

测试了这一点,现在 – user1269625 2012-03-14 17:53:05

+1

假。无论文件是否上传,[['image']'条目仍然存在。你必须检查'['error']'值。 '没有文件上传'将是错误代码4/UPLOAD_ERR_NO_FILE。 – 2012-03-14 18:00:55

+0

所以如果是这样的错误,那么继续排序的事情? – user1269625 2012-03-14 18:05:24

0

它会提交当且仅当图像上传。

<?php 
if ($_FILES["image"]["tmp_name"] && $_FILES["file"]["error"] < 0){ 
    if (($_FILES["image"]["type"] == "image/jpeg") || ($_FILES["image"]["type"] == "image/pjpeg")){ 
       if ($_FILES["image"]["error"] > 0){ 
        echo $_FILES["image"]["error"]; 
       }else{ 
        move_uploaded_file($_FILES["image"]["tmp_name"], 
        "../upload/CV_1_" . date("Ymd") . $_FILES["image"]["name"]);                  
        $class->update($id, $text, $image); 
        echo "<div style='padding-left:50px'><strong>Updated!</strong></div>"; 
       } 
      }else{ 
       echo "<div style='padding-left:50px'><strong>Invalid Image!</strong></div>"; 
      } 
} 
?> 
+1

坏主意。部分上传将仍然有一个tmp_name。检查'['error']'这会告诉你上传的真实状态。 – 2012-03-14 18:00:12

+0

@MarcB谢谢.. – Milap 2012-03-14 18:02:56