2013-03-15 2 views
-2

Когда я создаю элементы в некоторых местах, я верну html-код. Лучше ли функция возвращать массив, а затем создавать html для каждого элемента в списке или таблице после или иметь html как часть функции?php function и 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>"; 
} 
+0

Я думаю, что функция всегда возвращает некоторые значения - это хорошо. Назначьте html переменной и верните переменную в конец. –

+0

Я думаю, что лучше будет возвращать массив, а затем создать html из него ... потому что, по моему мнению, это значительно упростит понимание. – alwaysLearn

+0

По-моему, это зависит от того, что вы используете для , Если таблица отображается только в одном месте и только в одном месте, верните массив. Если вы показываете таблицу повсюду, может быть с разными данными, используйте ее с html. –

ответ

2
  • Функция должна возвращать вообще что-то вместо echo -ную
  • Функция обычно не должна генерировать HTML-код, а скорее возвращать данные (например, массив ценностей es), чем тогда можно использовать в представлениях (определенные части приложения, которые генерируют только HTML). Взгляните на Model-View-Controller architecture, чтобы получить представление о том, как разделить проблемы.
  • PHP был создан для использования в качестве языка шаблонного, так что вместо того, чтобы генерировать HTML путем объединения строк, вы должны использовать что-то вроде:

    <table> 
        <?php foreach (failedScansTable() as $entry): ?> 
         <tr> ... </tr> 
        <?php endforeach ?> 
    </table> 
    
  • Вы не должны использовать mysql_* функции больше, так как они официально устарели. Вместо этого рассмотрите PDO.

  • Всегда избегайте частей, которые вы добавляете к своему коду.
    • Вы должны бежать $eventId перед добавлением его в код SQL (mysql_real_escape_string() или, гораздо лучше, PDO)
    • Вы должны бежать $totalErrors перед добавлением его в HTML-код (htmlspecialchars())
+0

Спасибо за информацию. Я изучаю PDO. Обычно я проверяю добавленную строку, но это пример, а не функция, которую я бы использовал, кроме меня. Почему нет эхо или html-кода? это из-за функциональности? Я буду использовать эту функцию только для создания таблицы, чтобы информация не использовалась нигде. –

+0

@AlanDoolan, независимо от того, откуда поступают данные, вы всегда должны избегать этого. Даже если вы сами создаете данные, нередко нужен апостроф в строке, что приведет к синтаксической ошибке SQL или меньшему знаку, который не привел бы к желаемому результату в HTML. Итак, что бы вы ни делали, до тех пор, пока вы контактируете что-то с одного языка на другой, не обязательно проверяйте его, но всегда избегайте его. – rid

+0

@AlanDoolan, о 'echo'-ing, если вы спуститесь по этой дороге, ваше приложение будет составлено определенным образом, что сделает его крайне трудным для рефакторинга позже. Если это единственная функция, которую вы когда-либо будете использовать для создания HTML-кода, хотя это не очень красиво, это должно сделать трюк, но если вы планируете продлить приложение даже немного, это не сработает в долгосрочной перспективе. – rid

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); 
} 
+0

Привет, Тапас, спасибо за код. В чем преимущество этого? –

+0

класс, функции всегда используются для лучшей структуры ... –

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; 

} 
+0

Я думаю, что $ totalErrors также необходим здесь. Поэтому вы должны вернуть оба. –

+0

В чем преимущество возврата его в качестве var? –

0

Если ваш код будет расти, лучше следовать шаблону дизайна, например MVC.

Поэтому лучше отделить модель от вашего вида. Массив - это ваша модель данных; и html, который представляет собой представление ваших данных, является видом.

+0

Каково преимущество, отличное от организации на моей стороне, что будет с этим методом? будет ли он лучше функционировать? –

+0

Это действительно субъективно. MVC не всегда является наиболее подходящим методом для работы. Однако я согласен с тем, что хорошая практика заключается в том, чтобы доступ к данным был отделен от вывода. Хорошо использовать шаблон дизайна, будь то MVC или многоуровневая архитектура или что-то еще, что отделяет данные от логики представления – Mark

+0

@AlanDoolan - преимущество данных и то, как вы представляете их, развязаны. Если, например, вы хотите изменить способ его отображения, вам не нужно прикасаться к модели данных, а просто измените свой вид. Кроме того, если вы хотите протестировать свой код, гораздо проще протестировать их отдельно. – Xuan