簡體   English   中英

圖像的表格上傳,存儲在數據庫中並顯示(需要時)

[英]form upload of an image, storing in database and displaying (when needed)

所以,我有代碼(用於在數據庫中創建表,使用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">'; 
         }

我發現圖像正在存儲在數據庫中,如果我回顯圖像,它給出了它的名稱(例如-my_image.jpg),但是圖像沒有顯示,而是圖像的鏈接斷開了。可能是問題嗎?

用php顯示html中的圖像。 主要要做的是,您有一個存儲圖像的文件夾,並且保存的是該文件夾中的文件圖像以及該文件的路徑作為字符串並將其保存。

例如,假設我們有網站根cms,在cms目錄中有一個名為images的文件夾。 因此,我們要做的是,在使用enctype multipart / form-data的表單中,輸入類型文件(選擇文件...)按鈕,然后將其保存在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屬性中執行回顯。 現在,我們訪問服務器中的文件。

該圖像實際上並沒有存儲在數據庫中,只有該圖像的路徑才存在,請閱讀使用php上傳圖像。 然后,對代碼進行排序以將文件實際移動到服務器上的路徑后,您將必須獲取文件路徑和存儲文件的圖像名稱,並將該數據發送到數據庫,然后在回顯img時可以使用存儲在數據庫中的src

我強烈建議您查看https://github.com/verot/class.upload.php如果您處理上傳圖片,它將避免大量的麻煩

它具有非常好的文檔,並且非常易於使用,還沒有讓我失望。

在這種情況下,有許多需要改進的地方:

$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')";

它應該首先在列周圍指定將與backticks(`)一起使用的所有列,以避免命名問題。 同樣,指定的列數應與指定的值數匹配,因為您有一個空的列定義。 最終結果將如下所示:

$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標簽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM