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 :: Получить значения <option> и сделать SQL-запрос

 PHP.SU

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


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

> Описание: JS+PHP+MYSQL
Heavenanvil
Отправлено: 26 Декабря, 2016 - 17:53:51
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


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




Всем привет.
Сразу перейду к делу.
Ситуация такая, есть выпадающий список, в котором несколько значений (<option>), выбрать можно только одно из них.
Есть текстовое поле input, в котором отображается число, которое я получаю из базы.
Как мне сделать, чтобы при выборе определённого значения из списка (<option>) делался нужный запрос и подставлял нужное значение в input text.
Вот часть кода, которую я использую, возможно с ней станет понятнее.
Получаю число, для вставки в input-text:
PHP:
скопировать код в буфер обмена
  1.  
  2. $result = mysql_query("SELECT * FROM link WHERE cat_link=1 ORDER BY price DESC",$db); //Нахожу максимальное значение
  3. $price_row = mysql_fetch_array($result);
  4. $maxprice = $price_row['price'];
  5.  

Поле с выпадающим списком:
CODE (html):
скопировать код в буфер обмена
  1. <div class="input-field id="myoption">
  2.       <select>
  3.           <option value="0" disabled="" selected="">Выберите категорию</option>
  4.         <optgroup label="Категория 1" >
  5.           <option value="1">Подкатегория 1</option>
  6.           <option value="2">Подкатегория 2</option>
  7.           <option value="3">Подкатегория 3</option>
  8.         </optgroup>
  9.         <optgroup label="Категория 2">
  10.           <option value="4">Подкатегория 2</option>
  11.           <option value="5">Подкатегория 3</option>
  12.         </optgroup>
  13.       </select>
  14.     </div>

Поле text-input:
CODE (html):
скопировать код в буфер обмена
  1. <input value="<?php echo $maxprice; ?>" id="price_new" type="text">

Я так понимаю, мне тут не обойтись без JS.
Нужно сообразить что-то вроде:
CODE (javascript):
скопировать код в буфер обмена
  1. if document.getElementById('myoption').value = 1 {
  2. $result = mysql_query("SELECT * FROM link WHERE cat_link=1 ORDER BY price DESC",$db);
  3. }
 
 Top
ytrewq123
Отправлено: 27 Декабря, 2016 - 00:33:46
Post Id


Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014  


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




Сам учусь. Только мысли.
Лучше конечно поставить в валуе ИД записи в базе. Но у вас вроде структура селект такая что надо думать.
Но если так как у вас сейчас, то ЯваСкрипт не надо.
CODE (html):
скопировать код в буфер обмена
  1.  
  2. 1.      <div class="input-field id="myoption">
  3. 2.            <select name=”select”>
  4. 3.                <option value="0" disabled="" selected="">Выберите категорию</option>
  5. 4.              <optgroup label="Категория 1" >
  6. 5.                <option value="1">Подкатегория 1</option>
  7. 6.                <option value="2">Подкатегория 2</option>
  8. 7.                <option value="3">Подкатегория 3</option>
  9. 8.              </optgroup>
  10. 9.              <optgroup label="Категория 2">
  11. 10.               <option value="4">Подкатегория 2</option>
  12. 11.               <option value="5">Подкатегория 3</option>
  13. 12.             </optgroup>
  14. 13.           </select>
  15. 14.         </div>
  16.  


PHP:
скопировать код в буфер обмена
  1.  
  2. Просто смотрите if($_POST[‘select’]===1)
  3. {
  4. $nomer = $_POST[‘select’];
  5. $result = mysql_query("SELECT * FROM link WHERE cat_link='$nomer' ORDER BY price DESC",$db);
  6. }
  7.  


Или красиво Свичом всё выловите.
PHP:
скопировать код в буфер обмена
  1.  
  2. $nomer = $_POST[‘select’];
  3. switch($nomer)
  4. {
  5.    case 1: $result = mysql_query("SELECT * FROM link WHERE cat_link='$nomer' ORDER BY price DESC",$db); break;
  6.    case 2: $result = mysql_query("SELECT * FROM link WHERE cat_link='$nomer' ORDER BY price DESC",$db); break;
  7. }
  8.  

Думаю как-то так.

(Отредактировано автором: 27 Декабря, 2016 - 00:37:01)

 
 Top
Heavenanvil
Отправлено: 27 Декабря, 2016 - 09:07:53
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


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




