Fi1osof 31 августа 2014 0 0
Наверняка многие, кто хоть чуть-чуть знает php, знает и замечательную функцию explode(). Она разбивает строку с указанным разделителем на элементы массива. И вот давайте рассмотрим типичную конструкцию:

/* Конвертировать значения через запятую в массив */
$items = explode(',', $items);

/* Создание внутреннего HTML */
foreach ($items as $item) {
$item = trim($item);
$output .= "\n" . "<option value=\"{$item}\">{$item}</option>");
}


В чем же здесь ошибка? Здесь логическая ошибка - не проверяется на отсутствие значения $items.
Чем это чревато? Тем, что как минимум один цикл foreach обязательно выполнится. Почему? Потому что explode всегда вернет массив минимум с одним, хоть и пустым элементом. Но пустое будет значение у этого элемента, но сам элемент будет, а значит массив уже не пустой. Вот попробуйте выполнить вот эту конструкцию:
print "<pre>";
$s = '';
var_dump($s);

$s = explode(",", $s);
var_dump($s);

print count($s);

foreach($s as $f){
var_dump($f);
}


Результатом такой ошибки будет, к примеру, вот такой код:
<select name="size"><option value="">Выбрать размер</option>
<option value=""></option>
</select>

Как видите, здесь есть пустой элемент option.
0 комментариев
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.