Как удалить метод POST

Тема в разделе "PHP", создана пользователем fredis69, 23 май 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. fredis69

    fredis69 Постоялец

    Регистр.:
    25 окт 2008
    Сообщения:
    84
    Симпатии:
    2
    есть файл в котором находится форма для ввода данных и скрипт добавления этих данных в БД. Данные передаются метадом POST.


    PHP:
    if (empty($_POST))
    {
    Форма для ввода данных
    }
    else
    {
    Скрипт добавления данных в БД
    }
    Проблема следующая: При заполнении формы пользователь нажимает кнопку отправить, страница перезагружается и данные добавляются в БД.
    И если после этого пользователь просто обновит страницу то данные снова добавятся в БД

    Вопрос: Как это исправить?

    Можно ли после скрипта добавления как нибуть удалить POST. Чтобы после обнавления страници не происходило повторное добавление данных в БД.

    Помогите разобраться.
     
  2. urmulti

    urmulti Создатель

    Регистр.:
    22 мар 2009
    Сообщения:
    20
    Симпатии:
    2
    ты на отправки post делай перенаправления на другой файл или переменую а не на post
    и не сравнивай пост а переменую
    if (empty($_POST[переменая]))
     
  3. fredis69

    fredis69 Постоялец

    Регистр.:
    25 окт 2008
    Сообщения:
    84
    Симпатии:
    2
    Какую переменную?

    Чет я недогоняю.

    Если вас не затруднит, то можно поподробнее?
     
  4. BuzzDD

    BuzzDD Постоялец

    Регистр.:
    9 фев 2009
    Сообщения:
    76
    Симпатии:
    5
    Делаешь редирект на ту же страницу после добавления чего-либо юзером и всё:)
    Так:
    PHP:
    if (empty($_POST['VAR'])) // переменная,которая передавалась/передаётся
    {
    Форма для ввода данных
    }
    else
    {
    Скрипт добавления данных в БД
    }  
    А ваще,смотри первую часть поста моего
     
    fredis69 нравится это.
  5. urmulti

    urmulti Создатель

    Регистр.:
    22 мар 2009
    Сообщения:
    20
    Симпатии:
    2
    Ты проверяешь переменую тоись массив с перемеными под название post на есть, нету
    Тоись вот етой функцией empty котороя проверяет масив а не нужную тебе переменую
     
    fredis69 нравится это.
  6. RomAndry

    RomAndry Постоялец

    Регистр.:
    21 ноя 2007
    Сообщения:
    102
    Симпатии:
    24
    PHP:
    header("Location:index.php?time=".time());
     
    fredis69 нравится это.
  7. agent_smit

    agent_smit Постоялец

    Регистр.:
    12 дек 2008
    Сообщения:
    60
    Симпатии:
    11
    После того как данные ушли, вызывай header
    PHP:
    if (empty($_POST['VAR'])) // переменная,которая передавалась/передаётся
    {
    Форма для ввода данных
    }
    else
    {
    Скрипт добавления данных в БД
    header
    ('Location: http://site.ru/');    
    }  
     
    fredis69 нравится это.
  8. microsofd

    microsofd Создатель

    Регистр.:
    25 фев 2008
    Сообщения:
    22
    Симпатии:
    1
    я обычно пишу так :


    HTML:
    
    
    if ($_SERVER['REQUEST_METHOD']=='POST'){header("Location: urpage.php");}else{  ;}
    
    
    

    после перенапрвления на страницу хеадером метод становится ГЕТ по умолчанию
     
  9. fredis69

    fredis69 Постоялец

    Регистр.:
    25 окт 2008
    Сообщения:
    84
    Симпатии:
    2
    Вот мой код:
    PHP:
    <?php 
     
    if (empty($_POST))
    {
    ?>

    <p align="center"><strong class="style_header_text" style="font-size:18px;">Форма для добавления отзыва:</strong></p>
    <table width="730" align="center"><tr><td>
         <form name="form1" method="post" action="guest_book.php">
              <table><tr><td align="right">
              <p class="text"><span style="color:#FF0000">*</span>Ваше имя:</p>
              </td>
              <td>
              <label>
              <input type="text" name="name" class="form_text" style="width:250px">
              </label>
              </td></tr>
              <tr><td></td><td></td></tr><tr><td></td><td></td></tr>
              <tr><td align="right">
              <p class="text"><span style="color:#FF0000">*</span>Кем вы являетесь:</p>
              </td>
              <td>
              <label>
              <select name="status" class="form_text" style="width:250px">
                        <option></option>
                        <option value="1">Гость</option>
                        <option value="2">Клиент</option>
                        <option value="3">Постоянный клиент</option>
                        </select>
              </label>
              </td></tr>
              <tr><td></td><td></td></tr><tr><td></td><td></td></tr>
              <tr><td align="right" valign="top"> 
              <p class="text"><span style="color:#FF0000">*</span>Текст отзыва:</p>
              </td>
              <td>
              <textarea  type="text" name="text" class="form_text" style=" width:500px; height:150px"></textarea>
              </td></tr>
              <tr>
              <td></td><td>
               <label>
              <input type="submit" name="submit" class="button" id="submit" style=" width:75px;" value="Отправить" >
              </label>
              <p class="text" style="margin-left:0">Поля, помеченные <strong><span style="color:#FF0000">*</span></strong>, обязательные для заполнения!</p>
              </td></tr>
             </table>
          </form>
    </td></tr></table>
    <?php
    }
    else
    {
    // обрабатывае пришедшие данные перед вставкой в таблицу БД
        
    $date date ("Y-m-d");
        
    $dat date ("d.m.Y");
        
    $time date("H:i:s");
        if (isset(
    $_POST['name'])){$name $_POST['name'];}
        if (isset(
    $_POST['status'])){$status $_POST['status'];}
        if (isset(
    $_POST['text'])){$text $_POST['text'];}
        
    #удаляем из текста различные слеши, скобки, кавычки;
    $name stripslashes($name);
    #Защищаем от ввода различных тегов и скриптов; 
    $name htmlspecialchars($name);
        
    // проверяем на наличие ошибок (например, длина имени)
        
    $error false;
        
    $errort '';
        if (
    strlen($name) == '')
        {
            
    $error true;
            
    $errort .= 'Вы не ввели своё имя.<br>';
        }
        if (
    strlen($status) == '')
        {
            
    $error true;
            
    $errort .= 'Вы не выбрали кем вы являетесь.<br>';
        }
        if (
    strlen($text) == '')
        {
            
    $error true;
            
    $errort .= 'Вы не ввели текст отзыва.<br>';
        }

    // если ошибок нет, то добавляем данные о юзере в таблицу
    if(!$error)
    {
      
    /*Здесь пишем что можно заносить информацию в базу*/  

      
    $result mysql_query ("INSERT INTO guest (date,time,dat,status,name,text)  VALUES ('$date','$time','$dat','$status','$name','$text')");
      if (
    $result == 'true'
      {
       echo 
    "<p align='center'><h2 align='center'>Ваш отзыв успешо добывлен!</h2></p>";
      }
       else {echo 
    "<table bgcolor='#666666' width='700' align='center'><tr><td><p><h3 align='center' style='color:red;'>Ваш отзыв не добавлен, по техническим причинам, попробуйте позже!</h3></p></td></tr></table>
          <br>
    "
    ;}
      }
    else
    {
    print 
    '<h3 style="color:#FF0000" align="center">Возникли следующие ошибки:</h3><p style="color:#FF0000" align="center">' $errort.'</p><br>';

    // Проверяем статус выбранный пользователем, определяем его и автоматом выводим
    if($status == '')
    {
     
    $stat selected;
    }
    else
    {
      if(
    $status == '1')
      {
       
    $stat1 selected;
      }
      else
      {
        if(
    $status == '2')
        {
         
    $stat2 selected;
        }
        else
        {
          if(
    $status == '3')
          {
           
    $stat3 selected;
          }
        }
      }
    }
    ?>
    <table width="730" align="center"><tr><td>
     <form name="form1" method="post" action="guest_book.php" >
              <table><tr><td align="right">
              <p class="text"><span style="color:#FF0000">*</span>Ваше имя:</p>
              </td>
              <td>
              <label>
              <input type="text" name="name" class="form_text" style="width:250px" value="<?php echo $name?>">
              </label>
              </td></tr>
              <tr><td></td><td></td></tr><tr><td></td><td></td></tr>
              <tr><td align="right">
              <p class="text"><span style="color:#FF0000">*</span>Кем вы являетесь:</p>
              </td>
              <td>
              <label>
              <select name="status" class="form_text" style="width:250px">
                        <option <?php echo $stat?>></option>
                        <option <?php echo $stat1?> value="1">Гость</option>
                        <option <?php echo $stat2?> value="2">Клиент</option>
                        <option <?php echo $stat3?> value="3">Постоянный клиент</option>
                        </select>
              </label>
              </td></tr>
              <tr><td></td><td></td></tr><tr><td></td><td></td></tr>
              <tr><td align="right" valign="top"> 
              <p class="text"><span style="color:#FF0000">*</span>Текст отзыва:</p>
              </td>
              <td>
              <textarea  type="text" name="text" class="form_text" style=" width:500px; height:150px"><?php echo $text?></textarea>
              </td></tr>
              <tr>
              <td></td><td>
               <label>
              <input type="submit" name="submit" class="button" id="submit" style=" width:75px;" value="Отправить" >
              </label>
              <p class="text" style="margin-left:0">Поля, помеченные <strong><span style="color:#FF0000">*</span></strong>, обязательные для заполнения!</p>
              </td></tr>
             </table>
          </form>
    </td></tr></table>
    <?php 
    }
    }
    ?>
    Что делать я не могу понять
     
  10. RomAndry

    RomAndry Постоялец

    Регистр.:
    21 ноя 2007
    Сообщения:
    102
    Симпатии:
    24
    для начала не много научись отделять вывод HTML и PHP иначе функция header не будет корректно работать (кроме случая использования ob_*())
    Обычно это так (простейший вариант:(
    PHP:
    $str '';
    $str.= 'here text';
    $sql 'here sql query';
    $str.= 'here another text';
    // и тогда уже в конце кода
    echo $str;// выведет все собранное
    В твоем случае после добавления записи лучше сделать чуть иначе:
    PHP:
      $err 1;
      
    $result mysql_query ("INSERT INTO guest (date,time,dat,status,name,text)  VALUES ('$date','$time','$dat','$status','$name','$text')"); 
      if (
    $result == 'true')  { 
        
    $err 0;
      }else {
        
    $err 2;
      }
      
    header("Location:index.php?err=".$err."&time=".time());
      exit; 

    и далее в начале кода обрабатываем переменную $_GET['err']
    PHP:
    switch(intval($_GET['err']) {
      case 
    0:
        echo 
    'ok';
      break;
      case 
    1:
        echo 
    'error other';
      break;
      case 
    2:
        echo 
    'error Insert';
      break;
      default:
        echo 
    'other error';
      break;
    }
     
    fredis69 нравится это.
Статус темы:
Закрыта.