ytrewq123, спасибо. Но я так и не понял, как мне делать этот запрос при изменении (выборе другого) значения поля со списком, и что важнее без перезагрузки страницы.
 
 Top
ytrewq123
Отправлено: 27 Декабря, 2016 - 10:31:59
Post Id


Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014  


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




Если без перезагрузки то думаю только АЯКС.
Ибо из базы надо достать информацию.
То есть.
ЯвсСкриптом смотрим валуе.
Передаём через АЯКС
И обрабатываем в ПХП, что пришло $_POST[‘select’] ставим к кокой обращаемся в базе и отдаём инфо, обратно в АЯКС он и выводит.

(Отредактировано автором: 27 Декабря, 2016 - 10:34:11)

 
 Top
Heavenanvil
Отправлено: 27 Декабря, 2016 - 13:34:54
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


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




Допустим при загрузке страницы я сразу получу значения для всех "категорий" и закину их в массив.
Когда меняется <option> (value) через JS можно ведь как-то подставлять соответствующее значение в text input.
Например вот так я изменяю значение text-input галочкой checkbox:
CODE (javascript):
скопировать код в буфер обмена
  1. <?php
  2. $maxprice = 50.00;
  3. $price = 49.00;
  4. ?>
  5.   <input type="checkbox" id="ineedtop" />
  6.   <input disabled value="49.00" id="price_new" type="text">
  7.   <script type="text/javascript">
  8.   var MaxPrice = '<?php echo $maxprice; ?>';
  9.   var Price = '<?php echo $price; ?>';
  10.   document.getElementById('ineedtop').onchange = function() {
  11.     document.getElementById('price_new').disabled = !this.checked;
  12.     if (document.getElementById('ineedtop').checked)
  13.       document.getElementById('price_new').value = MaxPrice;
  14.     else
  15.       document.getElementById('price_new').value = Price;
  16.   };
  17.   </script>

Вот пример на jsfiddle:
https://jsfiddle[dot]net/an3yqh2u/1/
 
 Top
ytrewq123
Отправлено: 27 Декабря, 2016 - 14:03:11
Post Id


Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014  


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




Не, ну если вы имеете нужную информацию из БД. Тогда безусловно вы можете с ней работать и Ява Скриптом. Но если нужен запрос в БД. Без ПХП никак.
А это или перезагруз или же АЯКС. Или я что то не понимаю. Ибо сам тоже только учусь.
(Добавление)
Ну примерно так.
Это совсем примерно, просто показать что можно.

PHP:
скопировать код в буфер обмена
  1. $massic = implode('|',['111','222','333']);

CODE (html):
скопировать код в буфер обмена
  1.  
  2.  
  3. <select name=”select” >
  4.                 <option value="0"  disabled="" selected="" >Выберите категорию</option>
  5.                 <optgroup label="Категория 1" >
  6.                 <option id="1" value="0" onclick="idd(this);select();">Подкатегория 1</option>
  7.                 <option id="2" value="1" onclick="idd(this);select();">Подкатегория 2</option>
  8.                 <option id="3" value="2" onclick="idd(this);select();">Подкатегория 3</option>
  9. </select>
  10.  


CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function idd(idik) {ide = idik.id;}
  3. function select()
  4. {
  5. var kto = document.getElementById(ide).value;
  6. var from_array = "<?php print_r($massic) ?>";
  7. var tut = from_array.split('|');
  8.    alert(tut[kto]);
  9. }  
  10.  
 
 Top
