图像上传到数据库出错


Image upload into an database gone wrong

我正在尝试上传图像

$userimage = sql_real_escape($_FILES['image']['name'])

该表单还具有用户名和密码字段,当我们进入插入值部分时,它只是在保存时无法保存。认为这弄乱了页面,因为它进入错误 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>

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

到目前为止,您提供的信息不足以说明任何明智的信息。

"它只是没有保存正确",这是什么意思?脚本是否实际上将记录插入到数据库中,尽管该记录不可用,或者(插入)查询除了执行之外根本没有执行任何操作?或者,也许脚本甚至从未超过isset($_POST)条件?

我过去经常这样做,但我看到数据库变得太大太快了。但是,基于假设,也许您没有将图像作为类型 blob 插入。

但正如上面的评论,将图像存储在您的数据库中不是一个好主意。最好的选择是拥有一个可写文件夹,并在 php 示例中使用move_uploaded_file( $_FILES['photo']['tmp_name'], $writable_folder . $filename )并将名称仅作为字符串存储在数据库中。

好的,你的想法是正确的。但您应该首先进行以下检查:

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

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

如果上述两个工作正常,请执行以下操作:

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个条件,无论何时重新上传,一旦图像具有相同的名称,它就会覆盖它。

所以另一件事是确保图像没有相同的名称。