PHP上传到数据库

时间:2013-06-25 16:56:23

标签: php mysql forms upload

我正在尝试将内容上传到数据库。我经历了一些教程,但没有一个能够奏效。我想将图像和文本文档(包括PowerPoint演示文稿)等文件上传到数据库。

这是我的表单

<form action="upload.php" method="post" enctype="multipart/form-data" name="uploadform">
    <input type="hidden" name="MAX_FILE_SIZE" value="350000">
    <input name="picture" type="file" id="picture" size="50">
    <input name="upload" type="submit" id="upload" value="Upload Picture!">
</form>

这是upload.php

<?php
// if something was posted, start the process...
if(isset($_POST['upload']))
{
    // define the posted file into variables
    $name = $_FILES['picture']['name'];
    $tmp_name = $_FILES['picture']['tmp_name'];
    $type = $_FILES['picture']['type'];
    $size = $_FILES['picture']['size'];

    // get the width & height of the file (we don't need the other stuff)
    list($width, $height, $typeb, $attr) = getimagesize($tmp_name);

    // if width is over 600 px or height is over 500 px, kill it    
    if($width>600 || $height>500)
    {
        echo $name . "'s dimensions exceed the 600x500 pixel limit.";
        echo '<a href="form.html">Click here</a> to try again.';
        die();
    }

    // if the mime type is anything other than what we specify below, kill it    
    if(!($type=='image/jpeg' || $type=='image/png' || $type=='image/gif')) 
    {
        echo $type .  " is not an acceptable format.";
        echo '<a href="form.html">Click here</a> to try again.' ;
        die();
    }

    // if the file size is larger than 350 KB, kill it
    if($size>'350000') {
        echo $name . " is over 350KB. Please make it smaller.";
        echo '<a href="form.html">Click here</a> to try again.' ;
        die();
    } 

    // if your server has magic quotes turned off, add slashes manually
    if(!get_magic_quotes_gpc()){
        $name = addslashes($name);
    }

    // open up the file and extract the data/content from it
    $extract = fopen($tmp_name, 'r');
    $content = fread($extract, $size);
    $content = addslashes($content);
    fclose($extract);  

    // connect to the database
    include "inc/db.inc.php";

    // the query that will add this to the database
    $addfile = "INSERT INTO files (name, size, type, content ) ".
        "VALUES ('$name', '$size', '$type', '$content')";

    mysql_query($addfile) or die(mysql_error());

    // get the last inserted ID if we're going to display this image next
    $inserted_fid = mysql_insert_id();

    mysql_close(); 

    echo "Successfully uploaded your picture!";

    // we still have to close the original IF statement. If there was nothing posted, kill the page.
}
else{
    die("No uploaded file present");
}
?>  

我知道-> if(!($type=='image/jpeg' || $type=='image/png' || $type=='image/gif'))类型有限制。当我上传小照片时,我得到的错误是“没有选择数据库”。

数据库配置正确,因为我能够连接到其他东西。

2 个答案:

答案 0 :(得分:4)

您的代码从根本上被打破了:

1)您只是假设已执行上传,并且从不检查是否失败。至少你应该

if ($_FILES['picture']['error'] !== UPLOAD_ERR_OK) {
   die("Upload failed with error code " . $_FILES['picture']['error']);
}

错误代码在此处定义:http://php.net/manual/en/features.file-upload.errors.php

2)addslashes()提供了与SQL注入攻击一样多的防御,就像使用一个方形的湿厕纸来干涸湖泊一样。既然您正在使用mysql库,那么必须使用mysql_real_escape_string()来执行转义数据的正确工作

3)您正在使用的mysql库已过时且已弃用。停止使用它。切换到mysqli或PDO。

4)您的实际错误消息表明您从未进行mysql_select_db()调用来设置默认数据库。您只需将查询修改为INSERT INTO name_of_db.name_of_table ...即可解决此问题。

答案 1 :(得分:1)

确保您在mysql_select_db()文件中正确拨打了inc/db.inc.php

在下面的代码中,您只是在不执行任何检查的情况下回显文本。无论成功与否,都将显示成功消息。

echo "Successfully uploaded your picture!";