Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Моментальная обработка Checkbox, Асинхронные запросы к БД 
:(
    Опции темы
DARKLOTOS
Дата 8.6.2011, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.12.2010

Репутация: нет
Всего: нет



Доброго времени суток! Пришёл на форум тупо от безысходности. Есть очень важный проект, на него потрачено огромное колличество времени (пол года жизни =) ). Задача в принципе проста, но для меня невыполнима, точнее выполнима, если это не выходит за рамки php, но появилось условие, которое вынуждает использовать AJAX. Помогите с фукнцией... Гугл как не странно ничего толкового по этому вопросу не дал =(, книги тоже, только мозг вынесли.
Задача значит следующая, банальная до ужаса, нужно чтобы значение отмеченных checkbox менялось в БД с 0 на 1. После выполнения запроса к БД пользователю выдаётся список, который строится вот таким кодом 
Код

if($myrow['personal']==1)
{$o[]="<td class='check'><input type=checkbox name=\"call_select[]\" checked data-on=\"Personal\" data-off=\"Business\" value=\"$value\" ></td>";}
             else
{$o[]="<td class='check'><input type=checkbox name=\"call_select[]\" data-on=\"Personal\" data-off=\"Business\"  value=\"$value\" ></td>";}
             $o[]="<td align=right>{$myrow['cost']}</td>";
             $o[]="<td>{$myrow['recipient']}</td>";
             $o[]="<td>{$myrow['date_of_call']}</td>";
             $o[]="<td>{$myrow['time_of_call']}</td>";
             $o[]="<td>{$myrow['duration']}</td>";
             $o[]="<td align=right>{$myrow['connection_type']}</td>";
             $o[]="<td align=center>{$myrow['volume']}</td>";
             $o[]="<td>{$myrow['rouming']}</td>";
             $o[]="</thead></tr>";
       }
       $o[]="</tbody></table>";
       $o[]="<input type=\"submit\" name=\"set_personal\" value=\"RESULT\">";
       $o[]="</form><br>";
       echo implode('',$o);

Т.е. если в таблице значение поля personal=1, то здесь отображается Checked, в противном случае пустой чекбокс.
Здесь есть кнопка Submit "Result". Есть указание от неё избавиться, т.е. сделать так чтобы при отметке чекбокса его значение в БД сразу менялось. Это же можно сделать через xmlHttpRequest, кот только как, я не знаю. Подскажите плиз. smile  smile 
PM MAIL   Вверх
EmilRegis
Дата 8.6.2011, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: 3
Всего: 4



так в чём проблема..Гуглишь по запросу AJAX примеры, получаешь пример работы с асинхронными запросами и по клику на чекбоксах отправляешь на сервер нужную тебе информацию, а на сервере уже апдейтешь твою таблицу в бд
PM MAIL   Вверх
DARKLOTOS
Дата 8.6.2011, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.12.2010

Репутация: нет
Всего: нет



Логически я тоже понимаю что должно быть именно так, проблема с реализацией, как именно можно передать серверу запрос на изменение данных в БД без использования кнопки?

Это сообщение отредактировал(а) DARKLOTOS - 8.6.2011, 10:33
PM MAIL   Вверх
Evghenusi
Дата 8.6.2011, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

Репутация: 3
Всего: 15



Цитата
как именно можно передать серверу запрос на изменение данных в БД без использования кнопки?
чекбоксы кидаешь в форму, и при клике на них (событие) 
Код

document.getElementById('form1').submit()
хотя если речь о аяксе, то просто вызываешь функцию
Код

<input name="Name" onclick="function()" type="checkbox" value="ON" checked="" />

Код

$o[]="</form><br>";
echo implode('',$o);
зачем собирать массив, а после его склеивать?

и распиши пожалуйста по пунктам что тебе надо




Это сообщение отредактировал(а) Evghenusi - 8.6.2011, 11:06
PM WWW   Вверх
DARKLOTOS
Дата 8.6.2011, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.12.2010

Репутация: нет
Всего: нет



По пунктам? Легко! =)
1. Показать пользователю выпадающий список с номерами телефонов, по которым он звонил в прошлом месяце.
Код

