PHP + HTML (Помогите с тегом <SELECT>)

Модератор: Модераторы разделов

Аватара пользователя
Dimon93rus
Сообщения: 428
Статус: Kernel Killer

PHP + HTML

Сообщение Dimon93rus »

Всем здрасте....
В общем ситуация такая:
Есть 2 списка (теги SELECT)
В первом списке кол-во зиписей динамическое, во 2-м фиксированное.....
Обновление страницы (с учётом выбранных значений) происходит, после выбора во втором списке....
После обновления, происходят все нужные мне действия, но значения, этих select'ов сбрасываются на исходные...
Подскажите как сделать правильнее чтобы выбранные значения после обновления страницы оставались те же....
Вот кусочек кода:

Код:

echo "Список учащихся группы $gn <br>"; printf("<form name='events' method='post' action='%s?type=%s&id=%s&gn=%s'><table border=1><tr><td>Предмет</td><td>Варианты</td></tr><tr><td>", $PHP_SELF,$type,$id,$gn); if ($subj_row = mysql_fetch_array($subj)) { echo "<SELECT NAME='subj_sel'>"; do { printf ("<OPTION VALUE='%s'>%s</OPTION>",$subj_row["id_sub"],$subj_row["name_sub"]); } while ($subj_row = mysql_fetch_array($subj)); echo "</SELECT>"; } echo "</td><td><SELECT NAME='type' onchange='events.submit()'> <OPTION VALUE='h_point'>Контр. точка</OPTION> <OPTION VALUE='h_zch'>Зачёт</OPTION> <OPTION VALUE='h_ekz'>Экзамен</OPTION> <OPTION VALUE='h_test'>Тестирование</OPTION> <OPTION VALUE='h_attest'>Аттестация</OPTION> <OPTION VALUE='h_kurs'>Курсовая</OPTION> </SELECT></td></tr></table></form>"; echo "<form name='stlist' method='post' action='".$PHP_SELF."'>"; if ($type == 'h_point') { echo "<table border='1' cellspacing='0'><tr><td>Студент</td><td>Рейтинг</td></tr>"; do { printf("<tr><td>%s %s %s<input type='hidden' name='%s' value='%s'><td><input type='text' name='input%s'></td></tr>", $stud_row["surename"], $stud_row["name"],$stud_row["lastname"], $stud_row["id"],$stud_row["id"],$stud_row["id"]); } while ($stud_row = mysql_fetch_array($stud)); echo "</table>"; if ($type == 'h_zch') { bla-bla-bla } .....и т.д для всех значений $type }
Ubuntu Server 10.04 x86, Calculate Linux 11.6 x86
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: PHP + HTML

Сообщение sergio »

Что-то вроде <OPTION VALUE='%s' selected> если %s == выбранное значение...
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
Аватара пользователя
Dimon93rus
Сообщения: 428
Статус: Kernel Killer

Re: PHP + HTML

Сообщение Dimon93rus »

sergio писал(а):
24.05.2008 01:10
Что-то вроде <OPTION VALUE='%s' selected> если %s == выбранное значение...

Я понимаю что SELECTED, но как сделать чтобы оно вствалялось в ту позицию, которуя я выбираю?
Ubuntu Server 10.04 x86, Calculate Linux 11.6 x86
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: PHP + HTML

Сообщение sergio »

Dimon93rus писал(а):
24.05.2008 09:17
sergio писал(а):
24.05.2008 01:10
Что-то вроде <OPTION VALUE='%s' selected> если %s == выбранное значение...

Я понимаю что SELECTED, но как сделать чтобы оно вствалялось в ту позицию, которуя я выбираю?

А РНР вам на что?
Обновление страницы (с учётом выбранных значений) происходит, после выбора во втором списке....
После обновления, происходят все нужные мне действия, но значения, этих select'ов сбрасываются на исходные...

Если после выбора происходит обновление страницы, вот и выведите код первого селекта пхп с селектед напротив выбранного значения. Альтернатива - использовать JS, установить нужное значение им. Менее универсально, поскольку скрипт может быть и выключен, но в 99% работать будет.

Поскольку сегодня "происходит обновление" в ХТМЛ ровным счетом ничего не объясняющая фраза - на дворе не 1996ой год, есть очень много способов что-либо "обновить", - то более точные инструкции при подобной постановке вопроса вы вряд ли получите.

Ну вот, вижу onchange='events.submit() во "втором селекте". Значит, видимо, страница перегружается, а выбранное значение доступно на сервере пхп скрипту. Так в чем проблема?
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
Аватара пользователя
Dimon93rus
Сообщения: 428
Статус: Kernel Killer

Re: PHP + HTML

Сообщение Dimon93rus »

В общем для первого сделал так:

