2010-09-26 153 views
0

我正在使用图像上传器,其中用户通过简单的HTML/PHP表单将图像上传到mysql数据库。如何以表格形式将图像从MySQL表格显示到PHP页面?

它的工作原理,现在我想以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> 
+2

个人而言,我不会把图像/文件中的数据库,而只是一个文件夹中,并保持@ In81Vad0数据库 – In81Vad0 2010-09-26 10:14:08

+0

的链接,我不知道这个方法...请尽可能帮我怎么可以做到这一点。我在PHP中很新手。 – user437641 2010-09-26 10:51:12

+1

你问了一口。如何在表格中打印,如何上传多个图像,如何管理所述图像。也许这会更好,作为一些单独的问题......试着专注于这个问题的表格。 – JoshD 2010-09-26 10:57:10

回答

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。最好通过命名列来访问查询的结果,而不是依赖它们的顺序(如果你开始改变模式,这可能会改变)。

+0

谢谢...它的工作。 – user437641 2010-09-26 10:41:13

+0

如何放置图像的缩略图代替大图像,我认为它可以通过img标签中的宽度和高度参数完成。 – user437641 2010-09-26 10:42:50

+0

我试过宽度,高度...但不工作...我认为一些冒号或分号,引号issue..so什么是适当的语法宽度,这种情况的高度。 – user437641 2010-09-26 10:44:18