【问题标题】:Upload image and store to database上传图片并存储到数据库
【发布时间】:2017-11-05 03:19:08
【问题描述】:

我又要重新开始编程了,但由于无法将图像上传到我的数据库,我目前陷入困境。 昨晚我正在阅读一些代码和答案,但我仍然被困在这里..它返回“成功创建新记录”,但我的数据库中没有存储任何内容。希望有人能帮助我解决这个问题:) 谢谢!

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

    Upload File:
    <input type="file" name="upload" /><br> 
    <input type="submit" name="submit" value="Submit"/>
</form>
</body>
</html>

<?php
    $servername ="localhost";
    $username = "root";
    $password = "";
    $dbname = "produ_db";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
if(isset($_POST['submit'])  ){


$filename = $conn->real_escape_string($_FILES['upload']['name']);
$filedata= $conn->real_escape_string(file_get_contents($_FILES['upload']['tmp_name']));


if ($_FILES['upload']['name'] == 0 ){

echo "<br><br> New record created successfully";

}

else {
    /*where acc_cap is the image caption && acc_img is a blob type to store images*/
    $query = "INSERT INTO accessories(`acc_cap`,`acc_img`) VALUES ('$filename','$filedata')" ;
    if ($conn->query($query) === TRUE) {
    echo "<br><br> New record created successfully";
    } else {
    echo "Error:<br>" . $conn->error;
    }

}
$conn->close(); 
}   

?>

【问题讨论】:

  • 在文件系统中存储文件比较常见。对于大于 100k 的文件,这样做真的没有意义。
  • 嗨,刚刚做了并且成功了,请参阅我对 manassehkatz 的评论 :) 感谢您提供的信息 :) 祝您有美好的一天

标签: php html mysql sql web


【解决方案1】:

1 - 你有:

echo "<br><br> New record created successfully";

两次 - 成功(插入后)和失败($_FILES['upload']['name'] == 0)。更改失败消息,以便您了解发生了什么。

2 - 移动:

$filename = $conn->real_escape_string($_FILES['upload']['name']);
$filedata= $conn->real_escape_string(file_get_contents($_FILES['upload']['tmp_name']));

跟踪$_FILES['upload']['name'] 的测试,因为如果没有文件名,file_get_contents 函数将失败。

3 - 检查我自己的代码,看起来我通常使用$_FILES['upload']['name'] == '' 而不是== 0。 PHP 通常以类似方式处理 0 和空字符串,但在这种情况下,我认为空字符串是正确的比较,因为当它具有实际文件名时,它是一个字符串字段。

4 - 通常认为将完整图像(或其他)文件存储在数据库中的错误形式 - 最好仅将文件名存储在数据库中的文件系统中(参见 http://php.net/manual/en/function.move-uploaded-file.php )。话虽如此,有时它是有道理的,我有时会将完整文件存储在数据库中。

【讨论】:

  • 感谢您的快速回复。我现在正在检查这个:)
  • 好的,我会复习你之后提到的#3 我成功上传了文件。所以我编辑了我的代码并添加了您提到的“错误”,感谢您注意到它:pastebin.com/FEBFshB3我现在收到“错误:无法存储图像”
  • 嗨,我现在看到了您编辑的帖子 :) 根据您的建议,我删除了 0 并添加了 '',对此我表示感谢 :) 我现在在第 33 行得到未定义的变量:$query =“插入附件(acc_cap,acc_img)值('$filename','$filedata')”;未定义的变量文件数据,文件名..但问题是,它打印了成功创建的新记录,并且在我的数据库上,blob 文件有 0kb 并且 acc_cap 有空白数据
  • @JimSteven - 检查您对文件数据和文件名的分配 - 可能在运行 INSERT 查询之前回显它们。如果它们没有被分配,那么 PHP 可能会将空字符串放入 $query 中,这将是错误的(并生成未定义变量错误,具体取决于您的 PHP 配置)但仍然是有效的 INSERT 语句,因此插入空白记录。
  • 不知道为什么但我仍然无法让它工作,blob文件仍然是0字节但即使它有错误也成功上传“未定义变量$filedata
猜你喜欢
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 2016-10-12
  • 2020-11-30
  • 2014-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多