-2

いくつかの場所で要素を作成すると、html コードが返されます。関数が配列を返してから、リストまたはテーブルの各項目の html を作成した後、または関数の一部として html を作成する方が良いですか?

例えば

function failedScansTable($eventId)
{
    echo "<table class='basic-table'>";
    $sql = mysql_query("SELECT total_errors FROM errors WHERE id_event = $eventId");
    while ($row = mysql_fetch_array($sql))
        {
            $totalErrors = $row['total_errors'];
            echo "<tr class='basic-table-total'><th colspan='3'>Total Rejected Scans</th><th>$totalErrors</th></tr>";
        }
    echo "</table>";
}
4

4 に答える 4

2
  • echo関数は通常、 -ingの代わりに何かを返す必要があります
  • この関数は通常、HTML コードを生成するのではなく、ビュー (HTML のみを生成するアプリケーションの特定の部分) で使用できるデータ (値の配列など) を返す必要があります。Model-View-Controller アーキテクチャを見て、懸念事項を分離する方法を理解してください。
  • PHP はテンプレート言語としても使用するために作成されたので、文字列連結によって HTML を生成する代わりに、次のようなものを使用する必要があります。

    <table>
        <?php foreach (failedScansTable() as $entry): ?>
            <tr> ... </tr>
        <?php endforeach ?>
    </table>
    
  • mysql_*関数は公式に廃止されたため、今後は使用しないでください。代わりにPDOを検討してください。

  • コードに追加する部分は常にエスケープしてください。
    • $eventIdSQLコードに追加する前にエスケープする必要があります(mysql_real_escape_string()または、はるかに良いPDO
    • $totalErrorsHTML コードに追加する前にエスケープする必要があります ( htmlspecialchars())
于 2013-03-15T10:06:26.070 に答える
1

より良い、これを試してください

function failedScansTable($eventId)
{
     $string= "<table class='basic-table'>";
     $sql = mysql_query("SELECT total_errors FROM errors WHERE id_event = $eventId");
     while ($row = mysql_fetch_array($sql))
     {
        $totalErrors = $row['total_errors'];
        $string.= "<tr class='basic-table-total'><th colspan='3'>Total Rejected Scans</th><th>$totalErrors</th></tr>";
     }
     $string.= "</table>";
     return array('html'=>$string, 'totalError'=>$totalErrors);
}
于 2013-03-15T10:02:30.607 に答える
0

これを試して :

function failedScansTable($eventId)

{

$html = "<table class='basic-table'>";

$sql = mysql_query("SELECT total_errors FROM errors WHERE id_event = $eventId");

while ($row = mysql_fetch_array($sql))

    {

        $totalErrors = $row['total_errors'];

        $html.="<tr class='basic-table-total'><th colspan='3'>Total Rejected Scans</th><th>$totalErrors</th></tr>";

    }

$html.="</table>";

return $html;

}
于 2013-03-15T10:06:18.527 に答える
0

コードが大きくなる場合は、MVCなどの設計パターンに従うことをお勧めします。

したがって、モデルをビューから分離することをお勧めします。配列はデータ モデルです。そして、データを表示する方法である html がビューです。

于 2013-03-15T10:06:56.457 に答える