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