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(location)

 PHP.SU

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


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

> Без описания
makc9I
Отправлено: 02 Июля, 2012 - 20:53:45
Post Id


Новичок


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


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




Вот весь код до вызова хедера.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. define('FILE_NAME','Users.xml');
  4. function ClearData($data){
  5.         return stripslashes(trim(strip_tags($data)));
  6. }
  7. if($_SERVER['REQUEST_METHOD']=='POST'){
  8.         $name = clearData($_POST["name"]);
  9.         $email = clearData($_POST["email"]);
  10.         $msg = clearData($_POST["msg"]);
  11.         $ip = $_SERVER["REMOTE_ADDR"];
  12.         $d = time();
  13. }
  14. $dom = new DOMDocument("1.0","utf-8");
  15. $dom->formatOutput = true;
  16. $dom->preserveWhiteSpace = false;
  17. if (file_exists(FILE_NAME)) {
  18.         $dom->Load(FILE_NAME);
  19.         $root = $dom->documentElement;
  20. }else{
  21.         $root = $dom->createElement("users");
  22.         $dom->appendChild($root);
  23. }
  24. $n = $dom->createElement("name",$name);//создаем элемент имя
  25. $e = $dom->createElement("email",$email);//email
  26. $m = $dom->createElement("msg",$msg);//message
  27. $i = $dom->createElement("ip",$ip);//ip
  28. $dt = $dom->createElement("datetime",$d);//date
  29. $user = $dom->createElement("user");
  30. $user->appendChild($n);
  31. $user->appendChild($e);
  32. $user->appendChild($m);
  33. $user->appendChild($i);
  34. $user->appendChild($dt);
  35. $root->appendChild($user);
  36. $dom->save(FILE_NAME);
  37. header("location:gbook.php");exit;
  38.  


почему перезагрузка не срабатывает, а происходит зацикливание? Уже не первый раз натыкаюсь на подобные проблемы, никак не могу допереть, где тут может быть посыл других заголовков.
(Добавление)
как только запостил код, заметил, что 1ая строка кода пустая. В файле такого нет. Может дело в кодировке?
 
 Top
OrmaJever Модератор
Отправлено: 02 Июля, 2012 - 20:57:58
Post Id



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


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


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




Если этот файл называется gbook.php то назовите причину почему зацикливатся не должно?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
makc9I
Отправлено: 02 Июля, 2012 - 21:00:45
Post Id


Новичок


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


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




ниже идет форма, в которую вводятся данные и отсылаются методом POST
 
 Top
Green
Отправлено: 02 Июля, 2012 - 21:01:22
Post Id



Частый гость


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


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




makc9I пишет:
а происходит зацикливание?

Знаете что это? Это когда редирект не имеет придела. То есть, редиректит на gbook.php, а в этом файле снова тот же редирект. Вот и происходит зацикливание. У Вас нету никаких ограничителей. Ну лично я их не заметил. То есть редирект у Вас выполняется в любом случае...

Короче, проще говоря, Вы редиректите в тот же файл, где и происходит этот редирект.

(Отредактировано автором: 02 Июля, 2012 - 21:04:25)

 
 Top
makc9I
Отправлено: 02 Июля, 2012 - 21:05:33
Post Id


Новичок


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


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




а каким образом обычно действую в случае, когда заполняется форма, обрабатывающаяся этим же файлом, и чтобы данные при обновлении страницы повторно не обрабатывались(не летели в БД, в файл или еще куда повторно)?
Вроде делал так, и все работало. Делал по видеокурсу от "Специалиста".

(Отредактировано автором: 02 Июля, 2012 - 21:06:49)

 
 Top
OrmaJever Модератор
Отправлено: 02 Июля, 2012 - 21:10:19
Post Id



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


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


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




makc9I пишет:
ниже идет форма, в которую вводятся данные и отсылаются методом POST

makc9I Разве в вашем коде есть хоть какое-нибудь условие которое остановит редирект?
makc9I пишет:
а каким образом обычно действую в случае, когда заполняется форма, обрабатывающаяся этим же файлом, и чтобы данные при обновлении страницы повторно не обрабатывались(не летели в БД, в файл или еще куда повторно)?

Нужно генерировать случайную строку, записывать её в сесию и скрытое поле в форме, и проверять перед записью значения на совпадение.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
makc9I
Отправлено: 02 Июля, 2012 - 21:20:08
Post Id


Новичок


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


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




почему тогда работает такой код?
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. define("GBOOK","gbook.xml");
  3. if($_SERVER["REQUEST_METHOD"] == "POST"){
  4.         $nameTxt = addslashes(stripslashes(trim(strip_tags($_POST['name']))));
  5.         $emailTxt = stripslashes(trim(strip_tags($_POST['email'])));
  6.         $msgTxt = addslashes(stripslashes(trim(strip_tags($_POST['msg']))));
  7.         $ipTxt = $_SERVER["REMOTE_ADDR"];
  8.         $dateTxt = date("d-m-Y H:i:s");
  9.  
  10.         $dom = new DOMDocument("1.0", "utf-8");
  11.         if (file_exists(GBOOK)) {
  12.                 // Файл есть
  13.                 // Загрузка XML-документа в объект
  14.                 $dom->load(GBOOK);
  15.                 // Получение корневого элемента
  16.                 $users = $dom->documentElement;
  17.         } else {
  18.                 // Файла нет
  19.                 // Создание корневого элемента
  20.                 $users = $dom->createElement("users");
  21.                 // Привязка к объекту
  22.                 $dom->appendChild($users);
  23.         }
  24.         // Создание новых XML-элементов
  25.         $user = $dom->createElement("user");
  26.  
  27.         // Элемент name
  28.         $name = $dom->createElement("name");
  29.         // Текстовое содержимое узла
  30.         $nametext = $dom->createTextNode($nameTxt);
  31.         // Присоединение узлов
  32.         $name->appendChild($nametext);
  33.         $user->appendChild($name);
  34.  
  35.         // Элемент email
  36.         $email = $dom->createElement("email");
  37.         // Текстовое содержимое узла
  38.         $emailtext = $dom->createTextNode($emailTxt);
  39.         // Присоединение узлов
  40.         $email->appendChild($emailtext);
  41.         $user->appendChild($email);
  42.  
  43.         // Элемент msg
  44.         $msg = $dom->createElement("msg");
  45.         // Текстовое содержимое узла
  46.         $msgtext = $dom->createTextNode($msgTxt);
  47.         // Присоединение узлов
  48.         $msg->appendChild($msgtext);
  49.         $user->appendChild($msg);
  50.  
  51.         // Элемент ip
  52.         $ip = $dom->createElement("ip");
  53.         // Текстовое содержимое узла
  54.         $iptext = $dom->createTextNode($ipTxt);
  55.         // Присоединение узлов
  56.         $ip->appendChild($iptext);
  57.         $user->appendChild($ip);
  58.  
  59.         // Поле date
  60.         $date = $dom->createElement("date");
  61.         // Текстовое содержимое узла
  62.         $datetext = $dom->createTextNode($dateTxt);
  63.         // Присоединение узлов
  64.         $date->appendChild($datetext);
  65.         $user->appendChild($date);
  66.        
  67.         // Присоединение нового элемента к корневому
  68.         $users->appendChild($user);
  69.  
  70.         // Сохранение файла
  71.         $dom->save(GBOOK);
  72.         header("Location: ".$_SERVER["PHP_SELF"]);
  73.         exit;
  74. }
  75. ?>
  76.  
  77. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  78.  
  79. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
  80. <head>
  81.         <title>Гостевая книга</title>
  82.         <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
  83. </head>
  84. <body>
  85.  
  86. <h1>Гостевая книга</h1>
  87.  
  88. <form action="<?PHP echo $_SERVER['PHP_SELF']; ?>" method="post">
  89.  
  90. Ваше имя:<input type="text" name="name" />Ваш E-mail:<input type="text" name="email" />Сообщение:<textarea name="msg" cols="50" rows="5"></textarea><input type="submit" value="Добавить!" />
  91.  
  92. </form>
  93.  
  94. <?PHP
  95. if(file_exists(GBOOK)){
  96.         $users = simplexml_load_file(GBOOK);
  97.         //$users = (array)$sxml;
  98.         //$users = array_reverse($users['user']);
  99.         echo "Записей в Гостевой книге: ".count($users)."</p>";
  100.         foreach($users->user as $user){
  101.                 echo <<<LABEL
  102.                 <hr>
  103.                 <p>
  104.                         <b><a href="mailto:{$user->email}">{$user->name}</a></b> [{$user->ip}] @ {$user->date}
  105.                         <br />{$user->msg}
  106.                 </p>
  107. LABEL;
  108.         }
  109. }else{
  110.         echo "<p>Записей в Гостевой книге: 0</p>";
  111. }
  112. ?>
  113.  
  114. </body>
  115. </html>

это рабочий пример из видеокурса.
(Добавление)
Все понял, туплю, просто нужна проверка на метод POST, при перезагрузке заголовком он сменится на GET.
 
 Top
Green
Отправлено: 02 Июля, 2012 - 21:21:59
Post Id



Частый гость


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


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




makc9I пишет:
почему тогда работает такой код?

Да потому что в этом коде есть условие:
PHP:
скопировать код в буфер обмена
  1. if($_SERVER["REQUEST_METHOD"] == "POST"){

Редирект происходит только если оно выполняется.
Поэтому нету зацикливания.

(Отредактировано автором: 02 Июля, 2012 - 21:22:28)

 
 Top
makc9I
Отправлено: 02 Июля, 2012 - 21:26:17
Post Id


Новичок


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


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




Да, затупил я конкретно. Спасибо за разъяснения. Как только запостил код, сам и врубился Улыбка
 
 Top
Green
Отправлено: 02 Июля, 2012 - 21:30:48
Post Id



Частый гость


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


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




makc9I пишет:
Да, затупил я конкретно. Спасибо за разъяснения. Как только запостил код, сам и врубился



Не удивительно, очень часто человек понимает в чем ошибся, только после создания темы на форуме. Факт! Радость Закатив глазки
 
 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