【问题标题】:unable to display images from database via php array无法通过 php 数组显示数据库中的图像
【发布时间】:2011-11-06 04:45:54
【问题描述】:

学习php!

我有一个 sql 数据库,其中包含一个名为“images”的表,该表存储用户将上传的图像路径。我遇到的问题是将图像路径从数据库拉到 PHP 数组,然后使用这些路径将屏幕上的图像显示为列表项。但是,当我运行该页面时,什么都没有显示。

数据库连接代码:

include('Database.php');

class Images extends Database{

private $_images = array();

public function __construct(){

  $conn = $this->create_connection('read');     
  $sql = "SELECT image_path FROM 'items' WHERE catagory='tshirt'";      
  $result = $conn->query($sql)or die(mysql_error());        
  while($paths = mysql_fetch_array($result)) {      
    $this->_images[] = $paths['catagory'];      
  }         
}

public function getItems() {        

  return $this->_images;   
}

视图代码:

<ul>
<?php
require ('../model/Images.php');
$imageArray = array();
$images = new Images();
$imageArray[] = $images->getItems();
foreach($ImageArray as $value){
        echo '<li><img src="'.$value.'"></li>';
}   
?>
</ul>

我使用 phpmyadmin 执行了 SQL 查询,该查询是正确的。我还通过手动添加图像路径来模拟数据库数据,以测试遍历数组。

private $_images = array('./images/tshirt1.jpg', etc, etc);

所以我知道 foreach 循环和查询工作。我之前用过的'create_connection'函数,连接同一个数据库没有任何问题,我有点 难住了,但我认为它可能与mysql_fetch_array部分有关?

我是否使用了正确的方法?还是有更好的方法来解决这个问题?

希望有人能指出我正确的方向!

谢谢

【问题讨论】:

  • 'category' 也拼错了,应该是 'category'。
  • 另外,只是一个友好的提示,您不应该将该查询放在 __construct() 方法中,因为每次实例化该对象时,它都会运行该查询。相反,您可以将其添加到新方法中,例如 loadImages()。
  • 哦,还有一点需要注意,在私有成员变量和方法前加下划线的做法是旧的 PHP 4.x 倒退,您应该尝试训练自己不要在以后的项目中这样做。跨度>

标签: php


【解决方案1】:

在 Digital Precision 建议的更改之上将 $imageArray[] = $images-&gt;getItems(); 更改为 $imageArray = $images-&gt;getItems();

编辑:

$imageArray = $images->getItems();
var_dump( $imageArray );
foreach($imageArray as $value) {
        var_dump( $value );
        echo '<li><img src="'.$value.'"></li>';
}

会找到您丢失数据的位置。我希望它与数据库中错误的图像路径无关。

编辑:

var_dump 总是显示一些东西...检查“空白页面”的来源以查看正在显示的内容,如果转储变量为空,请尝试使用 var_dump( $images ); 应该向您显示对象中的内容,如果仍然是属性 _images空数组构造函数有问题,也许在 WHILE LOOP 之前尝试 while ($paths = mysql_fetch_array($result, MYSQL_ASSOC)) 或 var_dump( $result ); - 你在某处丢失数据...

【讨论】:

  • 啊,是的,很好,会产生一个多暗的数组。 @Alan,也试试 Bensiu 的建议。
  • 谢谢大家,但仍然没有显示任何内容,如果能显示一个错误来处理就好了:) !!我还注意到我的代码中有一个错字对不起! ImageArray 应该是 foreach 循环中的 imageArray,我改变了这个,但仍然有同样的问题
  • 我已经按照 bensiu 的建议添加了 var_dump,谢谢。我仍然得到一个空白页。所以我决定检查我的位置是否正确,因为我刚刚进入 tesy 显示“你好”,然后我注释掉了 while 循环并将随机字符串放入 $_images 数组中,只是为了在屏幕上得到一些东西但是由于某种原因屏幕仍然显示为空白?
  • @bensiu,谢谢我已经注释掉了 $images = new Images(); 下的所有内容。和 var_dumped images object 这是以下输出: object(Images)#1 (3) { ["_images":"Images":private]=> array(2) { [0]=> string(5) "wffef" [1]=> string(7) "dsfwvew" } ["_error_messages":protected]=> array(0) { } ["_user_messages":protected]=> array(0) { } }
  • 感谢你们的努力,这让我有一些工作要做:)
【解决方案2】:

一切看起来都不错,除了你用'category'填充$this->images[],但没有从mysql中选择'category','image_path'是,试试这个:

while($paths = mysql_fetch_array($result)) {        
    //$this->_images[] = $paths['catagory'];
    $this->_images[] = $paths['image_path'];      
}  

【讨论】:

  • 谢谢,我已经尝试了你的建议,但仍然没有显示任何内容
  • 如果我遇到这个问题,我会首先从 mysql 命令行运行 sql 语句并确保结果可用,如果是这样,那么我会在你填充 $this-&gt;_images 数组之后添加一个 var_dump while 循环,如果数据存在,则来自调用脚本的var_dump($images-&gt;getItems())。
  • 感谢 DP 的建议,我会试一试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多