Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вывод в форме оригинального пункта

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
carakurt
Отправлено: 21 Июня, 2009 - 14:41:05
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




Здравствуйте, старшие товарищи! Подскажите, пожалуйста новичку, как ему справиться со следующей проблемой:
Есть у меня в БД табличка 'shariki', в которой три столбца: 'id', 'color' и 'size'. В этой таблице содержатся характеристики воздушных шариков 7-ми цветов и 50-ти различных вариантов размера. Я делаю форму поиска, в которой пользователь может выбирать шарики по характеристикам:
PHP:
скопировать код в буфер обмена
  1. <form action="shariki.php" name="form1" method="post">
  2.    <p>Выберите цвет шарика:
  3.    <select name="color">
  4.    <option value="0" selected>Все</option>
  5.    <?PHP
  6.    $result = mysql_query ("SELECT * FROM shariki",$db);
  7.    $myrow = mysql_fetch_array($result);
  8.    do
  9.    {
  10.    printf ("<option value='%s'>%s</option>",$myrow['id'],$myrow['color']);
  11.    }
  12.    while ($myrow = mysql_fetch_array($result));
  13.    ?>
  14.    </select></p>
  15.  
  16.    <p>Выберите размер шарика:
  17.    <select name="size">
  18.    <option value="0" selected>Все</option>
  19.    <?PHP
  20.    do
  21.    {
  22.    printf ("<option value='%s'>%s</option>",$myrow['id'],$myrow['size']);
  23.    }
  24.    while ($myrow = mysql_fetch_array($result));
  25.    ?>
  26.    </select></p>
  27.    <p><input name="but1" type="submit" value="Искать"></p>
  28. </form>

Так вот, и как вы уже поняли у меня селектор выбора цвета имеет не 7 полей, а 50. Как быть?! Растерялся


Отредактировано модератором: Champion, 21 Июня, 2009 - 17:48:09
[php]
 
 Top
JustUserR
Отправлено: 21 Июня, 2009 - 15:01:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




carakurt Проще всего сделать два отдельных запроса SELECT DISTINCT color FROM shariki и SELECT DISTINCT size FROM shariki При этом DISTINCT означает выборку без повторений
А можно и не делать два запроса - просто вытащите из ассоцмасива данных БД все неповторябщиеся данные по столбцам color и size


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
carakurt
Отправлено: 21 Июня, 2009 - 16:14:41
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




Т.е если использовать один запрос, то выглядеть он будет так:
SELECT DISTINCT * FROM shariki?
 
 Top
Ch_chov
Отправлено: 21 Июня, 2009 - 17:11:53
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




1. Не совсем понятно какие записи хранятся в таблице.
В любом случае SELECT DISTINCT * FROM shariki вернёт все уникальные записи из таблицы. Если в таблице поле `id` или `size` уникально, то данный запрос всегда будет выдавать все записи таблицы.
Если ты очень хочешь ограничиться одним запросом, то сохраняй результат в массив. А потом выбирай из него уникальные значения. Например с помощью array_unique .

2. Не пойму как у тебя 2 раза подряд выполняется данная конструкция?
При том что запрос к базе выполнялся всего один раз.

3. А для чего здесь нужна конструкция do while ?
Вот этот кусок:
PHP:
скопировать код в буфер обмена
  1. $myrow = mysql_fetch_array($result);
  2. do
  3. {
  4. printf ("<option value='%s'>%s</option>",$myrow['id'],$myrow['color']);
  5. }
  6. while ($myrow = mysql_fetch_array($result));

Попробуй заменить этим:
PHP:
скопировать код в буфер обмена
  1. while ($myrow = mysql_fetch_array($result))
  2. echo '<option value="',$myrow['id'],'">',$myrow['size'],'</option>';

(Отредактировано автором: 21 Июня, 2009 - 17:15:43)

 
 Top
carakurt
Отправлено: 21 Июня, 2009 - 17:27:41
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




Ch_chov спасибо большое за замечания и предложения! Буду пробывать и консультироваться!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB