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 :: AJAX Checkbox+Mysql

 PHP.SU

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


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

> Описание: асинхронный запрос
DarkRevenger
Отправлено: 08 Июня, 2011 - 12:36:13
Post Id



Новичок


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


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




Есть готовая страница на php, работает идеально, но есть проблема. После того как пользователь проставит все галочки, ему нужно нажимать кнопку, а как можно избавиться от этого? Подкажите плиз реализацию чего-нибудь такого. Нужно чтобы просто значение чекбокса в таблице менялос с 0 на 1 без кнопки

(Отредактировано автором: 08 Июня, 2011 - 13:15:51)

 
 Top
DlTA
Отправлено: 08 Июня, 2011 - 14:33:55
Post Id



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


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


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




подключаете jquery
всем чекбоксам (которые надо обрабатывать) выборка
цепляете на событие onClick, проверку статуса, и методом jQuery[dot]get отправляете соответствующие данные PHP скрипту, который в свою очередь вносит нужные изменения гдето там в закромах

можно сделать без jquery, но тогда возни чуть больше.
 
 Top
DlTA
Отправлено: 17 Июня, 2011 - 11:52:21
Post Id



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


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


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




вот вариант реализации без использования jquery
оказалось даже очень просто
CODE (html):
скопировать код в буфер обмена
  1. <script language='javascript'>
  2.         function sendCheckInfo(el)
  3.         {
  4.                 // alert(el.value);
  5.                 request = new XMLHttpRequest();
  6.                 var url = "/processPage?checkId=" + el.id + "&checkStat=" + escape(el.value);
  7.                 //alert(url)
  8.                 request.open("GET", url, true);
  9.                 request.send(null);
  10.         }
  11. </script>
  12. <input type='checkbox' id='check1' onclick='javascript:sendCheckInfo(this)'>


только теперь надо правильно указать адерс страницы "url=..."
ну и полноценный обработчик PHP для таких запросов.

(Отредактировано автором: 17 Июня, 2011 - 11:53:59)

 
 Top
Viper
Отправлено: 17 Июня, 2011 - 13:32:38
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




DlTA крайне уязвимый код. В том же firebug запускаем фунцию в цикле и шлем на сервер n+1 запросов.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
DlTA
Отправлено: 17 Июня, 2011 - 14:00:00
Post Id



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


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


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




а причем тут уязвимость?
если если приспичет осуществить DOS атаку, то тут уж и без скрипта все можно устроить
 
 Top
DarkRevenger
Отправлено: 24 Июня, 2011 - 10:01:26
Post Id



Новичок


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


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




Подскажите как построить ajax запрос чтобы при установке чекбокса срабатывала одно условие, а при снятии другое?
Установили чекбокс, в БД значение стало 1
Сняли чекбокс, в БД значение стало 0
Что-то я никак не соображу
Вот код AJAX
CODE (javascript):
скопировать код в буфер обмена
  1. <script type="text/javascript">
  2. $(document).ready(function(){
  3.   $(":checkbox").click(
  4.     function () {
  5.       $.ajax({
  6.         type: "POST",
  7.         data:call_id:"id_call",
  8.         url: "checkbox.php"
  9.       });
  10.     });    
  11. }); //т.е. нужно передать id чекбокса (id_call) в checkbox.php
  12. </script>

А вот так примерно выглядит обработчик
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if($_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest') {
  3.   if (isset($_POST['call_id'])) {
  4. $q1="select personal from calls where id_call=call_id";
  5. if personal=1 {$q="update Calls set personal=0 where id_call=call_id"}
  6. else {$q="update Calls set personal=1 where id_call=call_id"}
  7. }
  8. }
  9. ?>

(Отредактировано автором: 24 Июня, 2011 - 10:01:57)

 
 Top
Viper
Отправлено: 24 Июня, 2011 - 14:06:20
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




DlTA вы не поняли о чем я.

DarkRevenger

CODE (javascript):
скопировать код в буфер обмена
  1. if ($(":checkbox").is(":checked")) {
  2. } else {
  3. }


сам чекбокс отмечается
CODE (javascript):
скопировать код в буфер обмена
  1. $(this).attr("checked", $(this).is(":checked"));

