表格上传图像,存储在数据库中并显示(需要时)

时间:2017-06-20 17:26:00

标签: php mysql

所以,我有代码(用于在数据库中创建表,使用BLOB作为数据类型):

$sql = "CREATE TABLE voter_info1 (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
firstname VARCHAR(30) NOT NULL,
email VARCHAR(30) NOT NULL,
img BLOB NOT NULL,
vid VARCHAR(30) NOT NULL UNIQUE,
password1 VARCHAR(65) NOT NULL,
reg_date TIMESTAMP
)";

将值存储在数据库中,如:

$sql = "INSERT INTO voter_info1 (firstname,img,,vid,password1)
VALUES ('$firstname','$img','$vid','$password1')";

代码是否正确? (据我所知,这是因为图像的存储发生在数据库中,但需要进行审查!!)

现在,我想在程序中的某处显示图像,以下是代码: -

 $sql = "SELECT * FROM voter_info1 WHERE vid='".$voter_id."' ";
    $result_getname = $conn->query($sql);

      while($row = $result_getname->fetch_assoc()) {
       echo '<img src="$mime,'.base64_encode( $row["img"] ).'" 
            width="80px" height="80px">'; 
         }

我想到的是图像存储在数据库中,如果我回显图像,它会给出它的名字(ex-my_image.jpg),但图像没有显示,而是我的图像链接断了.. 可能是什么问题?

3 个答案:

答案 0 :(得分:0)

使用php在html中显示图像。主要做的是你有一个存储图像的文件夹,你保存的是该文件夹中的文件图像以及该文件作为字符串的路径并保存。

例如,假设我们有网站根cms,在cms目录下我们有一个名为images的文件夹。所以,我们所做的是,在我们使用enctype multipart / form-data的形式中,输入类型为file(选择文件...)的按钮并将其保存在php中,如下所示:

//Save image in a variable for displaying the form.
$image = $post_image = $_FILES['post_image']['name'];

//Save image in a variable to store it in server.
$post_image_temp = $_FILES['post_image']['tmp_name'];

//Save image to the /image file.
move_uploaded_file($post_image_temp, "{$post_image}");

最后我们可以通过使用db中的映像来访问它(文件路径可能会改变):

$img = $POST['image']; // /images/image.jpg

现在,在$ img的src属性中执行echo。现在我们访问服务器中的文件。

答案 1 :(得分:0)

图像实际上并没有存储在数据库中,只有图像的路径存在,请阅读使用php上传图像。然后,一旦您将代码排序为实际将文件移动到服务器上的路径,您将必须获取文件路径和存储它的图像名称,并将该数据发送到数据库,然后当您回显img时,您可以使用存储在数据库中的src

我强烈推荐调查 jsdom 如果您处理上传图片

,它将节省大量的麻烦

它有非常好的文档,非常容易使用,并没有让我失望。

答案 2 :(得分:0)

在这种情况下,有许多事情需要改进:

$sql = "CREATE TABLE voter_info1 (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
firstname VARCHAR(30) NOT NULL,
email VARCHAR(30) NOT NULL, <-- email size should be increased to 256 @ see: 
[https://www.rfc-editor.org/errata_search.php?eid=1690]
img BLOB NOT NULL, <-- images should normally not be stored directly in the database, instead a filename or identifier to find it on the disk should be used and stored as a varchar
vid VARCHAR(30) NOT NULL UNIQUE,
password1 VARCHAR(65) NOT NULL, <-- this looks like it might contain the password of the user in plaintext form, that is not recommended, instead an encrypted hash should be stored @ see: [http://php.net/manual/en/function.password-hash.php][2]
reg_date TIMESTAMP
)";

接下来是INSERT语句:

$sql = "INSERT INTO voter_info1 (firstname,img,,vid,password1)
VALUES ('$firstname','$img','$vid','$password1')";

它应首先指定将在列周围使用反引号(`)的所有列,以避免命名问题。 此外,指定的列数应与指定的值的数量相匹配,您有一个空列定义。 最终结果如下:

$sql = "INSERT INTO `voter_info1` (`firstname`,`img`,`vid`,`password1`)
VALUES ('$firstname','$img','$vid','$password1')";

最后获取数据:

 $sql = "SELECT * FROM voter_info1 WHERE vid='".$voter_id."' ";
$result_getname = $conn->query($sql);

  while($row = $result_getname->fetch_assoc()) {
   echo '<img src="$mime,'.base64_encode( $row["img"] ).'" 
        width="80px" height="80px">'; 
     }

这里有几件事需要考虑。 如果您在数据库中将图像作为二进制数据并且想要使其成为内联img src,则应在其前面添加:src =“data:image / png; base64,[此处为二进制数据,base64编码就像您在做的那样] “ 您正在使用$ mime,但代码没有描述$ mime是什么或者是否设置正确。

如果在将二进制数据存储到数据库时使用base64_decode,代码也不会显示,也应该这样做。

因此,简而言之,代码中最可能的罪魁祸首是没有正确指定img src标记。