правильный способ загрузки изображения в базу данных

Я знаю, что некоторые из вас скажут, что это не правильный путь, но я на ограниченный срок, чтобы закончить приложение, и на данный момент я не могу вернуться и изменить код для хранения изображений в каталоге.

теперь, когда это очищено

вопрос, который у меня был, – это вставить изображение в базу данных, набрав это.

(не обращайте внимание на вызов безопасности класса, все, что он делает, это несколько проверок, если данные действительны)

$filename = $security->secure($_FILES['imgschool']['name']); $tmpname = $security->secure($_FILES['imgschool']['tmp_name']); $imgsize = $security->secure($_FILES['imgschool']['size']); $imgtype = $security->secure($_FILES['imgschool']['type']); $school = $security->secure($_POST['school']); //begin upload if($imgsize > 0) { $handle = fopen($tmpname, "r"); $content = fread($handle, filesize($tmpname)); $content = addslashes($content); //code to add all this to database } 

переменная $ content – это изображение, и все его получение – это добавление. я помню, как кто-то упомянул, чтобы сделать это с чем-то, называемым base64, но я едва могу вспомнить, как он был написан.

это то, как я вызываю изображение из базы данных

кроме всех запросов и еще чего-то, что является главной частью, вызывающей изображение

 header("Content-length: ".$imgsize); header("Content-type: ".$imgtype); header("Content-Disposition: attachment; filename=".$imgname); print $row['img']; 

проблема, с которой я сталкиваюсь, заключается в том, что вместо показа изображения. url только показывает, поэтому в этом случае я вижу только это

HTTP: //localhost/admin/school-catalog.php страница = галерея & ID = 4

при открытии страницы для просмотра изображения с правильными параметрами, заданными в URL-адресе.


для тех, кто хотел увидеть запрос, который выполняется для сохранения изображения, и т. д., я скопировал весь раздел

 //save image to db if(isset($_POST['btnupload'])) { $filename = $security->secure($_FILES['imgschool']['name']); $tmpname = $security->secure($_FILES['imgschool']['tmp_name']); $imgsize = $security->secure($_FILES['imgschool']['size']); $imgtype = $security->secure($_FILES['imgschool']['type']); $school = $security->secure($_POST['school']); //begin upload if($imgsize > 0) { $handle = fopen($tmpname, "r"); $content = fread($handle, filesize($tmpname)); $content = base64_encode($content); } $save = mysql_query("insert into tbl_schoolgallery(id,hash,img,imgtype,imgsize) values(null,'$school','$content','$imgtype','$imgsize')") or die(mysql_error()); header("Location: school-catalog.php?page=school_gallery"); } //call image from db $query = mysql_query("select * from $tbl where id = '$id'") or die(mysql_error()); while($row = mysql_fetch_assoc($query)) { $imgtypeget = explode("/", $row['imgtype']); $imgname = "img.".$imgtypeget[1]; $imgtype = $row['imgtype']; $imgsize = $row['imgsize']; header("Content-length: ".$imgsize); header("Content-type: ".$imgtype); print base64_decode($row['img']); print $row['img']; } 

Solutions Collecting From Web of "правильный способ загрузки изображения в базу данных"

Использование addslashes крайне неверно. В зависимости от того, является ли ваш столбец полем ТЕКСТ или BLOB-полем, вы должны использовать Base64 или mysql_real_escape_string .

Использование Base64 не так сложно; вы также можете использовать этот путь. Просто замените base64_encode и эхо-изображение с base64_decode .

Есть немного более простой способ написать все это, если на то пошло:

 // begin upload if ($imgsize > 0) { $content = file_get_content($tmpname); $content = base64_encode($content); } 

И тогда вывести на экран действительно нужно только сделать

 header("Content-type: ".$imgtype); echo base64_decode($img); 

Однако, если столбец BLOB, вы можете напрямую использовать mysql_real_escape_string :

 // begin upload if ($imgsize > 0) { $content = file_get_content($tmpname); $content = mysql_real_escape_string($content); } 

А потом:

 header("Content-type: ".$imgtype); echo $img; 

Хотя судя по вашим текущим симптомам, я предполагаю, что у вас также есть ошибка, связанная с тем, как ваш образ хранится и вызывается из базы данных, и мне нужно будет увидеть ту часть кода, в которой вы делаете запросы для вставки и прочитайте из базы данных, прежде чем я могу помочь вам исправить эту часть.


Ваш текущий код кажется в основном прекрасным. Несколько вопросов:

 print base64_decode($row['img']); print $row['img']; 

Вероятно, вы хотели избавиться от второго ряда. Кроме того, вы должны использовать echo вместо print ; каждый использует его, иногда может быть немного быстрее, и print не имеет никакой пользы, кроме как вернуть значение:

 echo base64_decode($row['img']); 

$security->secure() видимому, является своего рода функцией дезинфекции. Просто используйте mysql_real_escape_string() – это тот, который вы должны использовать. За исключением $imgsize ; вы можете использовать intval() на этом, поскольку вы знаете, что это должно быть целое число.

Также здесь:

 $query = mysql_query("select * from $tbl where id = '$id'") or die(mysql_error()); 

Вы называете таблицу tbl_schoolgallery несколькими строками выше этого. Я предполагаю $tbl == 'tbl_schoolgallery' , но для согласованности вы должны либо использовать $tbl в обоих местах, либо в tbl_schoolgallery в обоих местах.

Кроме того, замените это, в while с if – ваш код вызовет проблемы, если он когда-нибудь будет повторяться несколько раз.