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 :: Добавление лишней строки в базу при использовании header()

 PHP.SU

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


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

> Без описания
Slavenin
Отправлено: 17 Августа, 2010 - 07:45:57
Post Id



Посетитель


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


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




Всем доброго времени суток!
Проблема следующая. Есть форма, данные из которой добавляются в базу. В файле есть сама форма и обработчик для нее, когда пользователь жмет кнопку подключается обработчик, если все хорошо, то строка добавляется в базу после чего его header("Location: xxx.php"); редиректит на следующую страницу, так вот, в момент редиректа в базу добавляется еще одна пустая строка. Мое предположение, что происходит это из-за повторной отправки данных формы при редиректе, но на странице, на которую перенаправляется пользователь, отсутствует скрипт добавления строк в базу, а на исходной все данные проверяются. Подскажите, что происходит и как с этим бороться?
код примерно такой

PHP:
скопировать код в буфер обмена
  1.  здесь идет обработка ошибок, а потом в зависимости от того есть они или нет выполняется то или другое
  2.  
  3.  if(count($err) != 0)
  4.         {
  5.            $objOrder->ErrorPrint($err);
  6.         }
  7.         else
  8.         {
  9.       $sqlComT = "CREATE TABLE `xxx`.`xxx` (`ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `1` VARCHAR( 30 ) ,`2` INT , `3` VARCHAR( 30 ),  `4` VARCHAR( 30 ), `5` VARCHAR( 30 ), `6` VARCHAR( 10 )  ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;";
  10.       $resultT = $objOrder->ConnectDb($sqlComT);
  11.       if (!$resultT)
  12.         {
  13.           echo "
  14.          <script language=\"javascript\">
  15.            alert(\"Попытка создания временной таблицы провалилась..!\")
  16.          </SCRIPT>";
  17.         }
  18.        
  19.       $sqlCom = "INSERT xxx SET xxx = 'NULL', xxx = 'NULL' , xxx = '" .$_POST['xxx'] ."', xxx ='" .$_POST['xxx'] ."', type ='" .$_POST['xxx']  ."'";
  20.       $result = $objOrder->ConnectDb($sqlCom);
  21.       if (!$result)  
  22.         {
  23.           echo "
  24.          <script language=\"javascript\">
  25.            alert(\"При добавлении строки возникли ошибки!\")
  26.          </SCRIPT>";
  27.         }
  28.       header("Location: step2.php");
  29.  
  30.   }

(Отредактировано автором: 17 Августа, 2010 - 11:09:12)

 
 Top
Slavenin
Отправлено: 17 Августа, 2010 - 21:03:22
Post Id



Посетитель


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


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




неужели никто не может объяснить как бороться с этой проблемой? Хм не поверю! Хорошо
 
 Top
JustUserR
Отправлено: 17 Августа, 2010 - 21:12:39
Post Id



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


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


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




Slavenin пишет:
Мое предположение, что происходит это из-за повторной отправки данных формы при редиректе, но на странице, на которую перенаправляется пользователь, отсутствует скрипт добавления строк в базу
В случае если вы осуществляете добавления полученных от пользователя данных в некоторой секции PHP-скрипта которая вызывается на основе определенных параметров - то при выполнении перенаправления на другую секцию которая производит только вывод информации никакой модификации списка данных происходить не должно
Тем не менее в приведенном вами PHP-скрипте использвуется оператор include который как раз-таки в зависимости от переданных пользователем параметров - производит дальнейшую передачу управления некоторой секции PHP-кода в виде подключемой библиотеки В этом случае вы должны учитывать что подключение отдельных PHP-скрипт происходит не интерактивно по отношению к действиям пользователя - и соответственно может оказаться что внутри вашего второго шага выполняется и первый
В качестве решения можно также попробовать использовать статическую HTML-страницу с JS-скриптом которая будет осуществлять динамическое взамодейтсвие с удаленным web-сервером посредством Iframe или AJAX - в таком случае вам не потребуется использовать перенаправления в виде заголовка Location - поскольку создаваемые HTTP-запросы будут использовать лишь для передачи текстовой информации в опредеденном виде


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB