【问题标题】:Can't get the upload form in CodeIgniter to work properly无法让 CodeIgniter 中的上传表单正常工作
【发布时间】:2012-09-22 23:53:41
【问题描述】:

我有一个表单,用户可以在其中编辑他们的公开个人资料并在此过程中上传图片。一切正常,除了当用户上传照片或只是将其留空而不更改它时,它仍然会继续并尝试上传它并在它为空时引发错误......我确实有一个检查,但是它只是忽略它。

if(isset($_FILES['userfile']))
    {
        $file_name = $this->session->userdata('user_id');
        $img = $this->custom_lib->img_upload('./upload/user/', $file_name);
        $user_pic = 'upload/user/'.$file_name.$img['file_ext'];
    } else {
        $user_pic = 'upload/default.png';
    }

我认为问题出在 if 语句中,但我看不出它可能是什么。如果我确实选择了一张图片,它会很好地上传它并且一切正常。如果我将图像字段留空(不选择文件)而不是这样做:

$user_pic = 'upload/default.png';

它尝试上传一个不存在的文件...然后它抛出一个错误。 img_upload() 函数在我制作的自定义库中,但是如果没有提交文件,甚至不应该调用该函数。

感谢您的帮助!

【问题讨论】:

    标签: php codeigniter upload


    【解决方案1】:

    isset 将返回 true,即使您正在检查的项目不包含任何内容、为 null 或为 false。

    为避免此问题,您可以像这样使用 empty

    if(!empty($_FILES['userfile']))
    

    仅当 $_FILES['userfile'] 包含不为 null、false 或空的值时,才会返回 true。

    希望对您有所帮助:-)。

    【讨论】:

    • 当我执行 print_r($_FILES['userfile']); 时,我仍然得到同样的错误。它返回一个数组,上面写着 Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) 我怎样才能避免这种情况?
    • 我最终做了 if($_FILES['userfile']['name'] != '') 这解决了问题......但是为什么 empty() 函数不起作用?有什么想法吗?
    • 你也可以这样做 if(!empty($_FILES['userfile']['name'])) 如果有帮助,我的解决方案是错误的,因为我忘记了错误可能会导致它“不为空”。道歉。
    • 来自官方文档的仅供参考:isset() 如果测试已设置为 NULL 的变量,将返回 FALSE。
    • 这将教会我尝试记住我脑海中的功能;-)
    猜你喜欢
    • 1970-01-01
    • 2013-04-29
    • 2015-02-15
    • 2012-11-18
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    相关资源
    最近更新 更多