Использование addslashes
крайне некорректно. В зависимости от того, является ли ваш столбец полем TEXT или полем BLOB, вы должны использовать Base64 или mysql_real_escape_string
.
Использование Base64 не так сложно; Вы также можете использовать этот способ. Просто замените addslashes
на 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
- ваш код в любом случае вызовет проблемы, если он когда-либо будет повторяться более одного раза.