Php 图像上传到数据库出错

Php 图像上传到数据库出错,php,Php,我正试图上传一张带有 $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(

我正试图上传一张带有

$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
 }
}
?>
if(isset($\u POST['btn-signup']))
{
$uname=mysql\u real\u escape\u字符串($\u POST['uname']);
$email=mysql\u real\u escape\u字符串($\u POST['email']);
$upass=md5(mysql\u real\u escape\u字符串($\u POST['pass']);
$image=mysql\u real\u escape\u字符串($\u FILES['image']['name']);
$name=mysql\u real\u escape\u字符串(文件获取内容($\u文件['image']['name']);
if(sub(substr($imageType,0,5)=“图像”)
{
mysql_查询(“插入用户(图像、名称)值(,“$image”,“$name”)”;
}
if(mysql_查询(“插入到用户(用户名、电子邮件、密码)中)值(“$uname”、“$email”、“$upass”、)”)
{
?>
警报(“已成功注册”);
警报('注册您时出错…');
当它保存为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($\u POST)条件?

我以前经常这样做,但我发现db太大太快了。但是,根据假设,可能您没有将图像作为类型
blob
插入


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

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

  • 使用move_uploaded_file上载图像,查看文件是否已正确上载

  • 确保insert语句正确运行

  • 如果以上两种方法都可以正常工作,则执行以下操作:

    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,不要担心,这是不应该发生的,因为您应该确保满足上述两个条件,每当重新上传时,一旦图像具有相同的名称,它就会覆盖它


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

    如果我们能看到你的代码和东西,那将是非常棒的。你会称之为福尔摩斯侦探吗?好的,瑞安。听起来很合法,几乎就像加密或锁定你的图像。但这些都是空谈,请告诉我你是如何做到的。好的,好的,我可以做到。你是说什么g如下所示:粗略代码:$image=addslashes($\u FILES['image']['tmp\u name']);$name=addslashes($\u FILES['image']['name']);$image=file\u get\u contents($image);$image=base64\u encode($image);以及所有不推荐的php5语句,比如它们都不被推荐,但却没有一本容易找到的参考书来显示替代语句或代码。弗雷德,你听说要用你的剃须刀缝合更可怕的毛衣吗?约洛尔,你的演讲对瑞安没有帮助。只要给我我需要的,我就上路了。:)听起来很酷,考虑到你说的话,我必须在主文件夹中手动创建一个文件夹,比如说“images”,然后将它与你的代码链接起来(如果我的回答正确的话,很好)。虽然图像检索将是另一回事。是的,创建一个文件夹,并授予其读写权限。图像检索非常简单,只需查询图像名称,然后使用“path\u to\u image/$image\u name”显示图像。但最好将该文件夹放在不会向您的主页显示文件夹路径的位置le如果您的文件位于
    /wamp/www/my_website/main
    中,您将在
    /wamp/www/my_website/images
    中创建该文件夹,好的,完成了。它位于各自的本地主机目录中。将学习者代码更改为$image($u files['image']['tmp_name',$images.$filename)php的插入应该如下所示:)(不起作用,错误500页)如果(mysql_查询(“插入到用户(用户名、电子邮件、密码、图像)中)值(“$uname”、“$email”、“$upass”、“$image”))我将以帖子的形式回答,因为这里太长了。请检查。我喜欢做的是使用用户的id作为图像的名称,这可以让你在任何给定的时间轻松抓取用户的照片,因为你很可能会在几乎所有地方使用用户的id。编辑我的问题,评论太大,不适合这里。(如果您有多张图片该怎么办。)如果有多个文件,您只需使用
    foreach
    循环即可。如果表单接受多个,则数据将是一个数组,除非您专门为所有字段命名一个唯一的名称,否则您需要分别为每个字段执行该代码