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

标签 php mysql web-services

我有一个问题,基本上我只是为了好玩而制作一个票务系统,我遇到了一些问题,其中大部分我已经能够通过快速谷歌搜索或只是搞砸来解决与它相处一会儿。

虽然我无法解决这个问题,基本上当您点击您打开的特定票证时,它会将您带到一个如下所示的链接: 158.xx.xxx.xxx/site/support?view=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))

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

关于php - MySQL 只返回一行(最近的一行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38602632/

相关文章:

php - "Unable to parse URL"SOAP 请求后异常

php - 如何使用 Silex 框架实现自定义身份验证成功处理程序?

PHPMailer:您必须至少提供一个收件人电子邮件地址

mysql - 如何在 mysql 查询中使用字符串数组

mysql - 将 'LIKE' 与 SQL 子查询的结果一起使用

Java转json字符串忽略空值

php - 再次将mysql中存储的字符串转换为php : eval()

php - MySQL 与 php,显示最近的 50 个

mysql - 使用 SUM 查询

java - 在 webMethods Java 服务中获取请求对象