Это своего рода костыль, т.к. в IE есть баг с отметкой чекбокса.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
DlTA
Отправлено: 27 Июня, 2011 - 12:28:57
Post Id



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


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


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




сообщение для DarkRevenger (Отобразить)


следующий код не использует jquery, как говорится все на чистом JS:
код (Отобразить)

если же интересует ajax запрос на jquery то вам сюда, и сюда.
там все понятно и красиво расписано. а о костыле для IE уже было расписано выше у Viper, в первом коде. хотя насколько я понял при каждом выделении/снятии нужно отправлять не все чеки, а только обрабатываемый поэтому придется включить моцк и малеха переделать.
 
 Top
Viper
Отправлено: 27 Июня, 2011 - 13:09:23
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




Сосбтно дабы небыло непоняток по коду с jquery.

Для одного чекбокса обработка клика:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $(":checkbox").click(function(){
  3.         $(this).attr("checked", $(this).is(":checked"));
  4. });


Для группы. Т.е. у нас есть один главный чекбокс при клике на который отмечаем все остальные.

CODE (javascript):
скопировать код в буфер обмена
  1. $("#checkAll").click(function(){
  2.         $(":checkbox").attr("checked", $(this).is(":checked")); // именно через селектор, а не через this!
  3. });


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
DlTA
Отправлено: 27 Июня, 2011 - 20:42:20
Post Id



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


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


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




Viper, чет я не догоняю
Viper пишет:
$(":checkbox").click(function(){
        $(this).attr("checked", $(this).is(":checked"));
});
этот код (насколько я понял), каждому чекбоксу на странице на событие клик переводит чекбокс в тоже состояние в котором он нынче и находится
[dot]is(), как то не логично!?
 
 Top
Viper
Отправлено: 27 Июня, 2011 - 22:17:19
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




DlTA пишет:
как то не логично
.is в данном случае возвращает true если чекбокс актвен. соответственно если какой-то отмечен, то с него будет снята отметка.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
DlTA
Отправлено: 28 Июня, 2011 - 00:08:18
Post Id



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


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


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




Viper,
а обычного
CODE (javascript):
скопировать код в буфер обмена
  1. if ($(this).attr("checked"))
  2. {...}
недостаточно?
или проблема в том что сначала происходит обработка события и только потом изменение статуса?!
 
 Top
Viper
Отправлено: 28 Июня, 2011 - 23:02:27
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




DlTA скажем так... обработать чекбоксы проще первой записью. приведенный вами пример лишь позваоляет выполнять дополнительные действия. но опять же мною были замечены грабли в IE8(шоп этому мелкософту пусто было...)


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
DarkRevenger
Отправлено: 29 Июня, 2011 - 07:52:27
Post Id



Новичок


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


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




DlTA
Что-то я не совсем понял сути кода. У меня сделано так.
Есть страница Index.php куда выводится вся инфа. И есть страница ajax, которая при клике на какой-нибудь номер в Index генерит таблицу с данными об этом номере.
Index.php
Спойлер (Отобразить)

ajax.php
Спойлер (Отобразить)

Я пробовал использовать тот же код ajax который уже есть, просто переделать его под обработку чеков и сделать две функции, одна для обработки каждой строки отдельно, а вторая для обработки всего полученного массива.
т.е. создавал под них 4 разных запроса.
1.1. Обработка одной строки (снять чекбокс)
update Calls set personal=0 where id_call=call_id
1.2. Обработка одной сроки (установить чекбокс)
update Calls set personal=1 where id_call=call_id
2.1. Обработка массива звонков (установить чекбокс)
update Calls set personal=1 where recipient=recipient
2.2. Обработка массива звонков (снять чекбокс)
update Calls set personal=0 where recipient=recipient

Т.е. как-то так. Но сейчас мне почему-то кажется это полным бредом.
 
 Top
Viper
Отправлено: 29 Июня, 2011 - 08:50:36
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




DarkRevenger это зачем?
CODE (htmlphp):
скопировать код в буфер обмена
  1. if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
борьба с мухами?

1.1 и 1.2 можно в if взять и упростить.

2.1 и 2.2 через IN в запросе.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB