未选择图像文件时无法停止处理表单

时间:2012-06-04 18:02:46

标签: php file-upload error-handling

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

这是我的一些代码:

//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){...

4 个答案:

答案 0 :(得分:2)

看起来您的文件输入名称为files[],在这种情况下,$ _FILES [“files”] [“name”]将是一个数组,以检查用户是否提供了上传图片,< / p>

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]
    }
}

答案 1 :(得分: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 :(得分:1)

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

    // 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'];
                }
            }
        }

答案 3 :(得分:1)

如果您希望用户在未选择任何图像时无法发送任何请求,您可以通过Java脚本客户端进行此操作。当表单提交即将开始时,用户将收到错误。但请记住,用户可以轻松地完成此验证。没有办法在客户端做它,它是可靠的。最好在服务器端检查,因为其他人已经回答了。