【问题标题】:$_FILES data is always null$_FILES 数据始终为空
【发布时间】:2011-03-24 23:02:59
【问题描述】:

我正在尝试发布 PNG 图像。这是我的代码。

<form action="http://killprashanth.res.cmu.edu/index.php/main/post"  enctype="multipart/form-data" method="post" accept-charset="utf-8"> 
<div class="hidden"> 
 <input type="hidden" name="userid" value="" /> 
 <input type="hidden" name="thread" value="" /> 
</div>
<label for="text">Message text:</label>
<textarea name="text" cols="90" rows="12" ></textarea><br>
<table>
 <tr>
  <td style="width: 40%;">
   <label for="file">Image (optional):</label>
   <input type="file" name="file" value=""  />
  </td>
  <td style="width: 60%;">
   <input type="submit" name="submit" value="send" onclick="reload()" />
  </td>
 </tr>
</table>
</form>

public function post()
{
        move_uploaded_file($_FILES["file"]["tmp_name"], '/uploads'.$_FILES["file"]["name"]);

        $data = array(
                'userid' => $_POST['userid'],
                'thread' => $_POST['thread'],
                'text' => $_POST['text'],
                'image' => $_FILES["file"]["name"]
        );

        $this->db->insert('messages', $data);
}

在我的数据库中,除了图像(varchar)始终为 NULL 之外,一切正常。

【问题讨论】:

  • 文件是否上传到您的上传目录?
  • 你检查过整个数组吗:print_r($_FILES)?
  • 不要使用用户提供的文件名写入文件系统。这里有一个令人讨厌的目录遍历安全漏洞,但还有很多其他问题需要解决。将文件存储在自动生成的已知良好名称下,例如 uploadid-17236478.png
  • 不,根本不在上传目录中。我运行了 print_r,但浏览器中没有显示任何内容(它应该是这样工作的吗?)。谢谢,是的,我最初将它设计为使用 messageid.bbq 作为文件名,但我试图让它正常工作。

标签: php post file-upload file


【解决方案1】:

尝试删除:

onclick="reload()"

看看它现在是否有效。这可能会破坏文件上传(它会在提交表单之前运行“重新加载”)。

如果您想重新加载页面而不是实际转到已发布的页面,您可能需要考虑通过 AJAX 进行发布。

【讨论】:

  • 哦,对不起,我应该提到该函数目前实际上并没有做任何事情。不过我会试试的;谢谢。
  • 尝试模仿 php 页面上的示例代码:php.net/manual/en/function.move-uploaded-file.php 可能文件抛出错误?这很奇怪,因为它不起作用。我将在我的计算机上设置它并测试您的代码。给我几分钟...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 2017-05-07
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多