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

Форум MySQL

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

 

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

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

тема: Расскрывающийся список из базы
 
 автор: Vova   (13.06.2006 в 15:11)   письмо автору
 
 

Как организовать, чтобы в расскрывающемся списке данные брались из базы.
Например есть такой расскрывающийся список

 <select class="input" type=text name=district>
     <option value='none' <?php if($_POST['district']=='none') echo "selected"?>>любое
     <option value='Al' <?php if($_POST['district']=='Al') echo "selected"?>>Al
     <option value='HB' <?php if($_POST['district']=='HB') echo "selected"?>>HB
     <option value='UAL' <?php if($_POST['district']=='UAL') echo "selected"?>>UAL
 </select>

где district - столбец в таблице table. Как можно организовать тот же самый список, но чтобы данные брались из базы из таблицы table столбца district.

   
 
 автор: Boss   (13.06.2006 в 19:20)   письмо автору
 
   для: Vova   (13.06.2006 в 15:11)
 

<select class="input" type=text name=district> 
<?
$sql 
"SELECT * FROM table";
$r_sql mysql_query($sql);
while (
$res mysql_fetch_array($r_sql))
{
?>
<option value='none' ><? echo $res['district']; ?> </option>
<? ?>
</select>

   
 
 автор: Vova   (14.06.2006 в 12:17)   письмо автору
 
   для: Boss   (13.06.2006 в 19:20)
 

Супер! Всё классно работает, спасибо ). А вот хотел спросить, а как можно при тех же самых условиях

<select class="input" type=text name=district>
<?
$sql 
"SELECT * FROM table";
$r_sql mysql_query($sql);
while (
$res mysql_fetch_array($r_sql))
{
?>
<option value='none' ><? echo $res['district']; ?> </option>
<? ?>
</select>

Чтобы в списке показывались только разные значения. Например, в district значения: HB, HB, HB, AL, HB, AL. При таком запросе выводятся все эти значения, но нужно, чтобы выводилось только разные по одному разу - HB и AL.

   
 
 автор: cheops   (14.06.2006 в 12:48)   письмо автору
 
   для: Vova   (14.06.2006 в 12:17)
 

Для этого SQL-запрос
SELECT * FROM table

следует изменить на
SELECT * FROM table GROUP BY district

   
 
 автор: Boss   (14.06.2006 в 13:15)   письмо автору
 
   для: Vova   (14.06.2006 в 12:17)
 

т.е. вы хотите исключить все дубликаты, насколько я понимаю:
измените строчку:
$sql = "SELECT * FROM table"; 

на
$sql = "SELECT DISTINCT * FROM table"; 

   
 
 автор: Vova   (14.06.2006 в 12:17)   письмо автору
 
   для: Boss   (13.06.2006 в 19:20)
 

=

   
 
 автор: Vova   (14.06.2006 в 13:42)   письмо автору
 
   для: Vova   (14.06.2006 в 12:17)
 

Рано я обрадовался, в списке появляются данные из таблицы, но, поиск по этим данным не проходит ).
В этом варианте

 <select class="input" type=text name=district>
     <option value='none' <?php if($_POST['district']=='none') echo "selected"?>>любое
     <option value='Al' <?php if($_POST['district']=='Al') echo "selected"?>>Al
     <option value='HB' <?php if($_POST['district']=='HB') echo "selected"?>>HB
     <option value='UAL' <?php if($_POST['district']=='UAL') echo "selected"?>>UAL
</select> 

и далее у меня

