2

私は 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

4 に答える 4

4

Smartyのようなテンプレートエンジンを検討することをお勧めします。これにより、プレゼンテーションをphpコードから分離できます。

于 2010-05-17T20:49:56.717 に答える
3

最初にすべてのデータを配列にフェッチしてから、その配列を反復処理できます。その HTML をすべて PHP でエコーする必要はありません。

ファイルの先頭ですべての処理(つまり、データの取得、検証) を行い、残りは単純な HTMLを記述し、値を PHP で出力するだけです。

これにより、すでにある程度の分離が得られます。テンプレート エンジン (Smarty など) について言及する人もいます。PHP自体はテンプレートエンジンなので、本当に必要だとは思いません。
プレゼンテーションで洗練されたものを作りたがらないでください ;)

また、制御構造の代替構文は、はるかに読みやすいので、プレゼンテーションと組み合わせて使用​​ するのに非常に役立ちます。


有効な HTML を生成していなかったため、テーブル構造を少し変更しました (元のコードで同じ ID を持つ多くのテーブルを作成します)。
これにより、顧客ごとに 1 つの行を含む 1 つのテーブルが生成されるだけです。

<?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>
于 2010-05-17T20:54:23.470 に答える
0

タグを while ループの外に移動する必要がありますが、基本は正しいように見えますが<table>、今ではすべてのエントリのテーブルを作成していますが、それはあなたが望むものではないと思います。

また、次のような方法で、ブラウザへの出力用に出力を準備する必要がありますhtmlspecialchars($row[...])。そうすれば、出力に html タグ (javascript など) が含まれている場合に発生する可能性のある問題を回避できます。

于 2010-05-17T20:52:17.360 に答える
0

最初にいくつかのアドバイスとして、php マニュアルに対してウィンドウ/タブを開いたままにします。(つまり、mysql_send() 関数は存在しません)。

コードをインデントし、一貫した規則を見つけてコードを読みやすくします。

whileテーブルのマークアップをループに挿入していますが、これは間違っています。テーブルはループをラップする必要があります。

データベースから選択するために $_COOKIE をそのまま使用するのは非常に悪いことです。任意のクエリで使用する前に、入力をフィルタリングしてサニタイズします。

データ プレゼンテーションとビジネス ロジックの混在を避けるために、テンプレート エンジンを検討できます。

19 の有望な PHP テンプレート エンジンを参照するか、ウィキペディアのリストを参照してください。

于 2010-05-17T20:56:21.643 に答える