php
  • mysql
  • simplification
  • 2010-05-17 118 views 2 likes 
    2

    我相對較新的PHP,並有一種感覺,我很長一段時間顯示數據從MySQL。需要幫助簡化我的php表

    我有一張桌子我想從我的數據庫中顯示幾個字段。

    我該如何實現這一點,而不必回顯表中的每一位?

    下面是代碼:

     <?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>'; 
    
          } 
    ?> 
    

    回答

    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> 
    
    +0

    +1替代語法推薦 – 2010-05-17 21:22:24

    4

    我會建議看一些模板引擎就像Smarty,這將允許你從PHP代碼單獨介紹。

    +3

    +1,但我認爲Smarty是矯枉過正。 PHP可以完美地用於模板。 ob_ *家庭是你的朋友。 – Artefacto 2010-05-17 21:35:42

    0

    雖然您需要將<table>標記移出while循環,但您現在正在爲每個條目創建一個表,並且我的猜測是那不是您想要的,基本看起來是正確的。

    您還需要準備輸出到瀏覽器的輸出,例如htmlspecialchars($row[...])。這樣你可以避免潛在的問題,如果輸出包含html標籤(javascript等)。

    0

    首先提出一些建議,保持一個窗口/標籤打開php手冊。 (即,mysql_send()函數不存在)。

    縮進代碼,並嘗試找到一致的約定來保持代碼的可讀性。

    您正在將您的表格標記插入您的while循環中,這是錯誤的。你的桌子應該包裹你的循環。

    使用$ _COOKIE作爲從您的數據庫中選擇是確實不好。過濾和消毒您的輸入,然後在任何查詢中使用它。

    爲避免混合數據表示和業務邏輯,您可以看看模板引擎。

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

    相關問題