option value='0'>Select the recipient</option><?$q = mysql_query("SELECT distinct recipient FROM Calls WHERE phone_number=$phone_number  AND Calls.date_of_call 
BETWEEN DATE_SUB(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), INTERVAL DAY(CURDATE())-1 DAY) 
AND DATE_SUB(CURDATE(), INTERVAL DAY(CURDATE()) DAY) and Calls.Cost<>0 ");
$p = mysql_fetch_array ($q);
do{echo "<option value=".$p['recipient'].">".$p['recipient']."</option>";}
while ($p = mysql_fetch_array ($q));?></select>

2.В зависимости от выбора отобрать с БД все звонки на указанный номер за прошлый меяц и выстроить в таблицу.
Код

if (isset($_POST["option"]) and ($_POST["option"]>0)) {
    $option = $_POST["option"];
    $query="Select * From Calls Where phone_number=$_SESSION[phone_number] and recipient=$option AND Calls.date_of_call 
BETWEEN DATE_SUB(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), INTERVAL DAY(CURDATE())-1 DAY) 
AND DATE_SUB(CURDATE(), INTERVAL DAY(CURDATE()) DAY) and Calls.Cost<>0";
    $result=mysql_query($query);
    if($result)
 {//далее код из первого поста

В результате пользователь видит все звонки за прошлый месяц, в виде таблицы с чекбоксами.
Визуально чекбоксы заменены на красную кнопку Personal(если отмечен) либо на зелёную кнопку Business(если не отмечен)
Как сделано: Выводится список, пользователь отметил, нажал Result, посылается запрос на изменение поля personal в таблицу Calls и на запись некоторых данных в таблицу Stats
Как нужно: При клике на чек Business он должен не просто сменить значение на checked но и выполнить запрос к БД, изменив в таблице Calls поле personal у этого звонка.
Чтобы пользователю не нужно было нажимать кнопку. Хотя я так думаю в любом случае кнопка останется, но уже для того чтобы передать данные в таблицу Stats.
Для чего это делается:
1. Пользователи не всегда нажимают кнопку, а если они забыли, им приходится отмечать всё сначала, потому-что после уничтожения сессии данные теряются.
2. Проверяющему будет проще ориентироваться в ситуации, когда он будет заходить и видеть что пользователь был в системе,отметил звонки (т.е. их значение в БД 1), но ещё не окончательно(таблица Stat пустая), значит результат рассчётов ещё будет меняться.

Это сообщение отредактировал(а) DARKLOTOS - 8.6.2011, 14:18
PM MAIL   Вверх
EmilRegis
Дата 8.6.2011, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: 3
Всего: 4



так что в итоге непонятно? как ajax-ом пользоваться? или что?
PM MAIL   Вверх
Evghenusi
Дата 8.6.2011, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

Репутация: 3
Всего: 15



сколько платишь за реализацию?  smile 

если будет настроение по читать - сюда
(или на методе POST поищи, он даже лучше)
PM WWW   Вверх
DARKLOTOS
Дата 8.6.2011, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.12.2010

Репутация: нет
Всего: нет



Цитата(EmilRegis @ 8.6.2011,  14:30)
так что в итоге непонятно? как ajax-ом пользоваться? или что?

Именно! Вообще непонятно. На php работаю,  c MySQL вроде дружу, а что это за зверь такой AJAX вообще не знаю.

Добавлено @ 14:54
Цитата(Evghenusi @ 8.6.2011,  14:33)
если будет настроение по читать - сюда
(или на методе POST поищи, он даже лучше)

Прочитал. Там только показано как вытягивать данные из БД. Это у меня и так работает, без AJAX

Это сообщение отредактировал(а) DARKLOTOS - 8.6.2011, 14:56
PM MAIL   Вверх
нуп
Дата 8.6.2011, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг

Репутация: 12
Всего: 33



Пример как раз тот, что вам нужен. Дальше дело за вами  smile 
PM MAIL   Вверх
DARKLOTOS
Дата 8.6.2011, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.12.2010

Репутация: нет
Всего: нет



В примере показано только как вытянуть данные.
А можно это как-то сделать используя такую функцию? 
Код

$(document).ready(function(){
  // --------------
  $("#a1").click(
    function () {
      $.ajax({
        type: "POST",
        data: "n=3",
        url: "events.php"
      });    
    });
  // --------------
  $("#loading").ajaxStart(function(){
   $(this).show();
   $("#message").hide();
  });
  $("#loading").ajaxStop(function(){
   $(this).hide();
  });
  $("#message").ajaxComplete(function(){
   $(this).show();
 });  
});

Это код с другого проекта

Это сообщение отредактировал(а) DARKLOTOS - 8.6.2011, 15:15
PM MAIL   Вверх
Evghenusi
Дата 8.6.2011, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

Репутация: 3
Всего: 15



Цитата(DARKLOTOS @  8.6.2011,  14:51 Найти цитируемый пост)
Прочитал. Там только показано как вытягивать данные из БД. Это у меня и так работает, без AJAX
 smile ...нечего мне сказать, попробуй на код посмотреть прищурившись, вдруг поможет  smile 

Код

if($myrow['personal']==1)
{$o="<td class='check'><input type=checkbox name='call_select[]' checked data-on='Personal' data-off='Business' value='$value'></td>";}
else
{$o="<td class='check'><input type=checkbox name='call_select[]' data-on='Personal' data-off='Business'  value='$value'></td>";}
             $o.="<td align=right>{$myrow['cost']}</td>";
             $o.="<td>{$myrow['recipient']}</td>";
             $o.="<td>{$myrow['date_of_call']}</td>";
             $o.="<td>{$myrow['time_of_call']}</td>";
             $o.="<td>{$myrow['duration']}</td>";
             $o.="<td align=right>{$myrow['connection_type']}</td>";
             $o.="<td align=center>{$myrow['volume']}</td>";
             $o.="<td>{$myrow['rouming']}</td>";
             $o.="</thead></tr>";
       }
       $o.="</tbody></table>";
       $o.="<input type='submit' name='set_personal' value='RESULT'>";
       $o.="</form><br>";
