如何上传图像然后将其存储在数据库中?

时间:2012-06-21 04:44:10

标签: php file-upload

我正在尝试上传图片并将其存储在数据库中。我已经提到了代码,但它对我不起作用。我无法找到这个bug。请查看是否有人可以找到该错误。 代码是:

<?php

$name=$_REQUEST['name'];
$email=$_REQUEST['email'];

if($_REQUEST['submit'])
{
    if(($_FILES['file']['type']=="image/jpeg" or $_FILES['file']['type']=="image/pjpeg" or $_FILES['file']['type']=="image/gif") and ($_FILES['file']['size']<300000))
    {
        if($_FILES['file']['error']>0)
        {
            $err=" ERROR :: ".$_FILES['file']['error'];
        }
        else
        {
            echo "Upload :".$_FILES['file']['name']."<br/>";
            echo "Type: ".$_FILES['file']['type']."<br/>";
            echo "Size: ".($_FILES['file']['size']/1024)."Kb<br/>";
            echo "Stored in: ".$_FILES['file']['tmp_name']."<br/>";

            move_uploaded_file($_FILES['file']['tmp_name'],"upload/".$_FILES['file']['name']);
            echo $_FILES['file']['name'];
            echo $_FILES['file']['tmp_name']."qwerty";

            $n=3000;
            $fo=fopen("upload/".$_FILES['file']['name'],"r");
            $fr=fread($fo,$n);

            mysql_query("update user set pic='$fr' where id='$id'");

        }
    }
    else
    {
        $err=" ERROR :: Invalid Image";
    }

    mysql_query("update user set name='$name' where id='$id'");
    mysql_query("update user set email='$email' where id='$id'");


}

$sql="select * from user where id='$id'";
$con=mysql_query($sql);
list($idR,$nameR,$emailR,$pwdR,$dateR,$picR)=mysql_fetch_array($con);

?>



<body>
<form action="" method="post" enctype="multipart/form-data">

    <table>
        <tr>
            <td colspan="2"><?php echo $err; ?></td>
        </tr>
        <tr>
            <td>Name:</td>
            <td><input type="text" name="name" value="<?php echo $nameR ?>" /></td>
        </tr>
        <tr>
            <td>Email:</td>
            <td><input type="text" name="email" value="<?php echo $emailR ?>" /></td>
        </tr>
        <tr>
            <td><label for="file">Upload or Change Pic:</label></td>
            <td><input type="file" name="file" id="file" /></td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" name="submit" value="Save"/></td>
        </tr>

    </table>    
</form>
</body>

我的代码甚至无法上传文件。当我尝试echo以下时,我发现它们是空的:

   echo "Name:".$_FILES['file']['name']."<br/>";
   echo "Type: ".$_FILES['file']['type']."<br/>";
   echo "Size: ".($_FILES['file']['size']/1024)."Kb<br/>";
   echo "Stored in: ".$_FILES['file']['tmp_name'];

以上所有字段均为空。

5 个答案:

答案 0 :(得分:1)

我不知道这项工作如何,但它没有奏效。我想这个问题出现在我的HTML代码中,因为$_FILES值为none / empty。它不是从表单标签中检索值,请检查我的答案是否不正确以解决问题,或者纠正如何从计算机中的科学或其他主题解决这个难题,并将其形成错误或成功。

答案 1 :(得分:0)

试试这个!

<?php

if(isset($_POST['submit']) && $_FILES['file']['size'] > 0)
{
    // Data
    $file_name = $_FILES['file']['name'];
    $tmp_name  = $_FILES['file']['tmp_name'];
    $file_size = $_FILES['file']['size'];
    $file_type = $_FILES['file']['type'];

    // Check
    $type   = array(
        'image/jpeg',
        'image/gif',
        'image/png',
    );
    $size   = 300000;

    if(in_array($file_type, $type) AND $file_size > $size)
    {
        echo 'Ooops! File type must be JPG, GIF or PNG. Or file size too big';
        exit();
    }

    // Is error?
    if ($_FILES["file"]["error"] > 0)
    {
        echo 'Upload Error';
        exit();
    }
    else
    {
        echo 'File Name : '.$file_name.'<br />';
        echo 'File Size : '.($file_size / 1024).' Kb<br />';
        echo 'File Type : '.$file_type;
    }
} 
?>

<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file" />
<input type="submit" name="submit" value="Save"/>  
</form>

答案 2 :(得分:0)

如果$ _POST和$ _FILES都为空,那么您已经超过了最大帖子大小ini(&#39; post_max_size&#39;)

php.ini中有几个设置,包括单个文件的最大值(&#39; upload_max_filesize&#39;),以及所有上传的最大值(&#39; post_max_size&#39;)。确保正确设置了这些ini设置

如果您编辑了它,请注意语法,处理M,K或G(不是KB,MB或GB)时挑剔,并且不要超过服务器的位大小,即在32位服务器上不要超过40亿字节。


$ _FILES为空的其他原因,但不是$ _POST。您没有足够的可用空间来上传文件,或者您没有权限写入临时目录。检查/ tmp有足够的空间,你可以用apache / php用户写入它。

答案 3 :(得分:-1)

当我在独立的.php文件上移动代码时,它工作正常。当我需要上传时,我给了该页面的链接,其中编写了独立的上传代码。我不知道背后的原因,但这就是我解决它的原因。

答案 4 :(得分:-2)

嗯.... 尝试更改此行

if($_REQUEST['submit'])

if(isset($_REQUEST['submit']))

我想,这段代码

if(($_FILES['file']['type']=="image/jpeg" or $_FILES['file']['type']=="image/pjpeg" or $_FILES['file']['type']=="image/gif") and ($_FILES['file']['size']<300000))

可以简化为

if(ereg("jpeg|pjpeg|jpg|gif|png", $_FILES['file']['type']) AND $_FILES['file']['size']<300000)
祝你好运......