За последние 24 часа нас посетили 97210 программистов и 2681 робот. Сейчас ищут 1473 программиста ...

Повторная отправка данных

Тема в разделе "PHP для новичков", создана пользователем Nikolai_, 31 авг 2010.

  1. Nikolai_

    Nikolai_ Активный пользователь

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    Подскажите, пожалуйста, как при обновлении страницы избежать повторной отправки php-скриптом данных в БД со страницы с формами.
     
  2. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Как вариант:
    Обработчик должен быть другим файлом, не там где форма, и после обработки переадресовывать на форму.
     
  3. Nikolai_

    Nikolai_ Активный пользователь

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    А еще какие-нибудь варианты имеются? Неохота дробить файлы на формы и скрипты - это только усложнить структуру. Тем более в одном месте у меня что-то типа комментариев и после отправки сообщения оно тут же должны появляться выше формы.
     
  4. Nikolai_

    Nikolai_ Активный пользователь

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    Прочитал, что повторы можно предотвратить, поставив в конце скрипта переадресацию на самого себя
    PHP:
    1. <?php
    2.     header("Location: script.php");
    3.     exit;
    4. ?>
    Но что-то повторы все равно есть и выводится ошибка

     
  5. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    То что я говорю - это образно. То что прочли Вы - это то же самое. Просто конструкция строится в If-else и в ней встроен весь код, у меня же идёт переадресация сразу на нужный обработчик.

    header нужно ставить до вывода какого либо текста (или формы, как у вас). Причём, после обработчика должен добавляется параметр, который появиться в сообщении, всё хорошо или были какие-либо ошибки.
     
  6. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    if(isset($_GET['ok']))
    {
    echo 'Добавлено';
    }
    else
    {
    //проверки, добавления в базу
    header('location: /index.php?ok');
    exit();
    }
    до этого куска ничего не должно быть выведено.
     
  7. Nikolai_

    Nikolai_ Активный пользователь

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    Сделал формы и скрипты в разных файлах и переадресацию - повторы при обновлении прекратились.

    Еще такой вопрос. Где-то читал, что PHPBB специально слделана промежуточная страница между отравкой сообщения и его появлением в топике - это есть и на этом форуме. И сделано это для снижения нагрузки на БД. Стоит ли сделать такую промежуточную страницу между скриптом-обработчиком и формой? На IPB, кстати, такого нет.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    можно использовать токен


    Nikolai_
    И сделано это для снижения нагрузки на БД. Стоит ли сделать такую

    Ну а у вас нагрузки бешеные или три человека в час тыкаются?