php - foreach 中的 while 循环导致空白页

标签 php mysql sql arrays foreach

这个我实在是想不通!

我尝试通过以下方式显示数据库中的数据:

  • FOREACH 循环,循环遍历包含 12 个值的数组 ($jaren)。 (用户可以在开头的表单中使用“选择”输入来选择这些值之一,此处未显示)
  • foreach 循环中的 WHILE 循环,它应该循环遍历数据库中第五列等于 $jaren 数组的 to 值的每一行,即 ' on'(foreach 循环遍历这些值中的每一个)。

更直观一点:

1e bach BMW:

Table with ALL rows of table for which the 5th column equals '1e bach BMW'

2e 巴赫宝马:

Table with ALL rows of table for which the 5th column equals '2e bach BMW'

等等...

罪魁祸首似乎是 while 循环的表达式 ($row[5] = $jaar),但我不知道它出了什么问题。当我加载页面时,我看到一个完全空白的屏幕。

$results = $DB->q("SELECT * FROM `jaartrui_zoekertjes`");
$row = $DB->fa($results);
$jaren = array('1e bach BMW', '2e bach BMW', '3e bach BMW', '1e master BMW', '2e master BMW', '1e bach GNK', '2e bach GNK', '3e bach GNK', '1e master GNK', '2e master GNK', '3e master GNK', '4e master GNK');

foreach($jaren as $jaar) {
    echo "<b class='blauw'>".$jaar."</b>"
        ."<table><tr><th>Naam</th><th>E-mailadres</th><th>Ik heb</th><th>Ik wil</th></tr>";
        
        while ($row[5] = $jaar) {
            echo "<tr>"
                ."<td>".format_text($row[3])." ".format_text($row[2])."</td>"
                ."<td><a href='mailto:".format_text($row[4])."'>".format_text($row[4])."</td>"
                ."<td>".format_text($row[6])."</td>"
                ."<td>".format_text($row[7])."</td>"
                ."</tr><tr>"
                ."<td><b>Opmerkingen: </b>".format_text($row[8])."</td>"
                ."</tr>";
        }
    echo "</table>";    
}

有人吗?提前致谢!

最佳答案

更新

在使用 DBMS 时,您可以(并且应该)使用查询来进行比较,特别是如果您只想获取某些列。

foreach($jaren as $jaar) {
    //...
    $results = $DB->q("SELECT * FROM `jaartrui_zoekertjes` WHERE column = `$jaar`");
    while ($row = $DB->fa($results)) {
        //...
    }
}

(将 column 替换为列的名称)现在,在 while() 中,您将只拥有所需的行,并且可以按需要显示它们。这次 = 暂时是正确的,因为您想要将检索到的值分配给 $row ,还要 fa() (获取全部?)当没有任何行可供获取并中断 while 时,应返回 false。

当然,您可以像您一样首先获取所有行。但这种做法存在以下问题

  1. 您需要在 PHP 中检查是否 column == $jaar 并因此循环遍历所有行。在 foreach 的每次迭代中,这可能非常耗时
  2. 假设您有一些行没有匹配的列(根本),您仍然会从数据库中检索这些行,并且必须检查所有这些行是否匹配 $jaar,这使我们回到 1。

有人可能会争辩说,对条件的检查也发生在您的数据库中(否则它怎么知道要返回哪些行?),但请记住,这些系统是专门为在这种情况下进行快速查询而设计的。因此,在大多数情况下,让数据库尽可能多地完成工作会更好。


原始答案

$row[5] = $jaar 正在为 $row[5] 分配值 $jaar 并且等于 true(除非 $ jaar 是个假的)。您可能想写类似的内容

while ($row[5] == $jaar) {

由于 PHP 仅在执行完成后输出,因此像下面这样的内容也会给你一个空白页面

while (true)
    print "something";

而不是屏幕上无尽的“东西”

关于php - foreach 中的 while 循环导致空白页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20059305/

相关文章:

php - Windows + PHP 5.3.6 - 未定义的函数,mysql_connect?

php - 用于搜索的 SQL 查询

php - Mysql select - 获取时间戳的日期

php - 使用 php 从 csv 文件读取数据并将数据导入 mysql 时出现奇怪的错误

mysql - 如何获得下一个最高记录而不是最高记录?

php - 从 PHP 到 PHPMYADMIN 的 DOB 集合

javascript - 布局、Phonegap 和 JSON

mysql外键约束

sql - 最接近平均值 SQL

javascript - 使用 Javascript 将 PHP 变量设置为 HTML 文本字段的值