【问题标题】:undefined index $_FILES file upload未定义索引 $_FILES 文件上传
【发布时间】:2014-04-29 02:12:19
【问题描述】:

我有这个 PHP 函数来验证文件类型及其以表单上传的扩展名:

    public function acceptedFileTypes($valueofformfield, $fieldname) {     
        $allowed = array('doc', 'pdf', 'docx', 'jpg', 'gif','png');      
        $value = $_FILES[$valueofformfield]['name'];         //UNDEFINED VARIABLE
        $extension = end(explode(".", $value));

        $valid = !in_array($extension, $allowed); //STRICT STANDARDS: ONLY VARIABLES SHOULD BE PASSED BY REFERENCE 

        if ($valid  == FALSE) {
            $this->emailErrors[] = "Your uploaded files cannot be accepted; only .doc, .docx, .pdf, or .jpg files only in $fieldname";
        }
        return 

var_dump($_FILES) 揭示:

array (size=1)
  'fileAttach' => 
    array (size=5)
      'name' => string 'mysql.init' (length=10)  //EXAMPLE FILE USED
      'type' => string 'application/octet-stream' (length=24)
      'tmp_name' => string 'C:\wamp\tmp\phpD106.tmp' (length=23)
      'error' => int 0
      'size' => int 101

如果您在笔记中注意到,那几天我一直在尝试寻找答案。我的 php 代码有什么问题。具体来说:

  1. 是什么让'$value = $_FILES[$valueofformfield]['name'];'一个未定义的变量?
  2. 是 $extension = end(explode(".", $value));获取上传文件扩展名的有效表达式?
  3. 是什么让 $valid = !in_array($extension, $allowed);传递参考的错误方式?

我已经在此处和其他网站上搜索了答案,但无济于事。

这个新手非常感谢帮助。谢谢

【问题讨论】:

  • 不知道是什么导致了您的问题,但您可以学习一些有关如何上传和编码的知识。检查:stackoverflow.com/questions/198346/…
  • 你如何调用acceptedFileTypes() 方法?因为在您的示例中,如果您没有为$valueofformfield 传递“fileAttach”,那么您当然会看到该错误。
  • 只是一个愚蠢的问题:是正确的:$value = $_FILES[$valueofformfield]['name'];或者它必须是: $value = $_FILES[$fieldname]['name']; ?
  • Crontab:对不起,我真的是一个新手,但是你是什么意思传递 fileattach。感谢回复
  • Dieter:谢谢你的提示,现在就学习

标签: php validation undefined


【解决方案1】:

$value = $_FILES[$valueofformfield]['name'];

我猜 valueofformfield 的值不是 'fileAttach'....var_dump 是你的朋友!

也许是:$value = $_FILES[$fieldname]['name']; -> //没有你的表单有点盲目猜测。

如果您收到未定义的警告,则您的 $value 未设置,因此该参数不存在。这给出了这个错误:只有变量应该通过引用传递。这里抛出错误:$extension = end(explode(".", $value));

检查参数/键是否存在(isset)以防止错误!

$valid = !in_array($extension, $allowed); -> 你的支票应该如何保存?将 .exe 文件重命名为 docx 将使用此检查将其上传。

【讨论】:

  • 还没有尝试过您的建议 $value = $_FILES[$fieldname]['name']。我使用 $fieldname 作为 HTML 表单中 'name='nameInFormField' 的参考;供参考。我已经使用相同的函数格式来验证其他表单字段,并且 $fieldname 对它们工作得很好。谢谢
  • 那么,如果您在其他任何地方使用 $fieldname,为什么还要为您的文件使用 $valueofformfield。
猜你喜欢
  • 2014-02-11
  • 1970-01-01
  • 2017-12-01
  • 2016-05-15
  • 2012-06-27
  • 2016-06-18
  • 2013-10-02
相关资源
最近更新 更多