【问题标题】:ignoring blank file upload field忽略空白文件上传字段
【发布时间】:2013-06-14 20:51:14
【问题描述】:

我有一个带有上传字段的表单,它工作正常。它上传并且一切都很好,除了上传字段为空时。数据库表中的字段也变为空白,其中没有任何内容,甚至没有旧图像条目!

我的表单:

<form enctype="multipart/form-data" action="add.php" method="POST"> 
Name: <input type="text" name="name"><br> 
E-mail: <input type="text" name = "email"><br> 
Phone: <input type="text" name = "phone"><br> 
Photo: <input type="file" name="site_logo"><br> 
<input type="submit" value="Add"> 
</form>

PHP 代码:

<?php
    $target = "../upload/";
    $target = $target . basename($_FILES['site_logo']['name']);?>

<?php
  move_uploaded_file($_FILES['site_logo']['tmp_name'], $target);
  // output a list of the fields that had errors
     if (!empty($errors)) {
       echo "<p class=\"errors\">";
       echo "Please review the following fields:<br />";

          foreach($errors as $error) {
       echo " - " . $error . "<br />";
   }
       echo "</p>";
       }
?>

查询:

$site_logo=($_FILES['site_logo']['name']);


                $query = "UPDATE ss_settings SET 
                            site_logo = '{$site_logo}'
                        WHERE id = 1 ";
                $result = mysql_query($query, $connection);

我已经设置了数据库连接和更新查询以及所有内容。刚刚发布了流程代码,所以你们很清楚。我只是希望它在字段为空时什么都不做。

【问题讨论】:

  • 那么为什么不实现一个if empty 函数来阻止它进一步发展呢?
  • 我尝试过这样做,但不起作用。你能写代码吗?也许我做错了
  • 如果您使用相同的表格来编辑文本数据并且不需要上传文件,您应该发布您的数据库代码;出现问题时如何构建查询。
  • 您好,在向数据库输入数据之前,您应该使用 js valiadtion 来检查输入是否存在,并检查页面上是否存在 post/get 数据,即检查 isset 和空条件

标签: php forms file-upload


【解决方案1】:

查看http://www.php.net/manual/en/features.file-upload.errors.php解释的错误消息

检查文件是否未上传:

if ($_FILES['site_logo']['error'] === UPLOAD_ERR_NO_FILE)

更好的方法是检查是否没有错误。

if ($_FILES['site_logo']['error'] === UPLOAD_ERR_OK)

【讨论】:

    【解决方案2】:

    如果您的查询是 UPDATE 语句,则不应更改它,也可以尝试使用

    <?php
    // ...
    if($_FILES['site_logo']['name'] == NULL){
       // do stuff when no file field is set
    }else{
       // do stuff when file is set
    }
    // ...
    ?>
    

    【讨论】:

    • 它没有用,你能写下整个代码吗?也许我做错了。
    【解决方案3】:

    就我个人而言,我不会为文件使用未经处理的名称,但在您的情况下,您需要做的就是在进行查询之前检查有效的文件上传。

    类似(在PDO 中,mysql_* 函数已被弃用):

    // first line borrowed from @DaveChen, +1 for that
    if ($_FILES['site_logo']['error'] === UPLOAD_ERR_OK)
    {
      $stmt = $db->prepare("UPDATE `ss_settings` SET 
                                `site_logo` = :site_logo
                            WHERE `id` = :id ";
    
      // bind variables
      $stmt->bindValue(':site_logo', $_FILES['site_logo']['name'], PDO::PARAM_STR);
      $stmt->bindValue(':id', $the_ID, PDO::PARAM_INT);
    
      // execute query
      $stmt->execute();
    }
    

    【讨论】:

      【解决方案4】:

      也许尝试这样的事情来防止处理空白上传:

      if($_FILES['site_logo']['error']==0) { 
        // process 
      } else { 
        // handle the error 
      }
      

      http://php.net/manual/en/features.file-upload.errors.php

      【讨论】:

        【解决方案5】:

        您的问题是您只是假设已成功上传。 从不假设成功。始终检查故障。 PHP 在 $_FILES 中提供['error'] 参数是有原因的。使用它:

        if ($_FILES['site_logo']['error'] == UPLOAD_ERR_OK) {
           ... upload was successful
        } else { 
           die("Upload failed with error code: " . $_FILES['site_logo']['error']);
        }
        

        错误代码在这里定义:http://www.php.net/manual/en/features.file-upload.errors.php

        您需要检查代码 4 (UPLOAD_ERR_NO_FILE),这意味着用户根本没有上传任何内容。

        【讨论】:

        • 这不是真正的“检查失败”,它是假设失败并检查成功。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-17
        • 2020-11-03
        • 1970-01-01
        相关资源
        最近更新 更多