Код:

echo "<SELECT NAME='subj_sel'>"; do { if ($subj_sel == $subj_row["id_sub"]) { $selected = "SELECTED"; } else { $selected = ""; } printf ("<OPTION $selected VALUE='%s'>%s</OPTION>",$subj_row["id_sub"],$subj_row["name_sub"]); } while ($subj_row = mysql_fetch_array($subj)); echo "</SELECT>"; }

А вот со вторым проблема, он у меня статический, поэтому у меня есть такая идея, создать массив, а топом функцией foreach() проверить значения:

Код:

$arr = array( "name" => array("h_point","h_zch","h_ekz","h_test","h_attest","h_kurs"), "value" => array("Контр.точка","Зачёт","Экзамен","Тестирование","Аттестация","Курсовая")); echo "</td><td><SELECT NAME='type' onchange='this.form.submit()'>"; foreach ($arr['name'] as $n => $nam) { if ($type == $nam) { $selected = "SELECTED"; } else { $selected = ""; } echo "<OPTION $selected VALUE='$nam'>$nam</OPTION>"; } echo "</SELECT></form>";

Так работает (хотя на мой взгляд как-то не красиво), но есть одно НО можно ли как-нибудь сделать чтобы foreach() проходил сразу по двум массивам. Потому что в моём случае получается так , что в списке присутствуют их значения а не "описания" (в массиве $arr['name'] - значения, в $arr['value'] - описание)
Ubuntu Server 10.04 x86, Calculate Linux 11.6 x86
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: PHP + HTML

Сообщение Voice »

Маленькие замечания:
1. Все теги пишутся маленькими буквами (<select>...</select>)
2. Вместо <option selected> нужно писать <option selected="selected">
Это требования новых стандартов.

Dimon93rus писал(а):
24.05.2008 14:49
Так работает (хотя на мой взгляд как-то не красиво), но есть одно НО можно ли как-нибудь сделать чтобы foreach() проходил сразу по двум массивам. Потому что в моём случае получается так , что в списке присутствуют их значения а не "описания" (в массиве $arr['name'] - значения, в $arr['value'] - описание)

А что мешает вместо foreach for использовать?
Еще можете в document.onload засунуть код, который и выставит во втором выделенный пункт ;)
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: PHP + HTML

Сообщение Voice »

Извините, но это уже совсем индусский код :)
Dimon93rus писал(а):
24.05.2008 14:49

Код:

$arr = array( "name" => array("h_point","h_zch","h_ekz","h_test","h_attest","h_kurs"), "value" => array("Контр.точка","Зачёт","Экзамен","Тестирование","Аттестация","Курсовая"));

Лучше так:

Код:

$arr = array( "h_point" => "Контр.точка", "h_zch" => "Зачёт", "h_ekz" => "Экзамен", "h_test" => "Тестирование", "h_attest" => "Аттестация", "h_kurs" => "Курсовая" ); $selected = "h_test"; foreach($arr as $value => $text) { if($value == $selected) $foo = 'selected="selecetd"'; else $foo = ''; echo "<option value=\"{$value}\" {$foo}>{$text}</option>"; }
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
Аватара пользователя
Dimon93rus
Сообщения: 428
Статус: Kernel Killer

Re: PHP + HTML

Сообщение Dimon93rus »

Спасибо за ответы. Я сделал вот как, что скажите?

Код:

echo "<select name='type' onchange='this.form.submit()'> <option ".($type=='h_point' ? 'selected="selected"' : '')." value='h_point'>Контр. точка</option> <option ".($type=='h_zch' ? 'selected="selected"' : '')." value='h_zch'>Зачёт</option> <option ".($type=='h_ekz' ? 'selected="selected"' : '')." value='h_ekz'>Экзамен</option> <option ".($type=='h_test' ? 'selected="selected"' : '')." value='h_test'>Тестирование</option> <option ".($type=='h_attest' ? 'selected="selected"' : '')." value='h_attest'>Аттестация</option> <option ".($type=='h_kurs' ? 'selected="selected"' : '')." value='h_kurs'>Курсовая</option> </select>";
Ubuntu Server 10.04 x86, Calculate Linux 11.6 x86
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: PHP + HTML

Сообщение Voice »

Оно то так, но нужно стараться отделить HTML от кода.
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
Аватара пользователя
Dimon93rus
Сообщения: 428
Статус: Kernel Killer

Re: PHP + HTML

Сообщение Dimon93rus »

Voice писал(а):
26.05.2008 11:22
Оно то так, но нужно стараться отделить HTML от кода.

Спасибо, учту на будущее :)

В общем, тема решена, можно закрывать...
Ubuntu Server 10.04 x86, Calculate Linux 11.6 x86
Спасибо сказали: