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]   

> Описание: при выделении всех чекбоксов
Demeus
Отправлено: 09 Мая, 2011 - 11:50:16
Post Id


Гость


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


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




Есть код который отмечает/снимает значение чекбокса
PHP:
скопировать код в буфер обмена
  1.  
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  3. "http://www.w3.org/TR/html4/loose.dtd">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">  
  6.  
  7.  
  8. </head>
  9. <body>
  10. <script type="text/javascript" src="/js/jquery-1.4.2.min.js"></script>
  11. <script type="text/javascript">
  12.     $(document).ready( function() {
  13.         // Выбор всех
  14.         //При клике на ссылку "Все", активируем checkbox
  15.         $("a[href='#select_all']").click( function() {
  16.            $("#" + $(this).attr('rel') + " input:checkbox:enabled").attr('checked', true);
  17.                    alert($(this).value('rel'));
  18.             return false;
  19.         });
  20.  
  21.         // Ни одного
  22.         $("a[href='#select_none']").click( function() {
  23.              $("#" + $(this).attr('rel') + " input:checkbox").attr('checked', false);
  24.             return false;
  25.         });
  26.     });
  27.        
  28. </script>
  29.  
  30.  
  31.  
  32. <a rel="group1" href="#select_all">Все</a>, <a rel="group1" href="#select_none">Ни одного</a>
  33. <div id="group1">
  34.   <input type="checkbox" name="numbers[]" value="1" />
  35.   <input type="checkbox" name="numbers[]" value="2" />
  36.   <input type="checkbox" name="numbers[]" value="3" />
  37.   <input type="checkbox" name="numbers[]" value="4" />
  38.   <input type="checkbox" name="numbers[]" value="5" />
  39.   <input type="checkbox" name="numbers[]" value="6" />
  40.   <input type="checkbox" name="numbers[]" value="7" />
  41.   <input type="checkbox" name="numbers[]" value="8" />
  42.   <input type="checkbox" name="numbers[]" value="9" />
  43.   <input type="checkbox" name="numbers[]" value="10" />
  44. </div>
  45.  
  46. </body>
  47. </html>
  48.  

а как потом сформировать квари стринг для последующей фильтрации значений?
 
 Top
vsll
Отправлено: 09 Мая, 2011 - 12:57:53
Post Id


Частый посетитель


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


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




Попробуйте, только не забудьте отметить хотя бы один чекбокс
PHP:
скопировать код в буфер обмена
  1. $bla_ids = "";
  2.         if (isset($_POST['numbers']) && is_array($_POST['numbers'])) {
  3.                 foreach ($_POST['numbers'] as $thisnum) {
  4.                         if (isnum($thisnum)) { $bla_ids .= ($bla_ids ? "," : "").$thisnum; }
  5.                 }
  6.  
  7. //Запрос, например
  8.                 $result = ваш запрос("SELECT bla_id, bla_bla FROM ".DB_BLA." WHERE bla_id IN (".$bla_ids.") ORDER BY bla_id");
  9.  
  10. //Вместо isnum можно использовать int или ваш фильтр
  11. function isnum($value) {
  12.         if (!is_array($value)) {
  13.                 return (preg_match("/^[0-9]+$/", $value));
  14.         } else {
  15.                 return false;
  16.         }
  17. }
 
 Top
EuGen Администратор
Отправлено: 09 Мая, 2011 - 14:10:44
Post Id


Профессионал


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


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




Не очень все-таки понимаю, почему нужна isnum если есть is_numeric

Для формирования условия корректнее использовать такой подход:
PHP:
скопировать код в буфер обмена
  1.  
  2. $strWhere='';
  3. $rgWheres=array();
  4. $rgWheresId=array();
  5. $strWhereId='';
  6. if(isset($_POST['numbers']))
  7. {  
  8.    if(is_array($_POST['numbers']))
  9.    {
  10.       foreach ($_POST['numbers'] as $number)
  11.       {
  12.          if(is_numeric($number))
  13.          {
  14.             $rgWheresId[]=$number;
  15.          }
  16.       }
  17.    }
  18.    //for more extended variants:
  19.    elseif(is_numeric($_POST['numbers']))
  20.    {
  21.       $rgWheresId[]=$_POST['numbers'];
  22.    }
  23.    if(count($rgWheresId))
  24.    {
  25.       $strWhereId='id IN ('.join(',', $rgWheresId).")";
  26.    }
  27. }
  28. //what if we'll have more than 1 condition in query?
  29. if($strWheresId)
  30. {
  31.    $rgWheres[]=$strWheresId;
  32. }
  33. $strWhere=join('  && ', $rgWheres);
  34. if($strWhere)
  35. {
  36.    $strWhere=' WHERE '.$strWhere;
  37. }
  38. $result = mysql_query("SELECT * FROM `your_table` ".$strWhere);
  39.  

Тогда, во-первых, удобнее будет добавлять новые условия, а также в случае, если ничего не выбрано среди checkbox, будут выбраны все строки.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
vsll
Отправлено: 09 Мая, 2011 - 14:25:06
Post Id


Частый посетитель


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


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




я не знаю как _is_numeric определит вот это например: 5,555555555555555555555555
кому как удобно, я не претендую на полное признание isnum, а насчёт выбора по умолчанию всех чекбоксов, просто делаю } else { echo "Not all required fields are filled."; }
 
 Top
