|
|
|
| Проблема такая:
Есть страница со списком элементов. Элементы выводятся из Базы Данных, отображаются в таблице, фильтруются, сортируются.
Чтобы было более понятно, привожу скриншот.
База данных состоит из 2-х таблиц:
zagovor(zagovor_id, zagovor_name, zagovor_text, category_id)
zagovor_category(category_id, category_name)
|
Теперь мне нужно делать запрос для фильтрации данных по категории, но таким образом, чтобы выбранное значение оставалось выбранным в селекте(<option selected>).
Вот этого достичь никак не могу.
Вот запрос в БД, для фильтрации данных:
// Making query
if ( ($zagovor_category=="Все") && ($search_criteria=="") )
$sql_query = "SELECT * FROM zagovor, zagovor_category ".
"WHERE zagovor.category_id = zagovor_category.category_id ".
"ORDER BY ".$sorting_column." ".$sorting_order;
else if ( ($zagovor_category!="Все") && ($search_criteria=="") )
$sql_query = "SELECT * FROM zagovor, zagovor_category ".
"WHERE zagovor.category_id = zagovor_category.category_id ".
"AND zagovor.category_id = $zagovor_category ORDER BY ".$sorting_column." ".$sorting_order;
else if ( ($zagovor_category=="Все") && ($search_criteria!="") )
$sql_query = "SELECT * FROM zagovor WHERE zagovor_name LIKE '%".$search_criteria."%'";
else
$sql_query = "SELECT * FROM zagovor WHERE category_id = $zagovor_category AND zagovor_name LIKE '%".$search_criteria."%'";
$sql_total_records = mysql_query($sql_query) or die ('Error for $sql_total_records : '.mysql_error() );
mysql_close();
|
А это селект:
<input type="hidden" id="zagovor_category" name="zagovor_category" value="<?php echo $zagovor_category?>">
<select name="category_list" id="category_list" onchange="listByCategory(this)" >
<option selected value="<?php echo $zagovor_category;?"></option>
<?php while ( $list = mysql_fetch_array( $resultat ) ) { ?>
<option value="<?php print($list['category_id']);?>"><?php print($list['category_name']);?></option>
<?php } //while?>
<?php mysql_free_result($resultat);?>
</select>
|
function listByCategory(category_list){
var category_index = category_list.selectedIndex;
var category_name = category_list.options[category_index].value;
document.forms.frm_search.zagovor_category.value=category_name;
document.forms.frm_search.submit();
}
|
Вот, надеюсь понятно.
Помогите пожалуйста разобраться с этим селектом.
Спасибо.
PS:
Система отлично работала, пока всё было в одной таблице.
Я её разломал, при попытке усовершенствовать. | |
|
|
|
|
|
|
|
для: codexomega
(27.05.2006 в 19:39)
| | Обычно используют следующую конструкцию
<?php
while ($list = mysql_fetch_array( $resultat ) )
{
if($list['category_id'] == $_GET['category_id']) $selected = "selected";
else $selected = "";
echo "<option value=\"".$list['category_id']."\" $selected>".$list['category_name']."</option> ";
}
mysql_free_result($resultat);
?>
|
| |
|
|
|
|
24.4 Кб |
|
|
для: cheops
(27.05.2006 в 23:22)
| | -
Проблема решена.
Я тут пока детально пытался объяснить проблему, сам прозрел.
Изменил запрос к БД и свой селект.
Два дня ничего не мог мог сообразить, а оказалось просто.
Но в любом случае, спасибо. | |
|
|
|
|
|
|
|
для: codexomega
(27.05.2006 в 23:56)
| | Ничего не получилось, рано похвастался.
Просто использовал сессии, для хранения выбранного заначения, и селект у меня содержал только имена без ID.
Теперь вот на другой странице, с использованием более сложной БД, запрос SQL также усложнился, и без ID никак не обойтись.
Решил воспользоваться вашим советом, но что-то не работает.
Привожу код вывода элементов из БД:
// create query to fill name combobox
$name_query = "SELECT airplane_id, airplane_name FROM airplane ORDER BY airplane_name";
|
<?php
// name
if(isset($_POST['name']))
$name = $_POST['name'];
else
$name="";
?>
<select name="name" onchange="listByCategory(this)">
<?php while($list = mysql_fetch_array($name_sql)){
if($list['airplane_id'] == $_POST['name'])
$selected = "selected";
else
$selected = "";
?>
<option value="<?php echo($list['airplane_id']);?>" "<?php echo $selected; ?>"><?php echo($list['airplane_name']);?></option>
<?php } // while ?>
<?php mysql_free_result($name_sql);?>
</select>
|
Не работает выбранное значение, оно не остается выбранным.
С сессиями тоже не работает, если сделать так:
<?php
// name
if(isset($_POST['name']))
$_SESSION['name'] = $_POST['name'];
if(isset($_SESSION['name']))
$name = $_SESSION['name'];
else
$name="";
?>
<select name="name" onchange="listByCategory(this)">
<?php while($list = mysql_fetch_array($name_sql)){
if($list['airplane_id'] == $_SESSION['name'])
$selected = "selected";
else
$selected = "";
?>
<option value="<?php print($list['airplane_id']);?>" "<?php echo $selected; ?>"><?php print($list['airplane_name']);?></option>
<?php } // while ?>
<?php mysql_free_result($name_sql);?>
</select>
|
Где я ошибся?
Спасибо. | |
|
|
|
|
|
|
|
для: codexomega
(03.06.2006 в 22:12)
| | Нигде ни видно функции session_start() - без неё сессии работать не будут - в оригинальном коде она присутствует? | |
|
|
|
|
|
|
|
для: cheops
(03.06.2006 в 22:58)
| | Да, присутствует.
Самая первая строка файла начинается с этого:
<?php
// start session
session_start();
?>
|
Если переменную сессии выводить через echo(), она выводится и значение её меняется с выбором в списке селект.
Но работать отказывается. | |
|
|
|
|
|
|
|
для: codexomega
(03.06.2006 в 23:24)
| | Всё, до меня дошло:)
Причиной были кавычки!
И такой код, с selected в кавычках нe шёл:
<option "<?php echo $selected; ?>" value="blabla">Bla</option>
Результат =>
<option "selected" value="blabla">Bla</option>
|
Так правильно:
<?php
// start session
session_start();
// name
if(isset($_POST['name']))
$_SESSION['name'] = $_POST['name'];
if(isset($_SESSION['name']))
$name = $_SESSION['name'];
else
$name="";
?>
<select name="name" onchange="listByCategory(this)">
<?php while($list = mysql_fetch_array($name_sql)){
if($list['airplane_id'] == $name)
$selected = "selected";
else
$selected = "";
?>
<option <?php echo $selected; ?> value="<?php print($list['airplane_id']);?>"><?php print($list['airplane_name']);?></option>
<?php } // while ?>
<?php mysql_free_result($name_sql);?>
</select>
|
| |
|
|
|