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]   

> Описание: Как сделать что бы результат выдавался однократно?
Qwertty
Отправлено: 23 Июня, 2015 - 16:00:46
Post Id


Новичок


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


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




Приветствую ещё раз Улыбка
Проблема в следующем. Обновляю значения, допустим, 10-ти полей, и скрипт соотв-но срабатывает 10 раз. Ну и результат мне так же выводится 10 раз, что мне не надо, т.к. на основе этого результата jS-скрипт будет выполнять действия. jS-скрипту в данном случае надо поймать при успешном срабатывании обработчика цифру 2, и выполнить действие. А он получает не 2, а 2222222222, и соотв-но выдает ошибку.

Вот код обработчика:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. foreach($_POST["id"] AS $id)
  4.  {
  5.  $brand = mysql_real_escape_string ($_POST["brand"][$id]);
  6.  $model = mysql_real_escape_string ($_POST["model"][$id]);
  7.  $color = mysql_real_escape_string ($_POST["color"][$id]);
  8.  $price = mysql_real_escape_string ($_POST["price"][$id]);
  9.  $update=" UPDATE `spisok` SET `brand` = '$brand', `model` = '$model', `color` = '$color', `price` = '$price' WHERE `id` = $id LIMIT 1 ; ";
  10.  
  11.  //mysql_query($update) or die( mysql_error() );
  12.  
  13.  if(mysql_query($update)){
  14.        echo "2";
  15.    }
  16.    else{
  17.        echo 'No update';
  18.    }
  19.  }
  20.  
  21.  
 
 Top
Viper
Отправлено: 23 Июня, 2015 - 22:02:46
Post Id



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


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


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




Qwertty зачем вы запрос в цикле делаете?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Ts.Saltan
Отправлено: 23 Июня, 2015 - 22:35:58
Post Id



Посетитель


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


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




запихнуть это всё в функцию
в цикле оставить
PHP:
скопировать код в буфер обмена
  1.  
  2. if(!mysql_query($update)){
  3.        return  'No update';
  4.    }
  5.  

а за пределы цикла вынести return "2";

и где-нибудь в скрипте вызывать
echo myFunc();

(Отредактировано автором: 23 Июня, 2015 - 22:38:07)

 
 Top
Qwertty
Отправлено: 24 Июня, 2015 - 16:17:36
Post Id


Новичок


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


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




Viper пишет:
Qwertty зачем вы запрос в цикле делаете?

А каким образом мне скрипт тогда весь список обновит, если без цикла? Или я чё не догоняю?
 
 Top
IllusionMH
Отправлено: 24 Июня, 2015 - 17:03:02
Post Id



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


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


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




Qwertty, а если через IN оператор ?
 
 Top
Qwertty
Отправлено: 24 Июня, 2015 - 17:47:29
Post Id


Новичок


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


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




Ts.Saltan пишет:
запихнуть это всё в функцию
в цикле оставить
PHP:
скопировать код в буфер обмена
  1.  
  2. if(!mysql_query($update)){
  3.        return  'No update';
  4.    }
  5.  

а за пределы цикла вынести return "2";

и где-нибудь в скрипте вызывать
echo myFunc();


Попробовал. В принципе работает. Только return заменил на echo.
Насчёт echo myFunc(); вообще не понял.

По сути скрипт работает так, что echo "2" выводится всегда. а если вылезет NoUpdate хоть 100 раз то jQuery-скрипт просто ошибку выдаст. в общем этакий костыль получился.
(Добавление)
IllusionMH пишет:
Qwertty, а если через IN оператор ?


С in оператором не знаком, и яндекс ничё путного не выдал. Но по идее я так порыл в инете, везде пишут, что кучу записей в БД можно только циклом записать, в один запрос не получится никак.
 
 Top
IllusionMH
Отправлено: 24 Июня, 2015 - 18:32:44
Post Id



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


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


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




Qwertty, а если так http://bfy[dot]tw/Urv ? Если с чем-то не знаком, то можно ж поискать инфу. Кроме яндекса, еще есть официальные доки.

Ну еще подождем тех кто лучше шарит и может они знают какие-то подводные камни такого подхода. Кроме невозможности использовать значения для подготовленных запросов

(Отредактировано автором: 24 Июня, 2015 - 18:36:13)

 
 Top
Viper
Отправлено: 24 Июня, 2015 - 19:20:07
Post Id



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


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


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




IllusionMH скорее всего нет. Т.к. при IN все записи с указанными id будут иметь одно и то же значение(хотя могу ошибаться, и может из-за порядка id в IN).

ИМХО такие запросы лучше через транзакции делать.

Qwertty как-то так

PHP:
скопировать код в буфер обмена
  1. function update() {
  2.         $result = 'Успешно обновлено!';
  3.         $errors = array();
  4.  
  5.         foreach ($_POST['id'] as $id) {
  6.                 // Тут запросы и прочая фигня
  7.                
  8.                 if (!mysql_query($update)) {
  9.                         $errors[] = $id;
  10.                 }
  11.         }
  12.  
  13.         if (!empty($errors)) {
  14.                 $result = 'Ошибка при обновлении записей с ID '.implode(', ', $errors);
  15.         }
  16.  
  17.         return $result;
  18. }


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


Новичок


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


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




Viper пишет:

Qwertty как-то так

PHP:
скопировать код в буфер обмена
  1. function update() {
  2.         $result = 'Успешно обновлено!';
  3.         $errors = array();
  4.  
  5.         foreach ($_POST['id'] as $id) {
  6.                 // Тут запросы и прочая фигня
  7.                
  8.                 if (!mysql_query($update)) {
  9.                         $errors[] = $id;
  10.                 }
  11.         }
  12.  
  13.         if (!empty($errors)) {
  14.                 $result = 'Ошибка при обновлении записей с ID '.implode(', ', $errors);
  15.         }
  16.  
  17.         return $result;
  18. }


Спасибо, теперь работает как и задумывалось Превосходно
 
 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