[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHP form передача данных
mefistofel
Привет собратья по оружию

сори за дурацкий вопрос

короче

есть форма отправки данных в скрипт

форма отрабатывает нормально скрипт принимает ее значения и и успешно выполняется

беда в следующем после оправки данных и отработки скрипта

если нажать обновить страничку скрипт повторно схавает данные которые были до этого отправлены формой и успешно их отработает

данные из формы отправляются методом post

я пробовал unset массив $_POST ну все равно сцуко блин откудато получает эти данные

в общем беда как грохнуть эти данные

подскажите где искать чето даже не допераю как спросить это у поисковика ))



Спустя 2 минуты, 25 секунд (5.11.2009 - 17:10) stepan написал(а):
Для начала показывай свой код, как ты грохаешь post'овские переменные?
unset должен тебе помочь наверняка.

Спустя 3 минуты, 56 секунд (5.11.2009 - 17:14) mefistofel написал(а):
я ж написал что делаю unset($_POST);

даже после этого вывожу массив на проверку убил ли я его

да убивается ничего не показывает

--
но блин по нажатию обновить опять передаются данные

==
лично мое мнение что эти данные где то в куках браузера

и типо форма по обновлению повторно их шлет

как от этого гоффна избавится

Спустя 12 минут, 27 секунд (5.11.2009 - 17:26) stepan написал(а):
если в куках хранится, что мало вероятно, то чисти куки.
это скорее всего у тебя из буфера закидываются данные по новой.

Спустя 5 минут, 6 секунд (5.11.2009 - 17:31) mefistofel написал(а):
может и в правду с буфера кидаются

есть ли способ их убить в буфере?

Спустя 10 минут, 34 секунды (5.11.2009 - 17:42) Gabriel написал(а):
mefistofel
после успешной отправки данных делаеш гдето так и никаких унсетов ненужно.
header('location: '. $_SERVER['PHP_SELF'] .'?rnd='. time());

спионерено с чистой совестью отсуда

Спустя 6 минут, 8 секунд (5.11.2009 - 17:48) mefistofel написал(а):
ооо сенск это мне и надо было biggrin.gif

Спустя 1 минута, 20 секунд (5.11.2009 - 17:49) sergeiss написал(а):
Gabriel да и на форуме много об этом писалось уже smile.gif

Спустя 13 минут, 45 секунд (5.11.2009 - 18:03) Gabriel написал(а):
sergeiss
а о хедерах, сбросах пост параметров и тд говорилось мульены раз это чистая правда.
Так яж рекламой занимаюсь, или ты думал только ты можеш? biggrin.gif

Спустя 1 час, 39 минут, 11 секунд (5.11.2009 - 19:42) sergeiss написал(а):
Цитата (Gabriel @ 5.11.2009 - 19:03)
Так яж рекламой занимаюсь

А... Вон дело в чем... Ну, тады звиняй wink.gif

Спустя 5 дней, 5 часов, 31 минута, 47 секунд (11.11.2009 - 01:14) onzone написал(а):
Народ, аналогичная у меня проблема с гостевой книгой! При обновленни страницы заполняет поля данными из базы, причём только 2 поля (имя, и сообщение) и заполняются они только теми значениями, которые были добавлены в первом сообщении,если добавляю другие сообщения то всё равно заполняет данными первого сообщения , остальные 3 чистятся, просмотрел всесь код вроде все норм. Может быть подскажите как решить данную проблему? Желательно без помощи
header('location: '. $_SERVER['PHP_SELF'] .'?rnd='. time());

Спустя 2 минуты, 48 секунд (11.11.2009 - 01:17) Gabriel написал(а):
onzone
ну а код где спрятан?

