Как отобразить все изображения, хранящиеся в базе данных - PullRequest
2 голосов
/ 06 января 2012

Я создаю галерею, которая использует базу данных MySQL (да, я знаю, что это плохая практика, но на данный момент это требование.) Я могу загрузить несколько изображений, но у меня возникают проблемы с отображением всех изображений, хранящихся в базе данных. ФОРМА позволяет загружать пять изображений. Затем пользователь должен перейти на другую страницу, где все изображения в базе данных (включая загруженные недавно) будут отображаться вместе с описанием изображений. У меня уже есть код, но тот, который будет работать на дисплее, не работает, или я думаю, что это неправильно.

Вот код формы:

 <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();


?>

Ваша помощь очень ценится. Мне очень нужно, чтобы двигаться дальше.

Ответы [ 2 ]

5 голосов
/ 06 января 2012

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

<?php
// No ID
$image = mysql_query("SELECT * FROM images ORDER BY id DESC");   
?>

Также посмотрите, что говорит Prof83.Не обращайте внимания на мой пост, если ваш скрипт работает только с одним изображением.

И последнее, но не менее важное: если вы используете разные типы файлов, также укажите правильный формат 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'];
?>
0 голосов
/ 06 января 2012

Хорошо, вы не можете отобразить несколько изображений на странице изображения / 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...