Рефакторинг кода?

268
02 ноября 2017, 07:57

Как можно сократить и привести в порядок код?

<form method="post" action="date_filter.php">
     <select name="dateFirst">
     <?php
     while($row_res = $res->fetch_assoc()) {
     ?>
     <option value="<?php echo $row_res['date']; ?>"><?php echo $row_res['date']; ?></option>
     <?php } ?>
     </select>
     <select name="dateLast">
     <?php
     while($row_res2 = $res->fetch_assoc()) {
     ?>
          <option value="<?php echo $row_res2['date']; ?>"><?php echo $row_res2['date']; ?></option>
     <?php } ?>
</select>
<input type="submit" name="submit" value="Выбрать">
</form>
Answer 1

Как можно сократить и привести в порядок код?

Можно написать хэлпер для использование в видах, чтобы улучшить читабельность и уменьшить дублирование кода:

<form method="post" action="date_filter.php">
    <select name="dateFirst">
        <?php
            print getOptions($source, [
             'value' => 'date',
             'text'  => 'date'
            ]);
        ?>
    </select>
    <select name="dateLast">
        <?php
            print getOptions($source, [
             'value' => 'date',
             'text'  => 'date'
            ]);
        ?>
    </select>
    <input type="submit" name="submit" value="Выбрать">
</form>
<?php
function getOptions(array $source, array $keys)
{
    $options = ""
    for ($i = 0, $len = count($source); $i < $len; ++$i)
    {
        $options .= sprintf('<option value="%s">%s</option>',
            htmlspecialchars($source[$keys['value']]),
            htmlspecialchars($source[$keys['text']], ENT_NOQUOTES)
        );
    }
    return $options;
}
Answer 2

Ну можно и так в вашем случае.
Но лучше, конечно же, передавать массив вторым аргументом.

<form method="post" action="date_filter.php">
     <?php echo createSelect('dateFirst', $res) ?>
     <?php echo createSelect('dateLast', $res2) ?>
<input type="submit" name="submit" value="Выбрать">
</form>
<?php
function createSelect ($name, $res) {
    $html = '<select name="' . $name .'">';
    while($row_res = $res->fetch_assoc()) {
        $html .= "\t<option value=\"" . $row_res['date'] .'">' . $row_res['date'] . "</option>\n";
    }
    $html .= '</select>';
    return $html;
}
Answer 3

Предлагаю такой вариант:

<form method="post" action="date_filter.php">
     <select name="dateFirst">
     <?php
       while ($row_res = $res->fetch_assoc()) {
         echo '<option value="', $row_res['date'], '">', $row_res['date'], '</option>';
       }
     ?>
     </select>
     <select name="dateLast">
     <?php
       while ($row_res2 = $res->fetch_assoc()) {
          echo '<option value="', $row_res2['date'], '">', $row_res2['date'], '</option>';
       }
     ?>
     </select>
     <input type="submit" name="submit" value="Выбрать">
</form>

Конструкцию echo хорошо использовать при выводе коротких данных, причём вместо оператора присваивания нужно указывать значения через запятую, как аргументы. Это понижает вычислительные затраты.

READ ALSO
Отображение сотых, даже если 00

Отображение сотых, даже если 00

Как вывести число с сотыми, если число уже к примеру: 52, чтобы вывести 5200?

208
Вывод изображения из файла на PHP

Вывод изображения из файла на PHP

Есть изображение: *png, нужно вывести изображение с помощью PHP

226
Сложный запрос на MySql

Сложный запрос на MySql

Добрый день! Есть две таблицы, product и image

163