2010-09-21 3 views
0

Я пытаюсь заполнить список выбора HTML, используя массив имен клиентов. Я использую следующий код, но он не работает. У меня есть функция, которая запрашивает базу данных SQL Server и получает имена. Я знаю, что это прекрасно работает, поскольку я использую его в другом коде, по какой-то причине, когда я пытаюсь заполнить список выбора, он становится пустым. Было бы лучше или эффективнее использовать цикл for? Каков наилучший способ сделать это?Заполнение списка выбора HTML из массива PHP

<select name="customers"> 
    <?php 
    $custNames = getCustomers(); 
    foreach($custNames as $customers){ 
     echo '<option value="' . $customers . '">' . $customers . '</option>'; 
    } 
    ?> 
</select> 
+0

Что вы видите, когда вы var_dump() $ custNames? Это может быть многомерный массив или просто не то, что вы думаете –

ответ

3

Вы пробовали делать print_r() или var_dump() из $custNames. В вашем цикле foreach нет ничего плохого, поэтому, скорее всего, функция getCustomers() возвращает не-массив или пустой массив.

И, конечно, будьте очень осторожны, вставляя текст таким образом. Один двойная кавычка в любом из имен клиентов будет шланг вашей формы:

<option value="John "The Unknown" Doe">John "The Unknown" Doe</option> 

По крайней мере, передать часть значения через htmlspecialchars(), чтобы сделать его немного безопаснее.

+0

+1 для htmlspecialchars() –

+0

Спасибо за помощь, я нашел, когда я использовал var_dump, что он вернулся пустым, когда я смотрел дальше назад, я нашел ошибка в моем вводе, которая не включала мои функции. Это была легкая ошибка, но когда вы какое-то время смотрели на меня, я пропустил это несколько раз. Спасибо за помощь, я ценю это! – Drewdin

+0

Спасибо за отзыв на htmlspecialchars() также! – Drewdin

0

foreach петля прекрасно, при условии, что getCustomers() возвращает массив (или, более конкретно, объект, который реализует интерфейс Traversable). Вы можете сделать var_dump($custNames);, чтобы проверить, что у вас есть массив, иначе вы, вероятно, захотите изменить функцию getCustomers(), чтобы вернуть массив.