в этом случае нет массива, есть длиннюююющая строка, и склеивать соответственно ничего не надо. так же \" заменил на одинарную кавычку '
PM WWW   Вверх
EmilRegis
Дата 8.6.2011, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: 3
Всего: 4



DARKLOTOS, вот всё про ажакс http://javascript.ru/ajax/intro
Просто почитайте, там всё понятно.

Если же используете жквери(как в вашем примере выше), то тут всё ещё проще, хотя лучше сначала понять как это всё работает, а потом уже применять библиотеки.
Код

$.ajax({
  url: "test.html",
  type: 'Post',
  success: function(){
    $(this).addClass("done");
  }
});

Здесь url - адрес, куда отсылается запрос, success - callback-функция, которая вызывается после того как сервер вернёт ответ на ваш запрос. Этот ответ в php возвращается после всех необходимых манипуляций с БД обычным echo
PM MAIL   Вверх
DARKLOTOS
Дата 9.6.2011, 06:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.12.2010

Репутация: нет
Всего: нет



Цитата(Evghenusi @ 8.6.2011,  15:31)
в этом случае нет массива, есть длиннюююющая строка, и склеивать соответственно ничего не надо. так же \" заменил на одинарную кавычку '

Да. Конечно разница ощутима =)
Теперь вообще ничего не выводится =)
И переделывание цикла не решит проблемы с кнопкой
PM MAIL   Вверх
DARKLOTOS
Дата 9.6.2011, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.12.2010

Репутация: нет
Всего: нет



Пойдём более коротким путём.
Есть ли где-нибудь скрипт, который при клике на чекбокс, сразу меняет значение ячейки в БД, без подтверждающих кнопок?!
PM MAIL   Вверх
EmilRegis
Дата 9.6.2011, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: 3
Всего: 4



чем не устраивает
Код

$.ajax({
  url: "test.php",
  type: 'Post',
  success: function(){
    alert('ответ');
  }
});

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0819 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.