Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с селектом
 
 автор: codexomega   (27.05.2006 в 19:39)   письмо автору
 
 

Проблема такая:
Есть страница со списком элементов. Элементы выводятся из Базы Данных, отображаются в таблице, фильтруются, сортируются.
Чтобы было более понятно, привожу скриншот.
База данных состоит из 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:
Система отлично работала, пока всё было в одной таблице.
Я её разломал, при попытке усовершенствовать.

   
 
 автор: cheops   (27.05.2006 в 23:22)   письмо автору
 
   для: 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);
?>

   
 
 автор: codexomega   (27.05.2006 в 23:56)   письмо автору
24.4 Кб
 
   для: cheops   (27.05.2006 в 23:22)
 

-
Проблема решена.
Я тут пока детально пытался объяснить проблему, сам прозрел.
Изменил запрос к БД и свой селект.
Два дня ничего не мог мог сообразить, а оказалось просто.
Но в любом случае, спасибо.

   
 
 автор: codexomega   (03.06.2006 в 22:12)   письмо автору
 
   для: 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>



Где я ошибся?
Спасибо.

   
 
 автор: cheops   (03.06.2006 в 22:58)   письмо автору
 
   для: codexomega   (03.06.2006 в 22:12)
 

Нигде ни видно функции session_start() - без неё сессии работать не будут - в оригинальном коде она присутствует?

   
 
 автор: codexomega   (03.06.2006 в 23:24)   письмо автору
 
   для: cheops   (03.06.2006 в 22:58)
 

Да, присутствует.
Самая первая строка файла начинается с этого:

<?php
// start session
session_start(); 
?>


Если переменную сессии выводить через echo(), она выводится и значение её меняется с выбором в списке селект.
Но работать отказывается.

   
 
 автор: codexomega   (04.06.2006 в 03:14)   письмо автору
 
   для: 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>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования