【问题标题】:Need help simplifying my php table需要帮助简化我的 php 表
【发布时间】:2010-05-17 20:45:53
【问题描述】:

我对 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>';

            }
?>

【问题讨论】:

    标签: php mysql simplification


    【解决方案1】:

    我建议看一些模板引擎,例如Smarty,它可以让您将演示文稿与 php 代码分开。

    【讨论】:

    • +1,但我认为 Smarty 太过分了。 PHP 可以完美地用于模板。 ob_* 家人是你的朋友。
    【解决方案2】:

    您可以先将所有数据提取到一个数组中,然后再遍历该数组。无需使用 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>
    

    【讨论】:

      【解决方案3】:

      基本情况似乎是正确的,尽管您需要将 &lt;table&gt; 标记移出 while 循环,但现在您正在为每个条目创建一个表,我猜这不是您想要的。

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

      【讨论】:

        【解决方案4】:

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

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

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

        按原样使用 $_COOKIE 从您的数据库中选择是真的不好。在任何查询中使用之前过滤和清理您的输入。

        为了避免混淆数据表示和业务逻辑,你可以看看模板引擎。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-13
          • 1970-01-01
          • 2014-11-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多