【问题标题】:Spilting tables up at wrong place when using an if and while loop使用 if 和 while 循环时在错误的位置拆分表
【发布时间】:2013-05-22 22:22:34
【问题描述】:

我正在尝试显示 2 个表格,1 个用于表演,1 个用于电影,但目前每条记录显示 1 个表格

这是http://starsqa.com/ana-lucasey-about的页面

这是新的代码 sn-p:

  if ($result['order'] == 1 OR $result['order'] == 2 OR $result['order'] == 6 OR $result['order'] == 4) {
            $qry_stringr = "SELECT roles.starID, starName, roles.knownFor, roles.`character`, roles.`year`, most, type FROM roles INNER JOIN stars ON roles.starID = stars.starID WHERE roles.starID = {$result['starID']} ORDER BY roles.`year` DESC";
            $prepr = $pdo_conn->prepare($qry_stringr);
            $prepr->execute(array());

        $showsArray = array();
        $moviesArray = array();

 while ($rowr = $prepr->fetch(PDO::FETCH_ASSOC)) {
      if ($rowr['type'] == 0) {
         $showsArray[] = $rowr;
      }
      else if($rowr['type'] == 1) {
         $moviesArray[] = $rowr;
      }
 }
echo "<table border='1' bgColor='white'><tbody><tr bgColor='lightgrey' style='color:black;'><td><b>Show</b></td><td><b>Role</b></td><td><b>Year</b></td></tr>";
 foreach($showsArray as $row) {
                    $most = $rowr['most'] == 1 ? ' color:#DE5635;' : '' OR $rowr['most'] == 0 ? ' color:black;' : '';
                    echo "<tr><td><font style='{$most}'>{$rowr['knownFor']}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></td>
                          <td><font style='{$most}'>{$rowr['character']}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></td>
                          <td><font style='{$most}'>{$rowr['year']}</font></td></tr>";
                    echo "</tbody>";
 }
 echo "</table><br><br>";
echo "<table border='1' bgColor='white'><tbody><tr bgColor='lightgrey' style='color:black;'><td><b>Movie</b></td><td><b>Role</b></td><td><b>Year</b></td></tr>";
 foreach($moviesArray as $row) {
                    $most = $rowr['most'] == 1 ? ' color:#DE5635;' : '' OR $rowr['most'] == 0 ? ' color:black;' : '';
                    echo "<tr><td><font style='{$most}'>{$rowr['knownFor']}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></td>
                          <td><font style='{$most}'>{$rowr['character']}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></td>
                          <td><font style='{$most}'>{$rowr['year']}</font></td></tr>";
                    echo "</tbody>";
 }
 echo "</table><br><br>"; 
 }

【问题讨论】:

  • 这个问题过于本地化,无法在本网站上提问。虽然它可能会从一些有空闲时间的志愿者那里得到答案,但通常程序员应该自己调试他们的代码,而不是要求社区为他们做。
  • 我是编码新手,我已经尝试了好几个小时,我想也许有一双新的眼睛能够发现我的错误。
  • 这就是重点。 Stack Overflow 网站不是一个论坛,要求新的眼睛是违反规则的。然而,程序员必须运行他们的代码,而不是观看它。

标签: mysql if-statement pdo while-loop html-table


【解决方案1】:

您正在为每一行创建一个表。如果您查看 while 循环,您可以看到对于数据的每次迭代,您正在创建一个新表。有很多方法可以解决这个问题,我会创建两个数组,一个用于节目,一个用于电影。在循环期间,将行添加到适当的数组中。毕竟,循环遍历每个数组来创建你的表。

例如:

 $showsArray = array();
 $moviesArray = array();

 while ($rowr = $prepr->fetch(PDO::FETCH_ASSOC)) {
      if ($rowr['type'] == 0) {
         $showsArray[] = $rowr;
      }
      elseif($rowr['type'] == 1) {
         $moviesArray[] = $rowr;
      }
 }
 echo "<table border='1' bgColor='white'><tbody><tr bgColor='lightgrey' style='color:black;'><td><b>Show</b></td><td><b>Role</b></td><td><b>Year</b></td></tr>";
 foreach($showsArray as $row) {
     //create the table row here.
 }
 echo "</table>";
echo "<table border='1' bgColor='white'><tbody><tr bgColor='lightgrey' style='color:black;'><td><b>Movie</b></td><td><b>Role</b></td><td><b>Year</b></td></tr>";
 foreach($moviesArray as $row) {
     //create the table row here.
 }
 echo "</table>";

另一种方法是在while循环期间,而不是使用echo,将HTML附加到一个变量,然后在循环之后输出它。

$movies = "";
$shows = "";
while ($rowr = $prepr->fetch(PDO::FETCH_ASSOC)) {
        echo "{$rowr['type']} - {$rowr['knownFor']} &nbsp;&nbsp;&nbsp;";
        if ($rowr['type'] == 0) {
            $shows .= "<tr><td><font>{$rowr['knownFor']}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></td>
                  <td><font>{$rowr['character']}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></td>
                  <td><font>{$rowr['year']}</font></td></tr>";
            $shows .= "</tbody></table><br><br>";
        }
        if ($rowr['type'] == 1) {
            $movies .= "<tr><td><font>{$rowr['knownFor']}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></td>
                  <td><font>{$rowr['character']}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></td>
                  <td><font>{$rowr['year']}</font></td></tr>";
            $movies .= "</tbody></table>";
        }
    }
   //add code here to create your
   //tables and echo $shows and $movies in the appropriate places.

【讨论】:

  • 好的,谢谢,现在尝试这两种方法,我会告诉你哪一种最适合我,或者如果我对它们有任何问题
  • 第一种方式,所以关闭它显示的行只是没有字符显示,我已经更改了我的代码 sn-p 以显示我正在使用的新代码,以防我在此过程中做错了什么
  • 您正在循环创建一个名为 $row 的数组,但引用 $rowr 来生成 html。你需要使用foreach($moviesArray as $rowr)
  • 等待发现一个问题,如果他们没有电影,我已将电影移至放映,如何隐藏仍在放映的电影的标题?
猜你喜欢
  • 2013-03-09
  • 1970-01-01
  • 2019-05-27
  • 2022-12-31
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
相关资源
最近更新 更多