2013-03-21 3 views
0

У меня есть этот код:Populate выберите меню из PHP/MySQL, используя массив яваскрипта

<script> 
var values = <?php 
$sql="SELECT * FROM billing_sagenominalcodes order by code ASC"; 
$rs=mysql_query($sql,$conn) or die(mysql_error()); 
$nominalcodes = array(); 
while($result=mysql_fetch_assoc($rs)) 
{ 
    $nominalcodes[] = $result['code']; 
} 
echo json_encode($nominalcodes); 
?>; 
</script> 

<select name="sagenominalcode" id="sagenominalcode"> 
<script>addOptions(document.getElementById('sagenominalcode'), values);</script> 
</select> 

работает точно так, как мне нужно это, но мне интересно, если это возможно, чтобы отобразить имя столбца «имя» из база данных в вариантах выбора, а также код?

, например, а не просто

, чтобы он, как этот

123 - имя

+0

Пожалуйста, используйте ** [PDO] (http://php.net/manual/en/book.pdo.php) ** вместо функций 'mysql_ *', поскольку они устарели от версии 5.5 –

+0

я сделаю - это именно то, что у меня есть на данный момент - любые идеи на нем? – 2013-03-21 00:19:16

+1

Я не знаю, что делает функция Js 'addOptions', но кажется, что если вы увеличиваете эту строку' $ namescodes [] = $ result ['code']. '-'. $ result ['name']; 'вы будете ближе к вашему желаемому результату. –

ответ

0

Вы хотите жестко отделить PHP и ваши JS. Способ написания кода будет работать как есть, но очень хрупкий, и может катастрофически разрушаться, что приводит к ошибкам стиля action-at-a-distance.

Например, если ваша схема базы данных была реорганизована, чтобы удалить столбец code, тогда ваш javascript будет отображаться как сломанный, с причиной, о которой никто не подозревал бы.


Это сказало, если вы хотите также отображать данные в столбце name в некоторых вариантах, вы должны передать эти данные в $nominalcodes, а также. Прямо сейчас он содержит индексированный массив данных (возможно, int или string), но вы захотите изменить его так, чтобы он содержал индексированный массив массивов.

Итак, перед:

$nominalcodes = array(1,3,5,78,3,2,234); 

и после того, как:

$nominalcodes = array(
    array(1, 'foobar'), 
    array(3, 'larry'), 
    array(5, 'bob'), 
    ... 
); 

На данный момент, вы должны реорганизовать функцию Javascript addOptions, чтобы он мог правильно разобрать массив массивов, вместо массива одиночных значений.

Смежные вопросы