Heavenanvil
Отправлено: 28 Декабря, 2016 - 05:58:59
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


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




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

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. include ("db.php"); //Соединяемся с БД
  3. //Ищем максимальные значения для всех категорий сразу
  4. $maxprice1 = mysql_result(mysql_query("SELECT MAX(price) FROM link WHERE cat_link=1",$db), 0);
  5. $maxprice2 = mysql_result(mysql_query("SELECT MAX(price) FROM link WHERE cat_link=2",$db), 0);
  6. $maxprice3 = mysql_result(mysql_query("SELECT MAX(price) FROM link WHERE cat_link=3",$db), 0);
  7. $maxprice4 = mysql_result(mysql_query("SELECT MAX(price) FROM link WHERE cat_link=4",$db), 0);
  8. $maxprice5 = mysql_result(mysql_query("SELECT MAX(price) FROM link WHERE cat_link=5",$db), 0);
  9. $maxprice6 = mysql_result(mysql_query("SELECT MAX(price) FROM link WHERE cat_link=6",$db), 0);
  10. $maxprice7 = mysql_result(mysql_query("SELECT MAX(price) FROM link WHERE cat_link=7",$db), 0);
  11. ?>
  12. <select id="mycat">
  13.           <option value="0" disabled="" selected="">Выберите категорию</option>
  14.         <optgroup label="Категория 1" >
  15.           <option value="1">Подкатегория 1</option>
  16.           <option value="2">Подкатегория 2</option>
  17.           <option value="3">Подкатегория 3</option>
  18.         </optgroup>
  19.         <optgroup label="Категория 2">
  20.           <option value="4">Подкатегория 4</option>
  21.           <option value="5">Подкатегория 5</option>
  22.         </optgroup>
  23.         <optgroup label="Категория 3">
  24.           <option value="6">Подкатегория 6</option>
  25.           <option value="7">Подкатегория 7</option>
  26.         </optgroup>
  27.       </select>
  28. <input value="<?php echo $maxprice1; ?>" id="price_new" type="text">
  29. <script type="text/javascript">
  30. var MaxPrice1 = '<?php echo $maxprice1; ?>';
  31. var MaxPrice2 = '<?php echo $maxprice2; ?>';
  32. var MaxPrice3 = '<?php echo $maxprice3; ?>';
  33. var MaxPrice4 = '<?php echo $maxprice4; ?>';
  34. var MaxPrice5 = '<?php echo $maxprice5; ?>';
  35. var MaxPrice6 = '<?php echo $maxprice6; ?>';
  36. var MaxPrice7 = '<?php echo $maxprice7; ?>';
  37. document.getElementById('mycat').onchange = function(){
  38. if (document.getElementById('mycat').value == 1)
  39. document.getElementById('price_new').value = MaxPrice1;
  40. if (document.getElementById('mycat').value == 2)
  41. document.getElementById('price_new').value = MaxPrice2;
  42. if (document.getElementById('mycat').value == 3)
  43. document.getElementById('price_new').value = MaxPrice3;
  44. if (document.getElementById('mycat').value == 4)
  45. document.getElementById('price_new').value = MaxPrice3;
  46. if (document.getElementById('mycat').value == 5)
  47. document.getElementById('price_new').value = MaxPrice3;
  48. if (document.getElementById('mycat').value == 6)
  49. document.getElementById('price_new').value = MaxPrice3;
  50. if (document.getElementById('mycat').value == 7)
  51. document.getElementById('price_new').value = MaxPrice3;
  52. };
  53. </script>

Код имеет полностью рабочий функционал, но всё же я знаю, что это неправильно. Вдруг этих "категорий" будет очень много.

(Отредактировано автором: 28 Декабря, 2016 - 06:14:43)

 
 Top
andrewkard
Отправлено: 28 Декабря, 2016 - 20:25:08
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




Heavenanvil
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT max(price), cat_link FROM `link` GROUP BY cat_link
  3.  

Heavenanvil пишет:
var MaxPrice1 = '<?php echo $maxprice1; ?>';
var MaxPrice2 = '<?php echo $maxprice2; ?>';
var MaxPrice3 = '<?php echo $maxprice3; ?>';
var MaxPrice4 = '<?php echo $maxprice4; ?>';
var MaxPrice5 = '<?php echo $maxprice5; ?>';
var MaxPrice6 = '<?php echo $maxprice6; ?>';
var MaxPrice7 = '<?php echo $maxprice7; ?>';

это в массив можно, дальше сами.
 
 Top
Heavenanvil
Отправлено: 29 Декабря, 2016 - 03:20:27
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


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




Нифига не понял. А если у меня будет не 7, а 500 категорий, мне все равно писать для каждой по отдельности?
 
 Top
andrewkard
Отправлено: 29 Декабря, 2016 - 22:29:59
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




Heavenanvil пишет:
а 500 категорий, мне все равно писать для каждой по отдельности

где Вы увидели, что я написал "по отдельности"?
SQL запрос пробовали? Он тянет то что Вам нужно за один раз (если я правильно понял задумку)

andrewkard пишет:
это в массив можно, дальше сами.

это я сказал о том, что блок выше можно разместить не в несколько переменных, а в один массив, грубо так:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. var data = [<?=$maxprice1?>,<?=$maxprice2?>]
  3.  

лучше, конечно же будет объект.
Все вместе где то так:
Спойлер (Отобразить)
 
 Top
Heavenanvil
Отправлено: 30 Декабря, 2016 - 04:48:16
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


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




andrewkard, благодарю. Всё работает именно так, как мне нужно.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB