【问题标题】:If statement not working as intended如果语句未按预期工作
【发布时间】:2012-08-16 07:25:56
【问题描述】:

现在第一个有效,但它不会进入第二个..

while($row = mysql_fetch_array($result))
{
    $rank = $row["rank"];
    if($rank == "President/Main Developer" or $rank == "Administrator/Asst. Developer")
    {   
        echo "In first while";
        echo "<td>" . $row["username"] . "</td>";
        echo "<td style='color: #FF4747'>" . $row["rank"] . "</td>";
        $time = formatTime($row["joinDate"]);
        echo "<td>" . $time . "</td>";
        echo "</tr>";
        }
    }

【问题讨论】:

    标签: php sql if-statement while-loop


    【解决方案1】:

    不要在 PHP 的 if 语句中使用 orand。正确的运算符是 || for or 和 &amp;&amp; for and。

    if 语句的末尾还有一个;,这会导致问题。

    while($row = mysql_fetch_array($result))
    {
        $rank = $row["rank"];
        if($rank == "President/Main Developer" || $rank == "Administrator/Asst. Developer")
        {   
            echo "In first while";
            echo "<td>" . $row["username"] . "</td>";
            echo "<td style='color: #FF4747'>" . $row["rank"] . "</td>";
            $time = formatTime($row["joinDate"]);
            echo "<td>" . $time . "</td>";
            echo "</tr>";
        }
    }
    

    还有第二段代码:

    while($row2 = mysql_fetch_array($result))
    {
        echo "<tr>";
        echo "In second while";
        echo "<td>" . $row2["username"] . "</td>";
        if ($row["rank"]!="President/Main Developer" && $row2["rank"]!="Administrator/Asst. Developer")
        {
            echo "<td>" . $row2["rank"] . "</td>";
        }
        $time = formatTime($row2["joinDate"]);
        echo "<td>" . $time . "</td>";
        echo "</tr>";
    }
    

    另外,您可能想在回声中使用换行符。它对浏览器中的输出没有影响,但它使您自己阅读 HTML 变得更加容易。你可以这样做:

    echo "<td>" . $row2["rank"] . "</td>\n";
    

    唯一的区别是当您查看代码时,enxt 位将从新行开始。

    编辑:重新没有进入第二个循环

    如果您希望使用同一行,则需要将其全部放入一个 while 循环中 - 或对您的数据库再次运行查询。 while 循环将一次获取结果的每一行,直到用完为止。除非您再次查询数据库,否则根本不会再获取任何行,因此它永远不会进入循环。

    【讨论】:

    • || 的优先级高于or&amp;&amp; 的优先级高于and,但使用它们不会破坏你的脚本
    • 好吧,这行得通,但为什么它没有进入第二个 while 循环?
    • @LawrenceCherone 天哪,我什至都不知道。 一直使用||&amp;&amp;。谢谢! +1
    • 我习惯了 Lua,它使用 or 和 and。
    【解决方案2】:

    当您不在两个循环之间“重新查询”时,您已经到达了结果的末尾。所以第二个while-loop 什么都不做。

    你必须重置它,然后再继续:

    mysql_data_seek($result, 0);
    

    【讨论】:

      【解决方案3】:

      更改查询本身... 第一个查询是

      $query1 = "SELECT * FROM `TABLE_NAME` WHERE `rank` = 'President/Main Developer' OR `rank` = 'Administrator/Asst. Developer'";
      
      $query2 = "SELECT * FROM `TABLE_NAME` WHERE `rank` != 'President/Main Developer' OR `rank` != 'Administrator/Asst. Developer'";
      

      你先做第一个,然后做最后一个,不需要 IF 语句:)

      【讨论】:

      • 由于页面的构建方式,我做不到。
      【解决方案4】:

      我相信您遇到的问题是 ;在 if 语句的末尾。当你放 ;您是说句子到此结束,这就像说 if 的“then”部分为空,然后 { 无关紧要。

      这就是你想要的:

      while($row = mysql_fetch_array($result))
      {
          $rank = $row["rank"];
          if($rank == "President/Main Developer" or $rank == "Administrator/Asst. Developer")
          {   
              echo "In first while";
              echo "<td>" . $row["username"] . "</td>";
              echo "<td style='color: #FF4747'>" . $row["rank"] . "</td>";
              $time = formatTime($row["joinDate"]);
              echo "<td>" . $time . "</td>";
              echo "</tr>";
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-05
        • 2017-10-27
        • 2013-04-12
        • 2020-03-11
        • 1970-01-01
        相关资源
        最近更新 更多