Спустя 49 минут, 34 секунды (11.11.2009 - 02:06) S{oRpiO написал(а):
заместо этого

header('location: '. $_SERVER['PHP_SELF'] .'?rnd='. time());

можно сделать еще так:

Висит таблица в mysql в которой для каждой вот такой гадкой весчи есть отдельный столбец.

Принцип такой при открытии формы в скрытое поле заносится значение 0 или 1
после отправки перед обработкой данных с формы идет проверка если число из скрытого поля совпадает с числом из базы то заносим данные из формы и обновляем число заодно можно узнать сколько раз отправлялись данные а если не совподает то не добавляем.

ну тут есть минус если ктото пока ты заполнял форму уже отправил свою то не примет

такой принцип можно использовать в админке если ты один админиш сайт...

сильно не пинайте знаю способ дурацкий но после 6 часов писанины кода мозг мало варит...

Спустя 9 часов, 32 минуты, 42 секунды (11.11.2009 - 11:39) onzone написал(а):
Я думаю будет целесообразным вывесить отрезок кода. на рассмотрение. Я думаю. Может быть дело в куках. Но у меня регистрация и гостевая книга изпользует разные БД. Вывешу код:Сорь за такой объём заранее):
Цитата


<?php

session_start();
$sid_add_theme = session_id();
// Устанавливаем соединение с базой данных
include "21/config.php";
$error = "";
$action = "";
// Возвращаем значение переменной action, переданной в урле
$action = $_POST["action"];
// Если оно не пусто - добавляем сообщение в базу данных
?>

<?

if (!empty($action))
{
  // Проверяем совпадает ли идентификатор сессии с
  // переданным в форме - защита а авто-постинга

  if($sid_add_theme != $_POST['sid_add_theme'])
  {
    $action = "";
    $error = $error."<LI>Ошибка добавления сообщения в гостевую книгу\n";
  }
  // Проверяем сообщение на слишком длинные слова
  $lenmsg = strlen($msg);
  $templen = 0;
  $temp = strtok($msg, " ");
  if (strlen($msg)>60)
  {
    while ($templen < $lenmsg)
    {
      if (strlen($temp)>60)
      {
        $action = "";
        $error = $error."<LI>Текст сообщения содержит слишком много символов без пробелов\n";
        break;
      }
      else
      {
        $templen = $templen + strlen($temp) + 1;
      }
      $temp = strtok(" ");           
    }     
  }

 
  // Проверяем правильность ввода информации в поля формы
  if (empty($_POST["msg"]))
  {
    $action = "";
    $error = $error."<LI>Вы не ввели сообщение\n";
  }
  if (empty($_POST["name"]))
  {
    $action = "";
    $error = $error."<LI>Вы не ввели имя\n";
  }

  // При помощи регулярных выражений проверяем правильность ввода e-mail
  if(!empty($_POST["email"]))
  {
    if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST["email"]))
    {
      $action = "";
      $error = $error."<LI>Неверно введен е-mail.&nbsp Введите e-mail в виде <i>something@server.com</i> \n";
    }
  }

 
  // Обрабатываем HTML-тэги и скрипты в сообщении и информации
  // об авторе, ограничиваем объём сообщения

 
  $name = substr($_POST["name"],0,32);
  $name = htmlspecialchars(stripslashes($name));
   
  $city = substr($_POST["city"],0,32);
  $city = htmlspecialchars(stripslashes($city));
  $email = substr($_POST["email"],0,32);
  $email = htmlspecialchars(stripslashes($email));
  $url = substr($_POST["url"],0,60);
  $url = htmlspecialchars(stripslashes($url));
  $msg = substr($_POST["msg"],0,1024);
  $msg = htmlspecialchars(stripslashes($msg));
 
  // Добавляем протокол в url, если пользователь забыл это сделать сам
  $url = strtr($url, "HTPF", "htpf");
  if (trim($url)!="")
  {
    if (strtolower((substr($url, 0, 7))!="http://") && (strtolower(substr($url, 0, 7))!="ftp://")) $url="http://".$url;
  } 
     
  // Пытаемся вырезать мат, насколько это возможно ;-)
  $search_bad_words = array("'хуй'si","'пизд'si","'ёб'si",
                          "'сука'si","'суки'si","'дроч'si","'хуя'si","'ссуч'si");
  $replace = array("*","*","*","*","*","*","*","*");
  $msg = preg_replace($search_bad_words,$replace,$msg);
  $name = preg_replace($search_bad_words,$replace,$name);
  $city = preg_replace($search_bad_words,$replace,$city);

  if (empty($error))
  {
    $msg = nl2br($msg);
    // Обрабатываем встроенные тэги
    $msg = str_replace("","<u>",$msg);
    $msg = str_replace("[U]","<u>",$msg);
    $msg = str_replace("","<i>",$msg);
    $msg = str_replace("[I]","<i>",$msg);
    $msg = str_replace("","<B>",$msg);
    $msg = str_replace("[B]","<B>",$msg);
    $msg = str_replace("[sub]","<SUB>",$msg);
    $msg = str_replace("[SUB]","<SUB>",$msg);
    $msg = str_replace("[sup]","<SUP>",$msg);
    $msg = str_replace("[SUP]","<SUP>",$msg);
    $msg = str_replace("
","</u>",$msg);
    $msg = str_replace("[/U]","</u>",$msg);
    $msg = str_replace("
","</i>",$msg);
    $msg = str_replace("[/I]","</i>",$msg);
    $msg = str_replace("
","</B>",$msg);
    $msg = str_replace("[/B]","</B>",$msg);
    $msg = str_replace("[/SUB]","</SUB>",$msg);
    $msg = str_replace("[/sub]","</SUB>",$msg);
    $msg = str_replace("[/SUP]","</SUP>",$msg);
    $msg = str_replace("[/sup]","</SUP>",$msg);
    $msg = eregi_replace("(.*)\\[url\\](.*)\\[/url\\](.*)","\\1<a href=\\2>\\2</a>\\3",$msg);
    $msg = str_replace("\n"," ",$msg);
    $msg = str_replace("\r"," ",$msg);
    // Заменяем все одинарные кавычки обратными
    // защита от инъекционных запросов

    $name = str_replace("'","`",$name);
    $city = str_replace("'","`",$city);
    $email = str_replace("'","`",$email);
    $url = str_replace("'","`",$url);
    $msg = str_replace("'","`",$msg);
    // Запрос к базе данных на добавление сообщения
    $query = "INSERT INTO guest VALUES (0,
                                        '
$name',
                                        '
$city',
                                        '
$email',
                                        '
$url',
                                        '
$msg',
                                        '-',
                                        NOW(),
                                        'show');"
;
    if(mysql_query($query))
    {
      // Если в конфигурационном файле $sendmail = true отправляем уведомление
      if($sendmail)
      {
        $thm = "guestbook - a new post";
        $msg = "post: $msg\nname: $name";
        mail($valmail, $thm, $msg);
      }
      // Возвращаемся на главную страницу если всё прошло удачно
      print "<HTML><HEAD>\n";
      print "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=http://localhost:8080/index_2.php'>\n";
      print "</HEAD></HTML>\n";
      exit();
    }
    else
    {
      // Выводим сообщение об ошибке в случае неудачи
      echo "<a href='index_2.php'>Вернуться</a>";
      echo("<P> Ошибка при добавлении сообщения</P>");
      echo("<P> $query</P>");
      exit();
    }
  }
}


if (empty($action))
{
?>


<?


  // Осуществляем соединение с базой данных
 
  // Извлекаем из строки запроса параметр start

  if(isset($_GET['start'])) $start = $_GET['start'];
  else $start = "";
  // $start может принимать либо числовые значения, либо
  // пустое значение

  if(!preg_match("|^[\d]+$|",$start) && !empty($start)) exit();
  // Стартовая точка
  if (empty($start)) $start = 0;
  $start = intval($start);
  if ($start < 0) $start = 0;
  // Запрашиваем общее число отображаемых сообщейний
  $query = "SELECT count(*) FROM guest
            WHERE hide = 'show'"
;
  $tot = mysql_query($query);
  // Запрашиваем сами сообщения
  $query = "SELECT * FROM guest
            WHERE hide = 'show'
            ORDER BY puttime
            DESC LIMIT
$start, $pnumber";
  $thm = mysql_query($query);
  if(!$tot || !$thm)
  // Общее число отображаемых сообщений
  $count= mysql_result($tot,0);

  // Выводим ссылки на предыдущие и следующие сообщения
  if ($start > 0)  print "<img style='margin-right: 10px' src='21/images/arrow1.gif' border='0' width=7 height=17 align=middle><A class=link href=index.php?start=".($start - $pnumber).">Предыдущие</A></em> ";
  if ($count > $start + $pnumber)  print " <A class=link href=21/index.php?start=index.php?start=".($start + $pnumber).">Следующие</A><img style='margin-left: 10px' src='images/arrow2.gif' border=0 width=7 height=17 align=middle> \n";
  while($themes = mysql_fetch_array($thm))
  {
    // Вытаскиваем переменные из базы данных
    $name = trim($themes['name']);
    $city = trim($themes['city']);
    $email = trim($themes['email']);
    $url = trim($themes['url']);
    $msg = trim($themes['msg']);
    $answer = trim($themes['answer']);

?>
<table width="647" border="0" cellpadding="0" cellspacing="0" bgcolor="#F5F5F5" style="border:1px solid #cccccc;">
    <!--
DWLayoutTable-->
    <
tr>
      <
td width="11" height="37" valign="top"><!--DWLayoutEmptyCell--> </td>
      <
td width="86" valign="left"><div align="left"> <strong> <? echo $name?>
            <?
if (!empty($city)) print "($city)"; ?> </strong>
      </
div></td>
      <
td width="145"><div align="left">
        <? if (!empty($email)) print "e-mail: <a class=link href=mailto:$email>$email</a>  "; ?>
      </div></td>
      <
td width="143"> <div align="left">
        <? if (!empty($url)) print "www: <a class=link href='$url'>$url</a>"; ?>
      </div></td>
      <
td width="154"><div align="left">от: <? print $themes['puttime']; ?></div></td>
    </
tr>
   
    <
tr>
      <
td height="36" colspan="5"bgcolor="#CCCCCC"><div align="left"><? echo $msg; ?> <?
        if (!empty($answer) && $answer != "-" )
        {
          print "<p class=panswer>Администратор:&nbsp$answer</p>";
        }         
        ?></div></td>
    </
tr>
  </
table><?
  }
  print '<a class=link href=21/addrec.php>Написать сообщение</A>    ';
  if ($start != 0) print " <img style='margin-right: 10px' src='21/images/arrow1.gif' border='0' width=7 height=17 align=middle><A class=link href=index.php?start=".($start - $pnumber).">Предыдущие</A> ";
  if ($count > $start + $pnumber) print " <A class=link href=21/index.php?start=".($start + $pnumber).">Следующие</A><img style='margin-left: 10px' src='images/arrow2.gif' border=0 width=7 height=17 align=middle> \n";
  if ($count > $start + $pnumber) $count = $start + $pnumber;
?>
<?php


if (!isset($myrow['avatar']) or $myrow['avatar']=='') {
if (isset($_COOKIE['login']))
{
echo'value="'.$_COOKIE['login'].'">';
}
if (isset($_COOKIE['password']))
{
echo' value="'.$_COOKIE['password'].'">';
}
}

else

include
"111.php" ;

}
?>


<?php

  // Выводим сообщение об ошибке
  if (!empty($error))
  {
    print "<P><font color=green>Во время добавления записи произошли следующие ошибки: </font></P>\n";
    print "<UL>\n";
    print $error;
    print "</UL>\n";
  }

?>
</td></tr></table>


Спустя 6 минут, 51 секунда (11.11.2009 - 11:46) onzone написал(а):
Цитата (S{oRpiO @ 10.11.2009 - 23:06)
заместо этого

header('location: '. $_SERVER['PHP_SELF'] .'?rnd='. time());

можно сделать еще так:

Висит таблица в mysql в которой для каждой вот такой гадкой весчи есть отдельный столбец.

Принцип такой при открытии формы в скрытое поле заносится значение 0 или 1
после отправки перед обработкой данных с формы идет проверка если число из скрытого поля совпадает с числом из базы то заносим данные из формы и обновляем число заодно можно узнать сколько раз отправлялись данные а если не совподает то не добавляем.

ну тут есть минус если ктото пока ты заполнял форму уже отправил свою то не примет

такой принцип можно использовать в админке если ты один админиш сайт...

сильно не пинайте знаю способ дурацкий но после 6 часов писанины кода мозг мало варит...

Если можешь то помоги плиз с реализацией на основе моего примера.

Спустя 1 день, 11 часов, 28 минут, 54 секунды (12.11.2009 - 23:15) onzone написал(а):
Народ РЕШИЛ СВОЮ ПРОБЛЕМУ!!!!!!!!
Дело в подключению к форме а вот решение!!!! Никогда echo не используйте при добавлении в гостевую книгу



<textarea name="msg" cols="24" rows="4"><? isset ($msg); unset($msg);?></textarea>

Вот в чём была трабла!!! тему можно закрывать!!


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.