PHP上传MySQL图像上传不起作用

时间:2014-03-08 12:16:16

标签: php mysql image

我正在尝试创建一个可以将文件上传到我的sql数据库的网站,但它似乎无法正常工作。

这是我的代码;

<html>
    <head>
        <title>Upload an image</title>
    </head>
    <body>
                <form action="upload.php" method="POST" enctype="multipart/form-data">
            File:
            <input type="file" name="Image">
            <input type="submit" value="Upload">
        </form>
        <?php
                    //Connecting to the database
                    mysql_connect("localhost","root","") or die(mysql_error());
                    mysql_select_db("picturedatabase") or die(mysql_error());

                    $file = $_FILES['Image']['tmp_name'];

                    if(!isset($file))
                    {
                        echo "Select an image";
                    }
                    else
                    {
                        $image = addslashes(file_get_contents($_FILES['Image']['tmp_name']));
                        $image_name = addslashes($FILES['Image']['name']);
                        $image_size = getimagesize($FILES['Image']['tmp_name']);
                    }

                    if($image_size==FALSE)
                    {
                        echo "That's not an image.";
                    }
                    else
                    {
                       if(!$insert = mysql_query("INSERT INTO images VALUES('','$image_name','$image')"))
                       {
                           echo "There was a problem uploading the image";
                       }
                       else
                       {
                          $lastid = mysql_insert_id();
                          echo "Image uploaded!<p />Your image:<p /> <img src=show.php?id=$lastid>";
                       } 
                    }
                ?>
    </body>
</html>

当我运行文件时,表单显示(按钮,我也可以选择文件),但它也说

"Notice: Undefined index: Image in C:\ProgramFiles\Xampp\htdocs\Database\upload.php on line 16
Notice: Undefined variable: image_size in C:\ProgramFiles\Xampp\htdocs\Database\upload.php on line 29"

有人能告诉我我做错了什么并帮我解决了这个问题吗?

2 个答案:

答案 0 :(得分:2)

您应该在上传过程中将文件保存在某个文件夹中并将文件名保存在数据库中,以便稍后您可以从数据库中调用文件名并将其链接为要下载的超链接,我使用以下代码将图像上传到名为files的文件夹中,并将文件名保存在数据库中。最后,我在变量$newname

中有文件名
    if ($_FILES['file']['name']) {

        $allowedExts = array("gif", "jpeg", "jpg", "png");
        $temp = explode(".", $_FILES["file"]["name"]);
        $extension = end($temp);
        if ((($_FILES["file"]["type"] == "image/gif")
                || ($_FILES["file"]["type"] == "image/jpeg")
                || ($_FILES["file"]["type"] == "image/jpg")
                || ($_FILES["file"]["type"] == "image/pjpeg")
                || ($_FILES["file"]["type"] == "image/x-png")
                || ($_FILES["file"]["type"] == "image/png"))
            && ($_FILES["file"]["size"] < 500000)
            && in_array($extension, $allowedExts)
        ) {
            if ($_FILES["file"]["error"] > 0) {
                echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
            } else {
                $ext = end(explode(".", $_FILES["file"]["name"]));
                $filename = current(explode(".", $_FILES["file"]["name"]));
                $newname = $filename . '_' . time() . '.' . $ext;
                move_uploaded_file($_FILES["file"]["tmp_name"],
                    "files/" . $newname);
            }
        } else {
            echo "<div class='alert alert-success'>Image type or size is not valid.</div>";
        }
    }

答案 1 :(得分:1)

我希望这会对你有所帮助:

<html>
        <head>
                <title>Upload an image</title>
        </head>
        <body>
    <?php
    function output_errors($error) {
        echo '<ul><li><font color="red">'.$error.'</font>/li></ul>';
    }

    if($_POST) {
        //Connecting to the database
        $connect = mysqli_connect("localhost", "root" ,"", "picturedatabase");
        $name = $_FILES['Image']['name'];

        if(!empty($name)) {
            $tmp = $_FILES['Image']['tmp_name'];
            $type = $_FILES['Image']['type'];

            $allowed_type = array('image/jpg', 'image/jpeg', 'image/gif', 'image/png');

            if(!in_array($type, $allowed_type)) {
                $error[] = $type. ' is not allowed file type';
            }
        } else {
            $error[] = 'There are empty fields';
        }

        if(!empty($error)) {
            echo output_errors($error);
        } else if(empty($error)){
            $path = 'images/'.$name;

            $query = mysqli_query($connect, "INSERT INTO `images` (`image`) VALUES ('$path')");

            if(!$query) {
                echo 'Insert into db went wrong';
            } else {
                move_uploaded_file($tmp, $path);
                echo '<font color="green">Upload succesful</font>';
            }
        }
    }
    ?>
            <form action="upload.php" method="POST" enctype="multipart/form-data">
                File:
                <input type="file" name="Image">
                <input type="submit" value="Upload">
            </form>
        </body>
    </html>