【问题标题】:Correct PHP loop to display post categories更正 PHP 循环以显示帖子类别
【发布时间】:2016-01-23 17:47:33
【问题描述】:

我有两个表“类别”和“帖子”,我正在尝试创建一个 category.php 页面,该页面显示不同类别的帖子标题作为原始帖子的链接。我尝试了不同的循环变体,但似乎无法做到正确。我希望有人能指出我正确的方向。

$query = "SELECT post_id, title, body, category_id, posted
      FROM posts
      INNER JOIN categories ON categories.category_id = posts.category_id";

$result = mysqli_query($dbc, $query)
      or die('Error querying database.');

while ($row = mysqli_fetch_array($result)){
            <a href='index.php?id=<?php echo $post['post_id']; ?>' ><?php echo $post['title']; ?></a></h2>
 <p>
    Posted on <?php echo date('d-m-y h:i:s',strtotime($post['date_posted'])); ?>
    In <a href='category.php?id=<?php echo $post['category_id']; ?>' ><?php echo $post['name']; ?></a>
 </p>
    echo "<hr />";
}

感谢您的意见

【问题讨论】:

  • 你现在得到什么输出?
  • while ($row = mysqli_fetch_array($result)){ 但访问的是$post。你确定吗?
  • 尝试通过 $row 更改 $post 变量
  • 单引号内的单引号变量
  • 请参阅以下链接 php.net/manual/en/mysqli.error.phpphp.net/manual/en/function.error-reporting.php 并将其应用于您的代码。还可以查看 HTML 源代码。你也已经在 PHP 中了。语法错误。

标签: php mysql


【解决方案1】:

请原谅我的语法(可能有点不对劲),但这应该给你一个好主意:

$categories = array(
    'sports' => array(
        post1,
        post2,
    ),
    'weather' => array(
        post1,
        post2,
    ),
);

首先获取所有类别,然后遍历每个类别并获取与该类别相关的所有帖子。然后您可以正常循环遍历数组,例如:

foreach($categories as $category){
    //display category title
    foreach($category['posts'] as $post){
        //display post info
    }
}

【讨论】:

    【解决方案2】:

    您的代码中存在一些问题。

    修改后的代码:

    $query = "SELECT post_id, title, body, category_id, posted FROM posts INNER JOIN categories ON categories.category_id = posts.category_id"; 
    
    $result = mysqli_query($dbc, $query) or die('Error querying database.');
    
     while ($row = mysqli_fetch_array($result)){ 
    ?> 
    
    <a href="index.php?id=<?php echo $row['post_id']; ?>" >
    
    <?php echo $row['title']; ?></a></h2> <p>
     Posted on
     <?php 
    echo date('d-m-y h:i:s',strtotime($row['date_posted'])); 
    ?> 
    
    In 
    <a href="category.php?id=<?php echo $row['category_id']; ?>">
    
    <?php 
    echo $row['name']; 
    ?></a> </p> 
    <hr />
    <?php } ?>
    

    问题:

    • 在单引号内使用单引号的数组索引。
    • 使用了错误的变量。
    • php里面的html标签

    【讨论】:

    • 这种情况下可以使用单引号。您每次都在打开和关闭 php 标签...不影响...
    【解决方案3】:

    您在 while 循环中使用了一个名为 $post 的变量,但您正在将该 while 循环中的每一行检索到一个名为 $row 的变量中。

    解决这个问题,您的许多问题都会消失。

    当您想以此处所做的方式输出 HTML 时,还需要停止和启动 PHP 解释器,请注意我添加的 ?&gt;&lt;?php

    $query = "SELECT post_id, title, body, category_id, posted
          FROM posts
          INNER JOIN categories ON categories.category_id = posts.category_id";
    
    $result = mysqli_query($dbc, $query)
          or die('Error querying database.');
    
    // change this to use a variable called $post
    while ($post = mysqli_fetch_array($result)){
    ?>
    
        <a href='index.php?id=<?php echo $post['post_id']; ?>' ><?php echo $post['title']; ?></a>
    
        <!-- Dont think this should be here -->
        </h2>
    
        <p>Posted on <?php echo date('d-m-y h:i:s',strtotime( $post['date_posted'] ) );?>In <a href='category.php?id=<?php echo $post['category_id']; ?>' ><?php echo $post['name']; ?></a>
        </p>
    
    <?php
        echo "<hr />";
    }
    ?>
    

    【讨论】:

    • 感谢您的帮助和更正,我已按照您的建议修复了代码,但现在我收到了通知:未定义索引:类别
    • 我在这段代码中没有看到使用category 的数组索引的任何地方你的意思是category_id
    【解决方案4】:

    &lt;?php ?&gt; 里面有 HTML 代码试试这个:

    <?php $query = "SELECT post_id, title, body, category_id, posted
          FROM posts
          INNER JOIN categories ON categories.category_id = posts.category_id";
    
    $result = mysqli_query($dbc, $query)
          or die('Error querying database.');
    
    while ($row = mysqli_fetch_array($result)){ ?>
                <a href='index.php?id=<?php echo $post['post_id']; ?>' ><?php echo $post['title']; ?></a></h2>
     <p>
        Posted on <?php echo date('d-m-y h:i:s',strtotime($post['date_posted'])); ?>
        In <a href='category.php?id=<?php echo $post['category_id']; ?>' ><?php echo $post['name']; ?></a>
     </p>
        echo "<hr />";
    <?php } ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多