需要帮助简化我的PHP表

时间:2010-05-17 20:45:53

标签: php mysql simplification

我对php比较陌生,并且感觉我在从mysql显示数据时会走得很远。

我有一张表,我想从我的数据库中显示一些字段。

如何在不必回应表格的每一位的情况下实现这一点???

以下是代码:

     <?php
$query1 = mysql_send("SELECT firstname, lastname, email, user, country FROM customers WHERE id='".$_COOKIE['custid']."'");

while ($row = mysql_fetch_array($query1))

{

      echo     ' <table id="account_table" style="width:550px; border:none; ">
              <tr>
                <td width="155">Contact Name</td>';
      echo          '<td width="335">';

    echo $row['firstname'] ;
    echo '&nbsp;';
    echo $row['lastname'];

    echo '</td>
              </tr>
              <tr>
                <td>Email Address</td>
          <td>';
   echo $row['email'];

  echo '  </td>
             </tr>
              <tr>
                <td>Username</td>
                <td>' ;

    echo $row['user'];

    echo '</td>
              </tr>
              <tr>
                <td>Country</td>
                <td>';

    echo $row['country'];

    echo '</td>
              </tr>
              <tr>
                <td>Time Zone</td>
                <td>GMT+1</td>
              </tr>
              <tr>
                <td>Activated</td>
                <td>16 Dec 2009</td>
              </tr>
            </table>';

            }
?>

4 个答案:

答案 0 :(得分:4)

我建议你看一些像Smarty这样的模板引擎,它允许你将表示与php代码分开。

答案 1 :(得分:3)

您可以先将所有数据提取到数组中,然后迭代该数组。没有必要用PHP回显所有HTML。

文件顶部,您应该执行所有处理(即获取,验证数据)并在余下中执行所有操作写纯HTML ,只用PHP打印值。

这已经给你一定程度的分离。其他人提到模板引擎(Smarty等)。我不认为你真的需要它,因为PHP本身就是一个模板引擎 只是不要试图在演示文稿中做复杂的事情;)

alternative syntax for control structures对于与演示文稿结合使用非常有用,因为它更具可读性。


我稍微更改了表结构,因为你不是生成有效的HTML(你在原始代码中创建了大量具有相同ID的表)。
这只会生成一个表,每个客户都有一行。

<?php
$customers = array();
$query1 = mysql_send("SELECT firstname, lastname, email, user, country FROM customers WHERE id='".$_COOKIE['custid']."'");

while ($row = mysql_fetch_array($query1)) {
    $cusomters[] = $row;
}
?>

<table id="account_table" style="width:550px; border:none;">
    <tr>
       <th width="155">Contact Name</th>
       <th>Email Address</th>
       <th>Username</th>
       <th>Country</th>
       <th>Time Zone</th>
       <th>Activated</th>
    </tr>
<?php foreach($customers as $customer): ?>
    <tr>           
        <td width="335">
             <?php echo $row['firstname'] ?>
             &nbsp;
             <?php echo $row['lastname'] ?>
        </td>          
        <td><?php echo $row['email'] ?> </td>     
        <td><?php echo $row['user'] ?></td>           
        <td><?php echo $row['country'] ?></td>
        <td>GMT+1</td>
        <td>16 Dec 2009</td>
    </tr>
<?php endforeach; ?>
</table>

答案 2 :(得分:0)

基本看起来是正确的,虽然您需要将<table>标签移出while循环,现在您要为每个条目创建一个表格,我的猜测是这不是您想要的。“ / p>

您还需要使用类似htmlspecialchars($row[...])的内容准备输出以输出到浏览器。这样,如果输出包含html标签(javascript等),就可以避免潜在的问题。

答案 3 :(得分:0)

首先提出一些建议,保持窗口/标签对php手册开放。 (即,mysql_send()函数不存在)。

缩进代码,并尝试找到一致的约定来保持代码的可读性。

您正在将表标记插入到while循环中,这是错误的。你的桌子应该包裹你的循环。

使用$ _COOKIE从数据库中进行选择真的不好。过滤并清理您的输入,然后在任何查询中使用它。

为避免混合数据表示和业务逻辑,您可以查看模板引擎。

查看19 Promising PHP Template Engines查找一个,或查看wikipedia list