在发布邮件时显示预览图像时出现问题(非wordpress)

时间:2018-02-06 19:48:50

标签: php

我有一个博客帖子列表,其中上传了帖子信息的一组图像在列表中显示为缩略图。我目前正在遇到'试图获取非对象属性'错误,我认为这是唯一阻止它以我想要的方式工作的东西。

我想以肯定为前言,我已经阅读了如何修复此错误并尝试根据我在本网站和其他网络资源上找到的信息修改我的代码。但是,我似乎无法用我发现的信息来修复它。

我已经在这里工作了几个小时,如果有人能帮我引导我走向正确的方向,我真的很感激。我还在使用PHP,所以我知道我还有很多需要学习的东西。

这是我正在使用的非wordpress博客。这是我从头开始制作的,以帮助我学习PHP。

编辑:由于从我上次更改标题到更好地详细说明我的问题时大量下来的投票而再次编辑了标题

以下是我在html中生成帖子预览的部分内容的完整代码:

<?php
      $queryString = "SELECT post_id, title, price, image, LEFT(description, 180) AS description, category FROM post INNER JOIN categories ON categories.category_id=post.category_id ORDER BY post_id DESC LIMIT $start, $per_page"; 
      $query = $db->prepare($queryString);
      $query->execute();
      $query->bind_result($post_id, $title, $price, $image, $description, $category);

            while ($query->fetch()):
        $lastspace = strrpos($description, '');
        ?>

    <article>
      <div class="preview">
         <?php
            $i = 0;
          ?>

        <?php 
            $imgsql = "SELECT img_name, img_path FROM images WHERE post_id = '$post_id' LIMIT 1";
            $query1 = $db->query($imgsql);
            if($query1->num_rows>0){
              while ($imgrow = $query1->fetch_object()){  
              echo "<img src='admin/images/".$imgrow->img_name."' width='150px' height='150px' >";
            }
          }
        ?> 

        <div class="info">
          <h2><?php echo $title?></h2> 
          <div class="price">
           $<?php echo $price?>
          </div>
          <div class="cat">
          <?php echo $category?>
          </div>
          <div class="description">
          <?php echo substr($description, $lastspace).'...<br><a href="post.php?id='.$post_id.'">VIEW PRODUCT</a>'?>
          </div>
        </div>
      </div>
    </article>

    <?php endwhile?> 

以下是我显示预览图像的部分:

         <?php
            $i = 0;
          ?>

        <?php 
            $imgsql = "SELECT img_name, img_path FROM images WHERE post_id = '$post_id' LIMIT 1";
            $query1 = $db->query($imgsql);
            if($query1->num_rows>0){
              while ($imgrow = $query1->fetch_object()){  
              echo "<img src='admin/images/".$imgrow->img_name."' width='150px' height='150px' >";
            }
          }
        ?> 

这是错误的具体行:

if($query1->num_rows>0){

编辑2

当我运行var_dump($query1);时,它会返回bool(false)

我认为我在其上方运行的查询$query导致了问题。出于好奇,我放置了

<?php 
            $imgsql = "SELECT img_name, img_path FROM images WHERE post_id = '$post_id' LIMIT 1";
            $query1 = $db->query($imgsql);
            if($query1->num_rows>0){
              while ($imgrow = $query1->fetch_object()){  
              echo "<img src='admin/images/".$imgrow->img_name."' width='150px' height='150px' >";
            }
          }
        ?> 

以上

<?php
      $queryString = "SELECT post_id, title, price, image, LEFT(description, 180) AS description, category FROM post INNER JOIN categories ON categories.category_id=post.category_id ORDER BY post_id DESC LIMIT $start, $per_page"; 
      $query = $db->prepare($queryString);
      $query->execute();
      $query->bind_result($post_id, $title, $price, $image, $description, $category);

            while ($query->fetch()):
        $lastspace = strrpos($description, '');
        ?>

显示图像并且工作正常。

它运行的唯一错误是post_id是未定义的,但那是因为它直到它下面的语句才被定义 - 它应该在它下面的语句。否则,它将完全按照我的意愿工作。

但是,我需要它存在于上述查询的while循环中,以便根据我的需要进行操作,以便每个帖子预览都可以拥有随其上传的独特图像。

这可能是因为我有while嵌套在另一个while吗?

编辑3

这是我的images表:

CREATE TABLE `images` (
  `img_id` int(11) NOT NULL,
  `post_id` int(11) NOT NULL,
  `img_path` varchar(500) NOT NULL,
  `img_type` varchar(500) NOT NULL,
  `img_name` varchar(500) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

这里有一个信息的视觉效果(因为它不在屏幕截图中,所以没有img_type):

enter image description here

编辑4

我还想提一下,我有这个确切的代码,我试图在这里工作,在另一页上顺利工作。我认为它必须是一个必须干扰代码的东西,因为我在我的另一页上没有以下东西正常工作:

<?php
      $queryString = "SELECT post_id, title, price, image, LEFT(description, 180) AS description, category FROM post INNER JOIN categories ON categories.category_id=post.category_id ORDER BY post_id DESC LIMIT $start, $per_page"; 
      $query = $db->prepare($queryString);
      $query->execute();
      $query->bind_result($post_id, $title, $price, $image, $description, $category);

            while ($query->fetch()):
        $lastspace = strrpos($description, '');
        ?>

1 个答案:

答案 0 :(得分:0)

我假设你已经保存了一张照片,而不是你的数据库中的照片名称。所以我从这个角度来回答。

您目前的陈述是

 echo "<img src='admin/images/".$imgrow->img_name."' width='150px' height='150px' >";

实际上当图像存储在数据库中时,它存储在blob类型中,它不存储图像的名称,你必须使用base64_encode()来检索blob数据。

  echo "<img src='admin/images/".base64_encode($imgrow->img_name)."' width='150px' height='150px' >";

或者是一个整体,我会更改你的代码,因为它容易受到sql注入。使用准备好的陈述。

 <?php
        $i = 0;
      ?>

    <?php 
        $imgsql = $db->prepare("SELECT img_name, img_path FROM images WHERE post_id = ? LIMIT 1");
        $imgsql->bind_param("s",$post_id);
        $imgsql->execute();
        $query1 = $imgsql->get_result();
        if($query1->num_rows>0){
          while ($imgrow = $query1->fetch_assoc()){  
          echo "<img src='admin/images/".base64_encode($imgrow['img_name'])."' width='150px' height='150px' >";
        }
      }
    ?>