|
|
|
| Как создать в php поле со списком, строки в который должны загружаться при помощи переменных (из массива, например)? | |
|
|
|
|
|
|
|
для: Andrey_V
(06.01.2006 в 14:40)
| | Можно поступить следующим образом
<?php
$arr[1] = "Первый";
$arr[2] = "Второй";
$arr[3] = "Третий";
$arr[4] = "Четвёртый";
if(count($arr) > 0)
{
echo "<select name=id_catalog onchange='show(this.form.id_catalog)'>";
echo "<option value=0>Не имеет значения</option>";
foreach($arr as $index => $value)
{
echo "<option value=$index>$value</option>";
}
echo "</select>";
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(06.01.2006 в 15:03)
| | Спасибо!
А как теперь выбранную позицию поместить в переменную? | |
|
|
|
|
|
|
|
для: Andrey_V
(06.01.2006 в 15:10)
| | Не очень понятно что имеется ввиду - в обработчике HTML-формы? Обработчик будет находится в этой же файле или в другом? Другими словами какая у вас цель, что вы делаете? | |
|
|
|
|
|
|
|
для: cheops
(06.01.2006 в 15:21)
| | Есть php файл. В нем запрос к базе mysql? потом идет вывод в таблицу на экран. Теперь надо, чтобы в поле со списком выбирался критерий, после этого записи из mysql должны выводиться с учетом этого критерия | |
|
|
|
|
|
|
|
для: Andrey_V
(06.01.2006 в 15:25)
| | Возможо вам подойдёт следующий скрипт
<html>
<head>
</head>
<body>
<?php
$arr[1] = "Первый";
$arr[2] = "Второй";
$arr[3] = "Третий";
$arr[4] = "Четвёртый";
echo "<form name=form method=post>";
if(count($arr) > 0)
{
echo "<select name=id_catalog onchange='this.form.submit()'>";
echo "<option value=0>Не имеет значения</option>";
foreach($arr as $index => $value)
{
echo "<option value=$index>$value</option>";
}
echo "</select>";
}
echo "</form>";
echo $_POST['id_catalog'];
?>
</body>
</html>
|
$_POST['id_catalog'] - содержит выбранный индекс или 0, если ничего не выбрано. Только перед использованием его в SQL-запросе проверьте, чтобы $_POST['id_catalog'] был целочисленным
<?php
if(!preg_match("|^[\d]+$|",$_POST['id_catalog']) && !empty($_POST['id_catalog'])) exit("Недопустимый параметр");
?>
|
иначе будет возможна SQL-инъекция. | |
|
|
|
|
|
|
|
для: cheops
(06.01.2006 в 15:33)
| | Сейчас буду пробовать. Большое спасибо! | |
|
|
|
|
|
|
|
для: Andrey_V
(06.01.2006 в 15:40)
| | Спасибо еще раз!
Все замечательно получилось. Только 2 непонятные вещи:
- при выборе позиции, используемой по умолчанию не задается никакого значения списку и не проиходит обновление;
- после обновления список не хочет вставать на выбранную перед обновлением позицию, а выводит снова позицию по умолчанию.
Что-нибудь можно сделать? | |
|
|
|
|
|
|
|
для: Andrey_V
(06.01.2006 в 16:26)
| | 1) Вы ведь можете изменять значение $_POST['id_catalog'] сами как вам заблагорассудится, в том числе и назначать ему значение по умолчанию, если ничего не выбрано или это первая загрузка скрипта
<?php
if(empty($_POST['id_catalog'])) $_POST['id_catalog'] = 0;
?>
|
2) Для этого следует воспользоваться ключевым словом selected, который нужно присвоить выбранному полю.
Объединяя можно получить новый скрипт:
<html>
<head>
</head>
<body>
<?php
$arr[1] = "Первый";
$arr[2] = "Второй";
$arr[3] = "Третий";
$arr[4] = "Четвёртый";
echo "<form name=form method=post>";
if(count($arr) > 0)
{
echo "<select name=id_catalog onchange='this.form.submit()'>";
echo "<option value=0>Не имеет значения</option>";
foreach($arr as $index => $value)
{
if($index == $_POST['id_catalog']) $selected = "selected";
else $selected = "";
echo "<option value=$index $selected>$value</option>";
}
echo "</select>";
}
echo "</form>";
// Если ничего не выбрано - выбираем значение по умолчанию
if(empty($_POST['id_catalog'])) $_POST['id_catalog'] = 0;
echo $_POST['id_catalog'];
?>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: cheops
(06.01.2006 в 16:44)
| | Спасибо. Сейчас попробую | |
|
|
|
|
|
|
|
для: Andrey_V
(06.01.2006 в 16:59)
| | Спасибо. Все получилось.
Еще вопрос появился.
Я ставлю три таких блока для выбора. Они у меня располагаются один под другим. А как сделать, чтобы располагались в одной строке? | |
|
|
|
|
|
|
|
для: Andrey_V
(06.01.2006 в 17:07)
| | Это всё дело делается для html, код выглядит вот так:
<select name="select">
</select>
<select name="select2">
</select>
<select name="select3">
</select>
|
| |
|
|
|
|
|
|
|
для: Эдуард
(06.01.2006 в 17:23)
| | Сейчас попробую.
А пока выяснилось: все три списка влияют друг на друга. Т.е., если в одном выбираем второй пункт, то и в других тоже сразу выбирается второй пункт.
Можно это как-то исправить? | |
|
|
|
|
|
|
|
для: Andrey_V
(06.01.2006 в 17:32)
| | Не должно так быть. | |
|
|
|
|
|
|
|
для: Эдуард
(06.01.2006 в 17:23)
| | А тут что-то не понял. Куда и как здесь надо вносить php блоки? Это я имею в виду перечень трех блоков select в HTML | |
|
|
|
|
|
|
|
для: Andrey_V
(06.01.2006 в 17:39)
| | Списки как надо расположил.
Остался только вопрос, как сделать, чтобы три поля со списком не влияли друг на друга | |
|
|
|
|
|
|
|
для: Andrey_V
(06.01.2006 в 19:23)
| | Прикрепите к посту то, что у вас получилось - если списки влияют друг на друга - это не нормально... | |
|
|
|
|
|
|
|
для: cheops
(06.01.2006 в 21:11)
| | Да там скорее всего перепутались одинаковые переменные php и всего-то. Надо проверить. | |
|
|
|
|
|
|
|
для: Futurer
(07.01.2006 в 02:18)
| | Да. Переменные-то одинаковые.
Пробую поменять имена, но что-то не помогает. Покажите, пожалуйста, какие переменные надо поменять. Во первом блоке - добавлением к имени переменной _2, а во втором блоке _3
==================================================================
<?php
$arr_2[1] = "Краткий";
$arr_2[2] = "Страницы";
echo "<form name=form method=post>";
if(count($arr_2) > 0)
{
echo "<select name=id_catalog onchange='this.form.submit()'>";
echo "<option value=0>Таблица</option>";
foreach($arr_2 as $index => $value)
{
if($index == $_POST['id_catalog']) $selected = "selected";
else $selected = "";
echo "<option value=$index $selected>$value</option>";
}
echo "</select>";
}
echo "</form>";
// Если ничего не выбрано - выбираем значение по умолчанию
if(empty($_POST['id_catalog'])) $_POST['id_catalog'] = 0;
//-----------------------------------------------------
//Задание порядка сортировки
$arr_3[1] = "Производитель";
$arr_3[2] = "Цена";
echo "<form name=form method=post>";
if(count($arr_3) > 0)
{
echo "<select name=id_catalog onchange='this.form.submit()'>";
echo "<option value=0>Наименование</option>";
foreach($arr_3 as $index => $value)
{
if($index == $_POST['id_catalog']) $selected = "selected";
else $selected = "";
echo "<option value=$index $selected>$value</option>";
}
echo "</select>";
}
echo "</form>";
// Если ничего не выбрано - выбираем значение по умолчанию
if(empty($_POST['id_catalog'])) $_POST['id_catalog'] = 0;
?>
================================================================== | |
|
|
|
|
|
|
|
для: Andrey_V
(07.01.2006 в 12:12)
| | Атрибут name у каждого из select должен быть уникальным - иначе как вы их друг от друга отличите... | |
|
|
|
|
|
|
|
для: cheops
(07.01.2006 в 13:37)
| | Поменял (выделено жирным).
Результат. Когда меняем что-то в одном списке в другом ничего не меняется.
Но!
Если переходим в другой список, то предыдущий сразу сбрасывается в ноль (переходит на значение по умолчанию)
Вывел внизу два эха, чтобы нагляднее было видно. Может быть попробуете у себя? А то у меня скоро мозги расплавятся
===================================
<?php
$arr_2[1] = "Краткий";
$arr_2[2] = "Страницы";
echo "<form name=first method=post>";
if(count($arr_2) > 0)
{
echo "<select name=id_catalog_2 onchange='this.form.submit()'>";
echo "<option value=0>Таблица</option>";
foreach($arr_2 as $index => $value)
{
if($index == $_POST['id_catalog_2']) $selected = "selected";
else $selected = "";
echo "<option value=$index $selected>$value</option>";
}
echo "</select>";
}
echo "</form>";
// Если ничего не выбрано - выбираем значение по умолчанию
if(empty($_POST['id_catalog_2'])) $_POST['id_catalog_2'] = 0;
//-----------------------------------------------------
//Задание порядка сортировки
$arr_3[1] = "Производитель";
$arr_3[2] = "Цена";
echo "<form name=second method=post>";
if(count($arr_3) > 0)
{
echo "<select name=id_catalog_3 onchange='this.form.submit()'>";
echo "<option value=0>Наименование</option>";
foreach($arr_3 as $index => $value)
{
if($index == $_POST['id_catalog_3']) $selected = "selected";
else $selected = "";
echo "<option value=$index $selected>$value</option>";
}
echo "</select>";
}
echo "</form>";
// Если ничего не выбрано - выбираем значение по умолчанию
if(empty($_POST['id_catalog_3'])) $_POST['id_catalog_3'] = 0;
echo "Первый: ".$_POST['id_catalog_2'];
echo "Второй: ".$_POST['id_catalog_3'];
?>
============= | |
|
|
|
|
|
|
|
для: Andrey_V
(07.01.2006 в 15:13)
| | Уберите событие onchange='this.form.submit()' во всех <select> и поставьте в HTML-форме обычную кнопку. | |
|
|
|
|
|
|
|
для: cheops
(07.01.2006 в 20:24)
| | Первую часть по удалению сделал своими руками.
А как добавить обычную кнопку? | |
|
|
|
|
|
|
|
для: Andrey_V
(07.01.2006 в 21:31)
| | Поставил кнопочку. Но там опять какие-то заморочки. Попробовал всяко-разноэ И получился приемлимый вариант таким:
в первом select оставил
onchange='this.form.submit()'
| / во стором и третьем - убрал. Стало все срабатывать нормально. Конечно есть небольшое неудобство: страница обновляется при выборе только в первом select/ Зато все остальное работает нормально. Т.е. первый select - выбор раздела товаров и услуг, второй и третий - представление(кратко-полно) и сортировка. Так теперь при изменении представления и сортировки никаких действий не производится, но когда изменяем раздел товаров и услуг - все изменяется, а правильный выбор в select(ах) остается.
Конечно, хотелось бы, чтобы обновление происходило при всех выборах, но это все-таки решение на 90 процентов.
Если вдруг мелькнут какие-то мысли по решению такой проблемы - сообщите, пожалуйста!
Большое спасибо за очень ценные и очень конкретные советы!!! | |
|
|
|