如何以表格格式将MySQL表格中的图像显示到PHP页面?

时间:2010-09-26 10:08:04

标签: php mysql html blob

我正在使用图像上传器,用户可以通过简单的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 &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 个答案:

答案 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()这么多。

  • 我假设idtitle是表格中的列。 (它们似乎不是来自示例代码中的任何位置。)

  • 我假设您使用的变量名是表中的列名,因此使用相同的名称来访问$row。最好通过命名列访问查询结果,而不是依赖于它们的顺序(如果你开始改变模式,这可能会改变)。