У меня есть четыре файла:
main.php моя HTML-форма отправки, которая представляет изображение и текст с изображением
storeinfo.php отправляет все мои данные из формы html в базу данных, в которой он работает, мое изображение и текст из формы успешно отправляются
image.php извлекает изображение из базы данных и имеет функцию заголовка для преобразования aimagetype в любой формат изображения png, jpeg ect.
show.php извлекает весь текст, размещенный с изображениями, и отображает все изображения с текстом, однако изображения не отображаются, вместо этого я получаю пустое поле, когда изображение не отображается.
Я не могу найти свою ошибку, я предполагаю, что это как-то связано с функцией заголовка в image.php или когда я пытаюсь отобразить изображение с тегом html img в show.php. Загрузка изображения (которое хранится в виде блоба) в базу данных прошло успешно. Почему изображения не отображаются?
Код в заказе на каждой странице:
main.php HTML-форма
<form enctype="multipart/form-data" action="storeinfo.php" method="POST">
<table border=0 align=center bgcolor=black width=100%>
<tr><td colspan=2><h2> </h2></td></tr>
</table><table border=0 align=center bgcolor=grey>
<tr><td colspan=2><h2>Animal Information</h2></td></tr>
<tr>
<td>Name</td><td><input type=text name="aname"></td>
</tr>
<tr>
<td>Description</td><td><input type=text name="adetails"></td>
</tr>
<tr>
<td>Photo</td><td><input type=file name="aphoto"></td>
</tr>
<tr>
<td></td><td><input type=submit name="submit" value="Store Information"></td>
</tr>
</table>
</form>
storeinfo.php
<?php
$conn = mysql_connect("localhost","root","");
if(!$conn)
{
echo mysql_error();
}
$db = mysql_select_db("imagestore",$conn);
if(!$db)
{
echo mysql_error();
}
$aname = $_POST['aname'];
$adetails = $_POST['adetails'];
$aphoto = addslashes (file_get_contents($_FILES['aphoto']['tmp_name']));
$image = getimagesize($_FILES['aphoto']['tmp_name']);//to know about image type etc
$imgtype = $image['mime'];
$q ="INSERT INTO animaldata VALUES('','$aname','$adetails','$aphoto','$imgtype')";
$r = mysql_query($q,$conn);
if($r)
{
echo "Information stored successfully";
}
else
{
echo mysql_error();
}
?>
image.php
<?php
$conn = mysql_connect("localhost","root","");
if(!$conn)
{
echo mysql_error();
}
$db = mysql_select_db("imagestore",$conn);
if(!$db)
{
echo mysql_error();
}
$id = $_GET['id'];
$q = "SELECT aphoto,aphototype FROM animaldata where id='$id'";
$r = mysql_query("$q",$conn);
if($r)
{
$row = mysql_fetch_array($r);
$type = "Content-type: ".$row['aphototype'];
header($type);
echo $row['aphoto'];
}
else
{
echo mysql_error();
}
?>
show.php
<?php
//show information$conn = mysql_connect("localhost","root","");
if(!$conn)
{
echo mysql_error();
}
$db = mysql_select_db("imagestore",$conn);
if(!$db)
{
echo mysql_error();
}
$q = "SELECT * FROM animaldata";
$r = mysql_query("$q",$conn);
if($r)
{
while($row=mysql_fetch_array($r))
{
//header("Content-type: text/html");
echo "</br>";
echo $row['aname'];
echo "</br>";
echo $row['adetails'];
echo "</br>";
//$type = "Content-type: ".$row['aphototype'];
//header($type);
//$lastid = mysql_insert_id();
// $lastid = $lastid;
//echo "Your image:<br /><img src=image.php?id=$lastid />";
echo "<img src=image.php?id=".$row['id']." width=300 height=100/>";}
}
else
{
echo mysql_error();
}?>
Прежде всего, я нашел урок о том, как сделать то, что вы пытаетесь сделать здесь:
http://www.mysqltutorial.org/php-mysql-blob/
Во-вторых, вы должны использовать mysql_escape_string (file_get_contents ($ _ FILES [‘aphoto’] [‘tmp_name’])) вместо добавочных черт.
Основываясь на этих двух правилах, вы сможете выяснить, что не так с вашим кодом, вы также можете попробовать с небольшими картинками.
Есть много проблем с вашим кодом, но наиболее заметным является то, что вы используете устаревшие функции mysql и ваш код уязвим для Атака с использованием SQL-инъекций.
Я переписал storeinfo.php
а также image.php
работать с mysqli
расширение и использование привязки параметров для смягчения внедрения SQL. Я оставлю переписывать show.php
в качестве упражнения для вас.
Обратите внимание, что я сделал некоторые предположения относительно структуры вашей таблицы, поэтому вам может потребоваться внести некоторые изменения в код SQL.
storeinfo.php
$aname = $_POST['aname'];
$adetails = $_POST['adetails'];
$aphoto = file_get_contents($_FILES['aphoto']['tmp_name']);
$image = getimagesize($_FILES['aphoto']['tmp_name']);//to know about image type etc
$imgtype = $image['mime'];
$conn = new mysqli("localhost","root","", "imagestore");
if ($conn->connect_errno) {
echo "Failed to connect to MySQL: (" . $conn->connect_errno . ") " . $conn->connect_error;
}
if (!($stmt = $conn->prepare("INSERT INTO animaldata (aname, adetails, aphoto, aphototype) VALUES(?, ?, ?, ?)"))) {
echo "Prepare failed: (" . $conn->errno . ") " . $conn->error;
}
if (!$stmt->bind_param("ssbs", $aname, $adetails, $aphoto, $imgtype)) {
echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
}
$stmt->send_long_data(2, $aphoto);
if (!$stmt->execute()) {
echo "Insert failed: (" . $conn->errno . ") " . $conn->error;
} else {
echo "Information stored successfully";
}
image.php
$conn = new mysqli("localhost","root","", "imagestore");
if ($conn->connect_errno) {
echo "Failed to connect to MySQL: (" . $conn->connect_errno . ") " . $conn->connect_error;
}
if (!($stmt = $conn->prepare("SELECT aphoto, aphototype FROM animaldata where id=?"))) {
echo "Prepare failed: (" . $conn->errno . ") " . $conn->error;
}
if (!$stmt->bind_param("i", $_GET['id'])) {
echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
}
if (!$stmt->execute()) {
echo "Select failed: (" . $conn->errno . ") " . $conn->error;
} else {
$stmt->bind_result($aphoto, $aphototype);
$stmt->fetch();
header("Content-type: ".$aphototype);
echo $aphoto;
}