EuGen Администратор
Отправлено: 09 Мая, 2011 - 14:31:18
Post Id


Профессионал


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


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




5,5555 - не числовая строка
5.5555 - числовая.
Для целочисленных - is_int
Почему не "кому как удобно"? Просто хорошим стилем считается использование встроенных функций там, где это можно, не используя свои. Это еще и быстрее (так как встроенные - уже пре-компилированны).
Про выбор чекбоксов - более логичное поведение - отображать все строки, а не ошибку.
Ну и в случае, если нужно будет добавить еще условие - не очень удобен такой подход.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
vsll
Отправлено: 09 Мая, 2011 - 14:36:40
Post Id


Частый посетитель


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


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




EuGen пишет:
Почему не "кому как удобно"?
Потому что EuGen если мне приспичит исключить id=66, то отредактировав isnum я это быстрее сделаю, чем менять везде is_int на isnum )))

http://forum[dot]vingrad[dot]ru/topic-32[dot][dot][dot]t/p-2281807[dot]html

(Отредактировано автором: 09 Мая, 2011 - 14:51:50)

 
 Top
Champion Супермодератор
Отправлено: 09 Мая, 2011 - 15:13:53
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




Vasiliya пишет:
Потому что EuGen если мне приспичит исключить id=66, то отредактировав isnum я это быстрее сделаю, чем менять везде is_int на isnum
Это конечно умный подход, но тут явно перебор. Так можно и перегрузить все опреаторы и все функции языка, заявив, мол а вдруг я захочу, чтоб присваивание не просто присваивало, а еще умножало на число Пи и брало корень степени Е.
Если изначально не намечается никаких порнографических действий, то лучше пользоваться встроенными возможностями без всяких оберток и дописок.
 
 Top
Demeus
Отправлено: 09 Мая, 2011 - 15:35:18
Post Id


Гость


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


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




спасибо конечно за код, но мне бы это сделать без перезагрузки страницы
 
 Top
vsll
Отправлено: 09 Мая, 2011 - 15:53:27
Post Id


Частый посетитель


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


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




Champion да, я такая, для разных задач - разные фильтры, лучше всё в один фильтр впихнуть, чем плодить велосипеды, которые ещё и не на каждой ОС могут сработать )
Demeus ajax
 
 Top
Haron
Отправлено: 09 Мая, 2011 - 16:34:33
Post Id



Частый гость


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


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




AJAX:
Строка 16:
CODE (javascript):
скопировать код в буфер обмена
  1. $("#" + $(this).attr('rel') + " input:checkbox:enabled").attr('checked', true);

заменяем на
CODE (javascript):
скопировать код в буфер обмена
  1. $("#" + $(this).attr('rel') + " form[name='myform'] > input:checkbox:enabled").attr('checked', true);


Строка 23:
CODE (javascript):
скопировать код в буфер обмена
  1. $("#" + $(this).attr('rel') + " input:checkbox").attr('checked', false)

заменяем на
CODE (javascript):
скопировать код в буфер обмена
  1. $("#" + $(this).attr('rel') + " form[name='myform'] >  input:checkbox").attr('checked', false)


Все input'ы берём в контейнер
CODE (html):
скопировать код в буфер обмена
  1. <form name="myform">...</form>


В жаваскрипте пишем ещё одну функцию:
CODE (javascript):
скопировать код в буфер обмена
  1. $('#ajaxbutton').click(function(){
  2.     var serverscriptpath = 'ajax.php'; // Адрес скрипта, который должен обработать запрос
  3.     var postdata = $("form[name='myform']").serializeArray(); // Сериализация (упаковка данных) формы.
  4.     // Что нибудь делаем до запроса
  5.     $.post(serverscriptpath, postdata, function(data){ // Собственно асинхронный POST запрос
  6.         // В переменной дата - должен содержаться какой либо ответ скрипта ajax.php. В этом блоке мы разбираем ответ.
  7.         alert(data);
  8.     });
  9. });


Осталось куда-нибудь воткнуть "кнопку" с id="ajaxbutton"

В ajax.php - пишем собственно тот php-код, который написали выше. В нём мы также разбираем пришедшие данные $_POST
Ответы можно выводить через echo($otvet); или ещё лучше через exit($otvet);


-----
И чё?
 
 Top
vsll
Отправлено: 09 Мая, 2011 - 17:10:59
Post Id


Частый посетитель


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


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




Demeus как в лучших ресторанах, не только на кусочки порезали и зеленью украсили, но ещё и зайчика из морковки вырезали и на тарелочку поставили ) Радость
 
 Top
Demeus
Отправлено: 09 Мая, 2011 - 18:10:59
Post Id


Гость


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


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




Спасибо буду разбираться.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB