Я создаю галерею, которая использует базу данных MySQL (да, я знаю, что это плохая практика, но это требование на данный момент.) Я могу загружать несколько изображений, но у меня проблемы с отображением всех изображений, хранящихся в базе данных. FORM позволяет загружать пять изображений. Затем пользователь должен перейти на другую страницу, где будут отображаться все изображения в базе данных (включая загруженные недавно) вместе с описанием изображений. У меня уже есть код, но тот, который будет работать на дисплее, не работает, или я думаю, что это неправильно.
Вот код формы:
<html> <head> <title> Upload image</title> </head> <body> <div align="center"> <form action="fUpload.php" method="POST" enctype="multipart/form-data"> All forms must be filled. <br /> File: <br /> <input type="file" name="image[]"/> <input type="text" name="imageDescription[]" size="30" /> <br /> <input type="file" name="image[]"/> <input type="text" name="imageDescription[]" size="30" /> <br /> <input type="file" name="image[]"/> <input type="text" name="imageDescription[]" size="30" /> <br /> <input type="file" name="image[]"/> <input type="text" name="imageDescription[]" size="30" /> <br /> <input type="file" name="image[]"/> <input type="text" name="imageDescription[]" size="30" /> <br /> <input type="submit" value="Upload image" /> </form> </div> </body> </html>
Вот сценарий, который будет загружаться:
<?php //connect to the database// $con = mysql_connect("localhost","root", ""); if(!$con) { die('Could not connect to the database:' . mysql_error()); echo "ERROR IN CONNECTION"; } $sel = mysql_select_db("imagedatabase"); if(!$sel) { die('Could not connect to the database:' . mysql_error()); echo "ERROR IN CONNECTION"; } //file properties// $file = $_FILES['image']['tmp_name']; echo '<br />'; /*if(!isset($file)) echo "Please select your images"; else { */for($count = 0; $count < count($_FILES['image']); $count++) { //$image = file_get_contents($_FILES['image']['tmp_name']); $image_desc[$count] = addslashes($_POST['imageDescription'][$count]); $image_name[$count] = addslashes($_FILES['image]']['name'][$count]); echo '<br \>'; $image_size[$count] = @getimagesize($_FILES['image']['tmp_name'][$count]); $error[$count] = $_FILES['image']['error'][$count]; if($image_size[$count] === FALSE || ($image_size[$count]) == 0) echo "That's not an image"; else { // Temporary file name stored on the server $tmpName[$count] = $_FILES['image']['tmp_name'][$count]; // Read the file $fp[$count] = fopen($tmpName[$count], 'r'); $data[$count] = fread($fp[$count], filesize($tmpName[$count])); $data[$count] = addslashes($data[$count]); fclose($fp[$count]); // Create the query and insert // into our database. $results = mysql_query("INSERT INTO images( description, image) VALUES ('$image_desc[$count]','$data[$count]')", $con); if(!$results) echo "Problem uploding the image. Please check your database"; //else //{ echo ""; //$last_id = mysql_insert_id(); //echo "Image Uploaded. <p /> <p /><img src=display.php? id=$last_id>"; //header('Lcation: display2.php?id=$last_id'); } //} } mysql_close($con); header('Location: fGallery.php'); ?>
И, наконец, тот, который должен отображаться:
<html> <body> </body> <?php //connect to the database// mysql_connect("localhost","root", "") or die(mysql_error()); mysql_select_db("imagedatabase") or die(mysql_error()); //requesting image id $id = addslashes($_REQUEST['id']); $image = mysql_query("SELECT * FROM images WHERE id = $id"); while($datum = mysql_fetch_array($image, MYSQL_ASSOC)) { printf("Description %s $image = $image['image']; header("Content-type: image/jpeg"); } mysql_close(); ?>
Ваша помощь очень ценится. Мне нужно, чтобы это было плохо.
Из того, что я понимаю из вашего сообщения, является то, что загрузка и хранение не проблема, но показ изображений. Вероятно, это потому, что вы используете варсы, которые не установлены, поэтому никаких результатов не найти в базе данных. Если я неправильно понял, дайте мне знать.
<?php // No ID $image = mysql_query("SELECT * FROM images ORDER BY id DESC"); ?>
Также посмотрите, что говорит Проф83. Игнорируйте мой пост, если ваш скрипт работает только с одним изображением.
И последнее, но не менее важное: если вы используете разные типы файлов, также эхо-формат MIME-формата в заголовке.
Обновление Я объединил оба ответа.
Редактируйте цикл:
<?php while($row = mysql_fetch_assoc($image)) { echo '<img src="img.php?id='.$row["id"].'">'; } ?>
Создать имя страницы img.php
<?php $query = mysql_query("SELECT image FROM images WHERE id = ".$_GET['id']); $row = mysql_fetch_assoc($query); header("Content-type: image/jpeg"); echo $row['image']; ?>
Ок, вы не можете отображать несколько изображений на странице изображения / jpeg …
Вы сообщаете браузеру, что на странице есть изображение / jpeg (другими словами, страница является ИЗОБРАЖЕНИЕМ), но вы эхом отдаете несколько данных изображения
Вы должны использовать страницу галереи, чтобы показать все изображения следующим образом:
<?php // $images = result from database of all image rows foreach ($images as $img) echo '<img src="img.php?id='.$img["id"].'">'; ?>
и в img.php:
// Load the image data for id in $_GET['id']; header("Content-type: image/jpeg"); echo $data;