【问题标题】:Using php and the while loop to print a table of data that is being selected from a mysql db [duplicate]使用php和while循环打印从mysql数据库中选择的数据表[重复]
【发布时间】:2021-11-21 15:48:11
【问题描述】:

我是 php 新手,正在尝试学习 CRUD 应用程序。对于这部分代码,我在数据库(mysql)中设置了一个表。我正在尝试与桌子互动。我希望用户登录(该部分有效)并且当他们登录时 - 我在 $_SESSION 中存储一条消息,上面写着 ie。 '成功'。这让我知道用户已登录。不是问题。第二部分是如果表中已经有行(来自以前的会话),我想在表中打印出这些行。如果没有行我想打印出“No rows”

我在这里尝试使用简单的逻辑,首先我通过执行来自 pdo 对象的提取来创建 $row 变量(也可以)。如果该行是 TRUE 即。它存在,打印表格。如果该行为假,则不打印任何行。但是,我不断打印整张桌子,比如说 5 次。而不是表格中的 5 行。

另外,我不确定我使用了正确类型的 while () 语句。现在的内容是,
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))

然后我得到整个表和所有行 5 次。 fetch 和 PDO::FETCH_ASSOC 对我来说有点不清楚,我理解 $row 是真还是假。

$stmt= $pdo->query("SELECT make, model, year, mileage from autos");
$row = $stmt->fetch(PDO::FETCH_ASSOC); 

if (   isset($_SESSION['success']) && $row == true  ) {

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){

echo ('<table border="1">'."\n");
    echo "<tr><td>";
    echo "Make";
    echo ("</td><td>");
    echo "Model";
    echo ("</td><td>");
    echo "Year";
    echo ("</td><td>");
    echo "Mileage";
    echo ("</td><td>");
    echo "Action";
    echo ("</td></tr>");
    
    echo "<tr><td>";
    echo (htmlentities($row['make']));
    echo ("</td><td>");
    echo (htmlentities($row['model']));
    echo ("</td><td>");
    echo (htmlentities($row['year']));
    echo ("</td><td>");
    echo (htmlentities($row['mileage']));
    echo ("</td><td>");
    echo ('<a href="edit.php?user_id='.$row['user_id'].'">Edit</a>'.'/'.'<a 
    href="delete".php?user_id='.$row['user_id'].'>Delete</a>');
    echo "</td></tr>";
  }



  } elseif (    isset($_SESSION['success']) && $row == false  ){

  echo "No rows found";
  }

【问题讨论】:

  • &lt;table&gt; 和标题移出while 循环。将它们放在循环之前和之后,您需要关闭&lt;/table&gt;
  • 啊啊啊就是这么简单。谢谢
  • 另外,删除第一个 fetch 并使用 $count =$stmt-&gt;rowCount() 并在 if 中使用 $count 或其他内容。
  • 实际上在循环之前只需使用$rows = $stmt-&gt;fetchAll 并检查if 然后foreach($rows

标签: php mysql


【解决方案1】:

我不断打印整个表格,比如说 5 次。

因为您要在循环的每次迭代中打印整个表格:

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
  echo ('<table border="1">'."\n");
  // etc.

不是检查第一行是否为真,而是检查行数:

$stmt= $pdo->query("SELECT make, model, year, mileage from autos");
$count = $stmt->rowCount();

if (   isset($_SESSION['success']) && $count > 0  )

然后在循环输出你的表格,然后在循环内输出每一行

echo ('<table border="1">'."\n");
// etc, output the table header
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
  echo "<tr><td>";
  // etc.
  echo "</td></tr>";
}
echo ('</table>'."\n");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2016-03-24
    • 2014-11-29
    相关资源
    最近更新 更多