MySQL只返回一行(最近的一行)


MySQL returning only one row (most recent one)

我遇到了一个问题,基本上我只是为了好玩而制作了一个票务系统,但我遇到了一些问题,其中大多数问题我都可以通过快速谷歌搜索来解决,或者只是稍微处理一下。

不过,我无法解决这个问题,基本上,当你点击你打开的特定机票时,它会把你带到一个链接,看起来像这样:158.xx.xxx.xxx/site/support?视图=ID(35,36,37)。当查看页面时,它确实显示了票证信息,但在所有三张票证上都显示了相同的信息。

  $stmt3 = $auth_user->runQuery("SELECT * FROM ticket"); $stmt3->execute();
  if(isset($_GET['view'])){ 
if($stmt3->rowCount()){
  while($r = $stmt3->fetch(PDO::FETCH_OBJ)) {
    $name = $r->name;
    $id3 = $r->id;
    $subject = $r->subject;
    $ticket = $r->ticket_date;
    $desc = $r->body;
    $ticid = $r->ticket_id;
  }
}
if($_GET['view'] == $id3){
echo 
'
<div class="ticket">
    <div class="ticket-date">
        '.$ticket.'
    </div>
    <div class="ticket-name">
        '.$name.'
    </div>
    <div class="ticket-desc">
        '.$desc.'
    </div>
</div>
';
$displayticket = $auth_user->runQuery("SELECT * FROM ticket_replies WHERE ticket_id=:ticid");
$displayticket->execute(array(':ticid'=>$user_id));
$ticketsrow = $displayticket->fetchAll();
$count = count($ticketsrow);
foreach($ticketsrow as $row9){
  echo 
  "
  <br />
  <div class='ticket'>
    <div class='ticket-date'>
    ".$row9['timestamp']."
    </div>
    <div class='ticket-name'>
    ".$row9['uid']."
    </div>
    <div class='ticket-desc'>
    ".$row9['text']."
    </div>
  </div> 
  <br />";
}
echo '
<form method="POST" action="support?view='.$id3.'">
  <textarea id="text" name="addsupportbody"></textarea><br/>
  <input type="submit" name="addsupportcomment" class="btn btn-dark" style="margin-top: 5px;" value="Add Comment">
  <input type="submit" name="closeticket" class="btn btn-danger" value="Close Ticket">
</form>';
if(isset($_POST['addsupportcomment'])){
    $ticketid = $id3;
    $uidc = $user_id;
    $ttext = $_POST['addsupportbody'];
    if($ttext == ""){
        echo "You must enter a comment to send.";
    }else{
      try
      {
        if($auth_user->insertTicketComment($ticketid, $uidc, $ttext)){
            echo "Your comment has been added!";
            header("url=index");
        }
      }
      catch(PDOException $e)
      {
        echo $e->getMessage();
      }
    }
}
}else{
  echo "This page does not exist.";
} }

无论你说什么,我都不认为这个代码可以安全地公开或使用,也不认为它是好的或有组织的。我只是想从自己的错误中吸取教训,希望在这一路上能得到一些帮助。如果有一些丢失的代码,请告诉我,我会把它包括在内。这段代码对我来说是不正确的。

只选择要显示的票证。更改

$stmt3 = $auth_user->runQuery("SELECT * FROM ticket"); 

$id = isset($_GET['view'])? (int)$_GET['view']: -1;
$stmt3 = $auth_user->runQuery("SELECT * FROM ticket WHERE id = $id"); 

你的代码的问题是,你要选择所有的票,然后你要循环浏览它们:

while($r = $stmt3->fetch(PDO::FETCH_OBJ))

在循环的每次迭代中,都要捕获行中的数据。无论用户想要什么票证,循环中的变量总是以最后一行的值结束。相反,你应该像我之前那样,只取你感兴趣的票。如果找到匹配的,那就是彩票!无需循环。