图像上传到数据库出错了

时间:2016-03-08 22:47:58

标签: php

我正在尝试使用

上传图片
$userimage = sql_real_escape($_FILES['image']['name'])

表单还有用户名和密码字段,当我们进入插入VALUES部分时,它只是在保存时没有保存。 认为这会弄乱页面,因为它会出现错误500

if(isset($_POST['btn-signup']))
{
 $uname = mysql_real_escape_string($_POST['uname']);
 $email = mysql_real_escape_string($_POST['email']);
 $upass = md5(mysql_real_escape_string($_POST['pass']));
$image= mysql_real_escape_string($_FILES['image']['name']);
 $name= mysql_real_escape_string(file_get_contents($_FILES['image']['name']));

 if(sub(substr($imageType,0,5) == "image")
 {
 mysql_query("INSERT INTO users(image,name) VALUES(,'$image','$name')");
 }

 if(mysql_query("INSERT INTO users(username,email,password) VALUES('$uname','$email','$upass',)"))
 {
  ?>
        <script>alert('successfully registered ');</script>
        <?php
 }
 else
 {
  ?>
        <script>alert('error while registering you...');</script>
        <?php
 }
}
?>

当它保存为Blob时,文件大小很小,如4或7kiB,对于图像甚至2mb大。

<form method="post" entype="multipart/form-data">
<table align="center" width="30%" border="0">
<tr>
<td><input type="text" name="uname" placeholder="User Name" required /></td>
</tr>
<tr>
<td><input type="email" name="email" placeholder="Your Email" required /></td>
</tr>
<tr>
<td><input type="password" name="pass" placeholder="Your Password" required /></td>
</tr>
<td><input type="file" name="image" placeholder="upload here" required /></td>
</tr>
<tr>
<td><button type="submit" name="btn-signup">Sign Me Up</button></td>
</tr>
<tr>
<td><a href="index.php">Sign In Here</a></td>
</tr>
</table>
</form>

4 个答案:

答案 0 :(得分:1)

将图像保存在数据库中并不是一个好主意。 更好的是将图像上传到某个目录并将相同的文件名插入数据库。

答案 1 :(得分:0)

您提供的信息不足以说出任何明智的信息。

&#34;它只是不能保存正确&#34;,这是什么意思?脚本是否实际上将记录插入到数据库中,尽管是不可用的,或者(插入)查询没有执行任何操作而是执行?或者脚本甚至没有超过isset($ _ POST)条件?

答案 2 :(得分:0)

我过去常常这样做,但我发现db太快了。但是,根据假设,您可能没有将图像插入SESSION idSession MaxGuest 类型。

但是正如上面的评论,将图像存储在db中并不是一个好主意。最好的选择是拥有一个可写文件夹并在php示例中使用blob并在数据库中仅存储名称作为字符串。

答案 3 :(得分:0)

好的,你有正确的想法..但你应该先做以下检查:

  1. 使用move_uploaded_file上传图片以查看文件是否已正确上传

  2. 确保您的插入语句正常运行

  3. IF 以上两项工作正常,请执行以下操作:

    if( isset( $_FILES['image']['tmp_name'] ) ) {
            // $filename == whatever you want to name you image. Example : photo1.jpg
            // be sure to save you image name with the extension
            if ( ! @move_uploaded_file( $_FILES['image']['tmp_name'], '/wamp/www/my_website/images/' . $filename ))
            {
                return FALSE OR return 'error message';
            }
    
            // if passed then here is where you put you sql statement
            if( mysql_query( "INSERT INTO users(username,email,password,image) VALUES('$uname','$email','$upass','$filename')"))
                return true;
    
            return FALSE OR return 'error message';
        }
        else 
            return 'Please select a file'
    

    如果文件已上传并且未存储SQL,请不要担心,这不应该发生,因为您应该确保满足上述2条件,每当重新上传时,一旦图像具有相同的名称,它将会覆盖它。

    另一件事是确保图像不要具有相同的名称。