【问题标题】:Not able to stop processing form when image file has not been chosen未选择图像文件时无法停止处理表单
【发布时间】:2012-06-08 19:09:24
【问题描述】:

我有一个表单,用于提交包含图像的新帖子。如果用户没有选择要上传的图像,我不希望帖子继续向服务器和数据库提交数据。目前我所做的一切都是让代码继续处理表单。

这是我的一些代码:

//check if the submit button has been clicked
        if( isset( $_POST['submit'] ) ){

            //validate the title and description
            $title = validate_title($_POST['title']);
            $desc = validate_desc($_POST['desc']);

            //Get other posted variables
            $cat = $_POST['cat'];
            $year = $_POST['year'];

            if($title && $desc != false){

                //check if an image has been submitted
                if( $_FILES['files']['name'] != ""){...

我也尝试过使用以下方法,但是在没有选择文件时都不会停止代码:

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

if( $_FILES['files']['name'] != UPLOAD_ERR_NO_FILE){...

【问题讨论】:

  • 检查名称应该可以。 var_dump($_FILES) 在你检查你有什么之前。
  • 我明白了:array(1) { ["files"]=> array(5) { ["name"]=> array(1) { [0]=> string(11) "d3beta1.png" } ["type"]=> array(1) { [0]=> string(9) "image/png" } ["tmp_name"]=> array(1) { [0]=> string(45) "C:\Users\chris\AppData\Local\Temp\php6B29.tmp" } ["error"]=> array(1) { [0]=> int(0) } ["size"] => 数组(1) { [0]=> int(1728245) } } }
  • 即使我选择要上传的图像也会给我错误,也使用:
  • "if((!empty($_FILES["files"])) && ($_FILES['files']['error'] == 0)) {"
  • 您缺少索引。 if ($_FILES['files']['name'][0] != "")

标签: php file-upload error-handling


【解决方案1】:

您应该查看bool is_uploaded_file ( string $filename )。

示例,其中 user_file 是文件上传的子数组:

<?php
if (is_uploaded_file($_FILES['userfile']['tmp_name']))
{
   // Success, file uploaded
}
else
{
   // Error, no file, invalid file, etc.
}
?>

【讨论】:

    【解决方案2】:

    我认为,这是处理所有上传文件的最佳过程,例如:

        // allowed extensions
    $extensions = array('.png', '.gif', '.jpg', '.jpeg','.PNG', '.GIF', '.JPG', '.JPEG');
    
            if((!empty($_FILES["files"])) && ($_FILES['files']['error'] == 0)) {
    
                // check extension
                $extension = strrchr($_FILES['files']['name'], '.');
                if (!in_array($extension, $extensions)) {
                    echo 'wrong file format, alowed only .png , .gif, .jpg, .jpeg';
                } else {
                    // get file size
                    $filesize = $_FILES['files']['size'];
    
                    // check filesize
                    if($filesize > $maxlimit){ 
                        echo "File size is too big.";
                    } else if($filesize < 1){ 
                        echo "File size is empty.";
                    } else {
    
                        // temporary file
                        $uploadedfile = $_FILES['files']['tmp_name'];
                    }
                }
            }
    

    【讨论】:

    • $extensions 数组不固定
    • 由于某种原因,这个 "if((!empty($_FILES["files"])) && ($_FILES['files']['error'] == 0)) {" 返回即使我选择一个文件,对我来说也是错误的。
    • 你已经改变了数组的语法,形成一个长字符串。
    • @crm 您是否设置了最大文件大小限制? $maxlimit = 9048576;字段表单字段的名称是什么?
    【解决方案3】:

    如果您希望用户在没有选择任何图像的情况下不能发送任何请求,您可以通过 java 脚本客户端来实现。当表单提交即将开始时,用户将收到错误消息。但请记住,用户可以轻松完成此验证。没有办法在客户端做到这一点,它是可靠的。最好在服务器端检查它,因为其他人已经回答了。

    【讨论】:

      【解决方案4】:

      看起来您的文件输入名称是files[],在这种情况下,$_FILES["files"]["name"] 将是一个数组,以检查用户是否提供了要上传的图像,

      foreach ($_FILES['files']["error"] as $index => $error){
          if ($error == UPLOAD_ERR_NO_FILE){
              //no file was uploaded in $index`th file input 
          }
          else{
              //other checks and process $_FILES['files']['tmp_name'][$index]
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 2018-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        相关资源
        最近更新 更多