我正在使用图像上传器,用户可以通过简单的HTML / PHP表单将图像上传到mysql数据库。
它有效,现在我想以HTML表格格式从MySQL中检索已保存的图像。但我没有成功。我是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 – Job_Num – Reason – Time –Image<br><hr>";
while(list($E_Name,$Job_num,$ext,$image_time,$data,$Remarks,)=mysql_fetch_array($result))
{
echo "
{$E_Name}
–
{$Job_num}
–
{$Model}
–
{$Reason}
–
{$image_time}
–
<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>
答案 0 :(得分: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
但是这样做意味着默认情况下你不会得到缓存。您必须添加一个非常复杂的缓存标头处理负载,以阻止它每次重新获取图像。 Web服务器通常是提供静态数据的更有效方式。
对于您引用的页面,您确实希望以<table>
显示。每次将文本值回显到HTML时,您还需要使用htmlspecialchars()
,否则您将遇到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
。最好通过命名列访问查询结果,而不是依赖于它们的顺序(如果你开始改变模式,这可能会改变)。