【问题标题】:Constructing HTML to output a set of numbers 5 per line构造 HTML 以每行输出一组数字 5
【发布时间】:2011-06-23 02:30:54
【问题描述】:

我真的被我的部分 php 代码卡住了!我有一个从 1 到 40 的数字范围,说我从数据库中的表中提取并使用 while 循环输出到屏幕上!有了这些数字,我正在使用一个提交按钮,稍后我将用图像按钮替换它!刚才我只能使用表格将它们放在一行中,但我想将它们分成 5 个左右的列,然后转到下一行打印接下来的 5 个左右的列!我一直在尝试循环,但它们在不同的行中打印出 1111、2222、3333、4444 等,这不是我想要的!我想要,

 1  2  3  4  5 
 6  7  8  9 10
11 12 13 14 15 
etc

请帮助我,我已经为此困惑了很久,这是我的代码!

<?     
  $q3 = "SELECT * FROM tblgame";
  $r3 = mysql_query($q3);
  while($row2 = mysql_fetch_array($r3))
  {
    $game_cost = $row2['game_cost'];      

    echo "<p>Game ID: ".$row2['game_id'];
    echo "<br>Game Day: ".$game_day;
    echo "<br>Next Game Date: ".$row2['game_date_day']."/".$row2['game_date_month']."/".$row2['game_date_year'];

    $fyear = $row2['game_date_year'];
    $fmonth = $row2['game_date_month'];
    $fday = $row2['game_date_day'];
    $tmonth = $date_month;
    $tyear = $date_year;
    $tday = $date_day;
    $days_between = abs((mktime ( 0, 0, 0, $fmonth, $fday, $fyear) - mktime ( 0, 0, 0, $tmonth, $tday, $tyear))/(60*60*24)); 

    echo "<br>Days till next draw: ". $days_between;
    echo "<br />Game Cost: £".$row2['game_cost']."</p>";
 ?>
 <table>
 <tr>
 <?   
    $q4 = "SELECT * FROM tblnewgameitem WHERE game_id = $row2[game_id] ORDER BY 'game_number' ";
    $r4 = mysql_query($q4);
    $n1 = mysql_num_rows($r4);
    $i=0;
    while($row3 = mysql_fetch_array($r4))
    {
    ?>
     <td>
     <?
       if($row3['user_email'] == "")
       { 
       ?>
           <form action="buyanumber.php" method="POST">
             <input type="hidden" name="game_id" value="<?echo $row2['game_id'];?>">
             <input type="hidden" name="num" value="<? echo $row3['game_number']; ?>">
             <input type="submit" value="<?echo $row3['game_number'];?>" name="submit">
           </form>                                
       <?
       }
       else
       {
         $n = $n + 1;
         echo " ".$row3['game_number']." ";       
       }
       ?>
     </td>
     <?
   }
   ?>
 </tr>
 </table>

请帮助我,我已经被这个问题困扰了好几天,它让我发疯了哈哈!

谢谢 斯蒂芬

【问题讨论】:

  • 考虑使用真正有助于关注相关代码的问题标题,您更有可能吸引对其有所了解的人的注意。
  • 修复了标题。此外,请注意句点的位置,或键盘上的“句号”键 - 在标准美国 QWERTY 布局上的 ,/ 之间 - 并将其视为 SHIFT + 1 的替代品。 ;)
  • 当您写第一个问题时,stackoverflow 是否会强制向您发送一些“如何提出好问题”的信息?还是作者想看看他能在一个问题中打破多少规则?

标签: php mysql while-loop


【解决方案1】:

我假设“真正的”问题位于&lt;table&gt;&lt;/table&gt; 之间,并且您希望将第四个查询返回的值(出于某种原因映射到$row3)放在一个表中5列。

使用 PHP 模运算符 ('%'),您可以执行以下操作:

<?php
    $r4 = <your mysql_query>
    $i = 0;
    while ($row3 = mysql_fetch_array($r4)) {
        if ($i % 5 == 0) { // true for 0, 5, 10, ...
            echo "<tr>";
        }
        echo "<td>";
        // what you want to put between your <td> tags comes here
        echo "</td>";
        if (($i+1) % 5 == 0) { // true for 4, 9, 14, ...
            echo "</tr>";
        }
        $i++;
    }
    // if the number of rows is not a multiple of 5, we must clean up after ourselves:
    if ($i % 5 != 0) {
        echo "<td colspan=\"" + (5-($i % 5)) + "\">&nbsp;</td></tr>";
    }
?>

我自己没有测试过代码。

为清楚起见,请考虑在代码中使用适当的缩进和一致的变量命名。另请注意,在您的问题中使用适当的标题和较少的感叹号会提高问题的清晰度。

【讨论】:

    【解决方案2】:

    嵌套的for循环是关键:

    $list=array();
    while($row2 = mysql_fetch_array($r3)) $list[] = $row2;
    
    $countList = count($list);
    $cols = 5;
    $rows = ceil($countList / $maxPerRow);
    
    for ($i=0; $i<$rows; $i++) {
        echo 'opening stuff per row... <tr> or something';
        for ($j=0; $j<$rows; $j++) {
            echo 'your stuff per item... might be somthing like <td>s';
        }
    
        echo 'closing stuff per row... </tr> or something';
    }
    

    类似的东西

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多