Как отобразить изображение из таблицы MySQL на страницу PHP в формате таблицы? - PullRequest
0 голосов
/ 26 сентября 2010

Я работаю над загрузчиком изображений, в котором пользователь загружает изображение в базу данных 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 Ответ

1 голос
/ 26 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...