Как отобразить изображение из таблицы MySQL на страницу PHP в формате таблицы?

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

Это работает, и теперь я хочу получить сохраненные изображения из MySQL в формате таблицы HTML. Но я не успешен. Я очень новичок в PHP. Я приложил текущий используемый код... Может кто-нибудь помочь мне создать решение, которое отображает результат в виде красивой таблицы?

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

Вот мой код:

$query = "SELECT * FROM ae_gallery";
$result = mysql_query($query) or die('Error, query failed');
 if(mysql_num_rows($result) == 0)
 {
echo "Database is empty <br>";
 }
else
{
 echo "<center><b><h1><u>WV Images</u></h1></b></center><br>";
 echo "E_Name &ndash; Job_Num &ndash; Reason &ndash; Time &ndash;Image<br><hr>";
while(list($E_Name,$Job_num,$ext,$image_time,$data,$Remarks,)=mysql_fetch_array($result))
  {
   echo "
   {$E_Name}
    &ndash;
   {$Job_num}
    &ndash;
    {$Model}
    &ndash;
    {$Reason}
    &ndash;
    {$image_time}
    &ndash;
    <a href='download.php?id={$id}'><img src='http://pagename/wv-images   /download.php?id={$id}' width='80' height='80' alt='{$title}' border='0'></a> 
   <br><hr>" ;
    }
    }
   ?>
  </body>
  </html>

1 ответ

Обычно вы загружаете изображение в файловую систему, обычно под именем файла 123.jpeg, где 123 является первичным ключом строки базы данных, связанной с загруженным файлом. (Не доверяйте предоставленное пользователем имя файла для сохранения файла.)

Вы можете загрузить изображения в столбец BLOB в самой базе данных, а затем использовать download.php скрипт для извлечения и выкладывания:

<?php
    $result= mysql_query('SELECT imagedata FROM ae_gallery WHERE id='.intval($_GET['id']))
    if (mysql_num_rows($result)==0) {
        header('Status: 404 Not Found');
        exit();
    }
    $row= mysql_fetch_assoc($result);
    header('Content-Type: image/jpeg');
    echo $row['imagedata'];
// no PHP end-tag to avoid accidental whitespace being included in the output

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

Для страницы, которую вы указали, вы действительно хотите отобразить в <table>, Вам также нужно будет использовать htmlspecialchars() каждый раз, когда вы вводите текстовое значение в HTML, в противном случае у вас будут проблемы с внедрением HTML и потенциальные дыры в безопасности межсайтовых сценариев.

<?php
    function h($s) {
        echo htmlspecialchars($s);
    }

    $result= mysql_query('SELECT * FROM ae_gallery') or die('Error, query failed');
?>

<?php if (mysql_num_rows($result)==0) { ?>
    Database is empty <br/>
<?php } else { ?>
    <table>
        <tr>
            <th>E_Name</th>
            <th>Job_Num</th>
            <th>Model</th>
            <th>Reason</th>
            <th>Time</th>
            <th>Image</th>
        </tr>
        <?php while ($row= mysql_fetch_assoc($result)) { ?>
            <tr>
                <td><?php h($row['E_Name']); ?></td>
                <td><?php h($row['Job_Num']); ?></td>
                <td><?php h($row['Model']); ?></td>
                <td><?php h($row['Reason']); ?></td>
                <td><?php h($row['image_time']); ?></td>
                <td>
                    <a href="/uploaded-images/<?php h($row['id']); ?>.jpeg">
                        <img src="/uploaded-images/<?php h($row['id']); ?>.jpeg" alt="<?php h($row['title']); ?>"/>
                    </a>
                </td>
            </tr>
        <?php } ?>
    </table>
<?php  } ?>

Заметки:

  • Я определил функцию с коротким именем, чтобы избежать необходимости печатать echo htmlspecialchars() так много.

  • Я предположил, что id а также title столбцы в таблице. (Похоже, они не появляются нигде в примере кода.)

  • Я предположил, что имена переменных, которые вы использовали, являются именами столбцов в таблице, поэтому использовали те же имена для доступа $row, Лучше получать доступ к результатам запроса через именованные столбцы, а не полагаться на их порядок (который может измениться, если вы начнете изменять схему).

Другие вопросы по тегам