本人学php不久,感觉用php输出大段的html比较麻烦,请问像如下的代码有什么好的化简办法?
<table width="100%" border="2">
    <tr>
        <td width="6%">班级</td>
        <td width="6%">作业编号</td>
        <td width="15%">留作业日期</td>
        <td width="15%">交作业日期</td>
        <td width="50%">作业内容</td>
        <td width="8%">管理</td>
    </tr>
  <?php
      $query=sprintf("select * from homework where teacher='%s' and date>='%s'",$_SESSION['teacherid'],date("Y-m-d"));
      mysql_query("set names gb2312");
      $result = mysql_query($query);
      while ($row=mysql_fetch_array($result))
      { 
  echo "<tr>";
  echo    "<td>".$row['class']."</td>";
  echo    "<td>".$row['number']."</td>";
  echo    "<td>".substr($row['date'],0,10)."</td>";
  echo    "<td>".substr($row['duetime'],0,10)."</td>";
  echo    "<td>".$row['content']."</td>";
  echo    "<td onclick=\"deletehw('".$row['hwid']."')\">删除</td>";
  echo "</tr>";
      }
  ?>
</table>我觉得echo太多了,还是说输出数据库表格就是这样的?

解决方案 »

  1.   

    这种情况下mysql_fetch_array($result)应该选择num输出,用循环echo
    我嘛,现在不写html了,写xml,让xsl模板去搞定html的事,嘿嘿
      

  2.   

          while ($row=mysql_fetch_array($result))
          { 
          echo <<< HTML
    <tr>
    td>$row[class]</td>
    <td>$row[number]</td>
    <td>$row[date]</td>
    <td>$row[duetime]</td>
    <td>$row[content]</td>
    <td onclick="deletehw('$row[hwid]')">删除</td>
    </tr>
    HTML;
          }你的 date 和 duetime 本来就是10个字符,不需要截取
    代码的美观性较差所以就有了模板引擎,把繁杂的充填html的工作交给程序完成
      

  3.   


    //这样呢。。
    while ($row=mysql_fetch_array($result)){
         $str = "<tr><td>{$row['class']}</td><td>{$row['number']}</td><td>".substr($row['date'],0,10)."</td><td>".substr($row['duetime'],0,10)."</td><td>{$row['content']}</td><td onclick=\"deletehw('{$row['hwid']}');\">删除</td>\n";
        echo $str;
    }
      

  4.   

    个人觉得还是用模板比较好,php代码和html分开来,更容易管理,写起来相对较方便
      

  5.   

    感谢3楼,虽然没有解释语法。
    我自己google了一下,才知道php表示字符串有一种heredoc技术:
    这里有说明:
    http://www.php.net/manual/en/language.types.string.php所以我改成了这样:
             <table width="100%" border="2">
                 <tr>
               <td width="6%">班级</td>
                        <td width="6%">作业编号</td>
                        <td width="15%">留作业日期</td>
                        <td width="15%">交作业日期</td>
                        <td width="50%">作业内容</td>
                        <td width="8%">管理</td>
            </tr>
    <?php
    $query=sprintf("select * from homework where teacher='%s' and date>='%s'",$_SESSION['teacherid'],date("Y-m-d"));
    mysql_query("set names gb2312");
    $result = mysql_query($query);
    while ($row=mysql_fetch_array($result))
      { 
    echo <<<HTML
    <tr>
    <td>$row[class]</td>
    <td>$row[number]</td>
    <td>$row[date]</td>
    <td>$row[duetime]</td>
    <td>$row[content]</td>
    <td onclick="deletehw('$row[hwid]')">删除</td>
    </tr>
    HTML;
      }
                    ?>
           </table>heredoc的名字可以随便起,符合命名规则且保持一致就行了。结束标记一定要在新一行开头。可是这样一来我就不能截取字符串了。显示的时间像这样:2011-05-05 19:34:10
    mysql中我用的是datatime。我考虑改一下数据表结构了。xml和模版考虑以后再学,我先用教笨的办法吧,毕设赶工期,还有几个功能未实现。。