if(isset($_POST['search']))
{
  ?>
  <a name=table></a>
  <?php
  
// Флаг равен true, если есть хотя бы один критерий поиска
  
$is_query false;
  
// Проверяем наличие и число параметров поиска
  
  
$tmp1 $tmp2 $tmp3 $tmp3 $tmp4 $tmp5 $tmp6 $tmp7 $tmp8 =
  
$tmp9 $tmp10 $tmp11 $tmp12 $tmp13 $tmp14 $tmp15 $tmp16="";
  if(isset(
$_POST['district']) && $_POST['district']!='none'
     
$tmp1 " and district='".$_POST['district']."'";

...

// Формируем запрос из переданных данных
  
$query "SELECT * FROM table 
            WHERE hide='show'
            "
.$tmp11.$tmp1.$tmp2.$tmp3.$tmp4.$tmp5.$tmp6.$tmp7.$tmp8.
            
$tmp9.$tmp10.$tmp12.$tmp13.$tmp14.$tmp15.$tmp16.
            ORDER BY currency"
;
  
// Выполняем SQL-запрос
  
$prt mysql_query($query);
  if(!
$prtputerror("Ошибка при обращении к таблице");
  
// количество рядов в наборе должно быть больше нуля
  
if (mysql_num_rows($prt)>0)
  {
    
?>

...

<?
 
while($par mysql_fetch_array($prt))
    {

....

<
td>&nbsp;$distr</td>


В этом случае поиск идёт нормально (по выбираемым значениям списка).

Но, если список организовать так



<select class="input" type=text name=district>
<?
$sql 
"SELECT * FROM table";
$r_sql mysql_query($sql);
while (
$res mysql_fetch_array($r_sql))
{
?>
<option value='none' ><? echo $res['district']; ?> </option>
<? ?>
</select>


То, значения в расскрывающемся списке появляются, но поиск не ведётся. Ни как не могу разобраться, в чём дело.

   
 
 автор: Boss   (14.06.2006 в 13:50)   письмо автору
 
   для: Vova   (14.06.2006 в 13:42)
 

Дело в том, что при передаче из формы php сценарию переменная $name будет пуста:
для этого, передайте вот так:

<select class="input" type=text name=district> 
<? 
$sql 
"SELECT * FROM table"
$r_sql mysql_query($sql); 
while (
$res mysql_fetch_array($r_sql)) 

?> 
<option value='<?= $res['district'];  ?>' ><?= $res['district']; ?> </option> 
<? ?> 
</select> 


И тогда у вас будет все тип-топ =)

   
 
 автор: Boss   (14.06.2006 в 13:50)   письмо автору
 
   для: Vova   (14.06.2006 в 13:42)
 

Дело в том, что при передаче из формы php сценарию переменная $name будет пуста:
для этого, передайте вот так:

<select class="input" type=text name=district> 
<? 
$sql 
"SELECT * FROM table"
$r_sql mysql_query($sql); 
while (
$res mysql_fetch_array($r_sql)) 

?> 
<option value='<?= $res['district'];  ?>' ><?= $res['district']; ?> </option> 
<? ?> 
</select> 


И тогда у вас будет все тип-топ =)

   
 
 автор: Vova   (14.06.2006 в 17:45)   письмо автору
 
   для: Boss   (14.06.2006 в 13:50)
 

Всё тип-топ, спасибо )
Я там ещё добавил строчку, чтоб можно было искать по любому значению:

<select class="input" type=text name=district>
<option value='none' <?php if($_POST['district']=='none') echo "selected"?>>любое
<?
$sql 
"SELECT * FROM products GROUP BY district";
$r_sql mysql_query($sql);
while (
$res mysql_fetch_array($r_sql))
{
?>
<option value='<?= $res['district'];  ?>' ><?= $res['district']; ?> </option>
<? ?>
</select>

Выбирая любое значение из списка - всё ищется нормально, включая, если выбрать значение "любое", но вот после поиска значение в списке устанавливается на первое - "любое". А как сделать, чтобы значение оставалось тем, которое было выбрано. Без добавленной мною строчки, значение после поиска тоже устанавливается на первое в списке ...

   
 
 автор: Boss   (14.06.2006 в 19:01)   письмо автору
 
   для: Vova   (14.06.2006 в 17:45)
 


<select class="input" type=text name=district> 
<option value='none' <?php if($_POST['district'] == 'none') echo "selected"?>>любое</option>
<? 
$sql 
"SELECT * FROM products GROUP BY district"
$r_sql mysql_query($sql); 
while (
$res mysql_fetch_array($r_sql)) 

?> 
<option value='<?= $res['district'];?><? if ($_POST['district'] == $res['district'] echo 'selected'); ?>><?= $res['district']; ?> </option> 
<? ?> 
</select>

   
 
 автор: Vova   (15.06.2006 в 12:56)   письмо автору
 
   для: Boss   (14.06.2006 в 19:01)
 

Всё в точности так поменял, но появляется белый экран.
В этом случае работает

<option value='<?= $res['district'];?>' ><?= $res['district']; ?> </option>

но, когда вместо этой строчки вставляю

<option value='<?= $res['district'];?><? if ($_POST['district'] == $res['district'] echo 'selected'); ?>><?= $res['district']; ?> </option>

Появляется белый экран

Вопрос решился. Строчку переделал так

<option value='<?= $res['district'];?>'<?php if ($_POST['district']==$res['district']) echo "selected"?>><?= $res['district']; ?> </option>
И всё заработало. Сэнкс )

   
 
 автор: Trianon   (15.06.2006 в 13:10)   письмо автору
 
   для: Vova   (15.06.2006 в 12:56)
 

смотрите исх.код HTML. У Вас все сообщения об ошибках остались там, из-за нарушения в синтаксисе тегов.
Причина в том, что круглая скобка ушла после echo 'selected' , а должна быть перед ним.

   
Rambler's Top100
вверх

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