显示正确的记录

时间:2018-03-29 07:23:08

标签: php html mysql sql where

我正在为自己制作一个论坛,看看一切是如何运作的。它在PHP(PDO)中构建,现在我遇到了问题。我无法弄清楚当有人点击board中的某条记录时,我会确定如何只显示topic_id设置为board的项目

这是主题数据库

这是董事会数据库

代码也显示了董事会:

<section class="col-md-8 connectedSortable">
    <div class="box box-info">
    <div class="panel panel-default">
    <div class="panel-heading main-color-bg">
      <h3 class="panel-title">Boards</h3>
     </div>
     <div class="panel-body">
        <?php
           $boardss = $app->get_boards();
             foreach($boardss as $board){
               echo '<div class="col-md-6">';
               echo '<div class="well dash-box">';
               echo '<h3>'.$board['topic'].'</h3><br>'; 
               echo '<a href="https://####/boards/topics">'  .$board['omschrijving'].'</a>';
               echo '</div>';
               echo '</div>';
            }
        ?>
   </div>
   </div>
</div><!-- /.box -->
</section><!-- right col -->

我使用的功能:

public function get_boards(){
    $getBoards = $this->database->query("SELECT * FROM boards ORDER BY id DESC");
    $boards = $this->database->resultset();

    return $boards;

}


public function get_topics(){
    $getTopic = $this->database->query("
    SELECT topics.*, klanten.foto, klanten.voornaam, klanten.achternaam FROM topics 
    LEFT JOIN klanten ON topics.klant_id=klanten.id
    ORDER BY id ASC");
    $topics = $this->database->resultset();

    return $topics;

}

2 个答案:

答案 0 :(得分:1)

生成指向电路板页面的链接时,需要指定实际调用的电路板。您当前的代码如下所示:

echo '<a href="https://####/boards/topics">' . $board['omschrijving'] . '</a>

如您所见,href属性中的调用本身不包含任何信息。相反,你应该在那里添加董事会的主键:

echo '<a href="https://####/boards/topics?board=' . $board['id'] . '">'  . $board['omschrijving'].'</a>

如果这样做,您可以通过$_GET

在电路板页面上获取当前电路板
$currentBoard = $_GET['board'];
if (!is_numeric($currentBoard)) {
    die('Not a valid board id');
}
$currentBoard = (int)$currentBoard;

通过该信息,您可以通过将其添加到get_topics()中的查询并将该板添加为该函数的参数来指定该板的主题。 (get_topics($currentBoard)

SELECT 
    topics.*, 
    klanten.foto, 
    klanten.voornaam, 
    klanten.achternaam 
FROM 
    topics 
    LEFT JOIN klanten ON topics.klant_id=klanten.id
WHERE
    topics.board_id = :board
ORDER BY id ASC

该语句使用参数:board,您可以在a prepared statement中使用变量$currentBoard替换该参数。在这种情况下,我强烈建议您使用准备好的陈述。

答案 1 :(得分:0)

将参数$board_id添加到get_topics(),然后为传递的WHERE添加$board_id子句,以便仅提取该主板的主题。

更新功能

public function get_topics($board_id){
    $getTopic = $this->database->query("
    SELECT topics.*, klanten.foto, klanten.voornaam, klanten.achternaam FROM topics 
    LEFT JOIN klanten ON topics.klant_id=klanten.id
    WHERE topics.board_id = '$board_id'
    ORDER BY id ASC");
    $topics = $this->database->resultset();
    return $topics;
}