图像上传时,获取类型是不可接受的错误

时间:2012-02-10 00:16:29

标签: php mysql

我正在使用以下代码upload.php,尝试让某人上传保存在我创建的目录中的图片(profile_images)并将文件名指向我的数据库:

    <?php

    session_start();
    require_once "database.php";
    db_connect();
    require_once "auth.php";
    $current_user = current_user();

//Check to see if the type of file uploaded is a valid image type
function is_valid_type($file)
{
    //This is an array that holds all the valid image MIME types
    $valid_types = array("upload_picture_fileinput/jpg", "upload_picture_fileinput/jpeg", "upload_picture_fileinput/bmp", "upload_picture_fileinput/gif", "upload_picture_fileinput/png");

    if (in_array($file['type'], $valid_types))
        return 1;
    return 0;   

}

function showContents($array) 
    {

        echo "<pre>";
        print_r($array);
        echo "</pre>";
    }

//Set some constants

//This variable is the path to the image folder where all the images are going to be stored

//Note that there is a trailing forward slash
$TARGET_PATH = "profile_images/";

//Get our POSTed variables
$upload_picture_fileinput = $_FILES['upload_picture_fileinput'];


//Sanitize input
$upload_picture_fileinput['name'] = mysql_real_escape_string($upload_picture_fileinput['name']);

//Build our target path full string.  This is where the file will be moved to
//i.e. profile_images/picture.jpg
$TARGET_PATH .= $upload_picture_fileinput['name'];

if(!is_valid_type($upload_picture_fileinput)) {

    $_SESSION['error'] = "You must upload a jpeg, gif, bmp, or png";
    header("Location: account.php");
    exit;


    }

//attempt to move the file from its temporary directory to its new home
if (move_uploaded_file($upload_picture_fileinput['tmp_name'], $TARGET_PATH)) {

    $sql = "insert into users (profile_image_filename) values ('" . $upload_picture_fileinput['name'] . "')";   


    $result = mysql_query($sql) or die ("Could not insert data into DB: " . mysql_error());

    header("Location: account.php");
    exit;
}
else 
{


    $_SESSION['error'] = "Could not upload file.  Check read/write permissions on the directory";
    header("Location: account.php") ;
    exit;

    }

这是提示用户上传图片的页面的相关代码:

<div class="pictures add_pictures">
            <div class="add_picture">
                <div class="upload_picture">
                    <form action="upload.php" method="POST" enctype="multipart/form-data" name="upload_picture_form" class="upload_picture_form">
                        <span class="add_picture_label">+ Add a Profile Picture</span>
                        <input type="file" name="upload_picture_fileinput" class="upload_picture_file_input"/>
                        <input type="hidden" name="MAX_FILE_SIZE" value="100000"/>
                        <br><br><br><br><br><br><br>

                        <input type="submit" id="submit" value="Upload" />
                    </form>
                </div>
            </div>
        </div>

        <?php

            $sql = "select * from users";
            $result = mysql_query($sql) or die ("Could not access DB: " . mysql_error());

            while ($row = mysql_fetch_assoc($result)) {

                echo "<p>";

                echo "<img src=\"profile_images/" . $row['profile_image_filename'] . "\" alt=\"\" /><br />";
                echo "</p>";


            }
        ?>

我正在连接数据库。图像上载的表单名为upload_picture_fileinput。

但是,我继续收到我创建的错误:“您必须上传jpeg,gif,bmp或png”;

图像未保存到我的目录,文件名也没有上传到我的数据库。

即使我正在使用其中一种类型。如果您发现问题,请告诉我。

2 个答案:

答案 0 :(得分:2)

> //This is an array that holds all the valid image MIME types
> $valid_types = array("upload_picture_fileinput/jpg",
> "upload_picture_fileinput/jpeg", "upload_picture_fileinput/bmp",
> "upload_picture_fileinput/gif", "upload_picture_fileinput/png");

有效的MIME类型?为什么他们以“upload_picture_file”开头?

答案 1 :(得分:0)

您必须修改功能is_valid_type,如下所示。

//Check to see if the type of file uploaded is a valid image type
function is_valid_type($file)
{
    //This is an array that holds all the valid image MIME types
    $valid_types = array("image/pjpeg", "image/jpeg", "image/jpg", "image/png", "image/x-png", "image/gif", "image/bmp");

    if (in_array($file['type'], $valid_types))
        return 1;
    return 0;   

}