Как предотвращать возвращение в первоначальную инстанцию формуляра?

Имея это:


Я хочу, что, сделав insert, переменная $_POST['newsemail'] будьте удален, так как, перезагрузив страницу, он вновь пробует делать insert.

Также существовало бы делать это каким-то другим способом, но со мной не случается, так как этот формуляр - в footer страницы ( footer будь в файле в часть "template/footer.php")

Какие выборы у меня есть, чтобы делать нечто похожее?

это - то, что я хочу предотвратить: introducir la descripción de la imagen aquí

Я изменил титул вопроса

6
задан 11.11.2016, 15:16
4 ответа

Ты можешь использовать функцию php unset.

unset() разрушь определенные переменные.

Поведение unset() внутри функции смоги меняться в зависимости от какого типа переменной, которую говорится о том, чтобы разрушать.

Если глобальная переменная unset() внутри функции, только локальная переменная разрушена. Переменная в среде вызова поддержит ту же стоимость, предыдущую вызову в unset().

Я оставляю тебе ссылку в учебник: http://php.net/manual/es/function.unset.php

Пример:

$foo = 'bar';
unset($foo);

EDIT

Попытайся добавлять это:

<script>
    var cuenta=0;
    function enviado() {
        if (cuenta == 0) {
            cuenta++;
            return true;
        } else {
            return false;
        }
    }
</script>

После в этикетке form ты должен добавлять следующее: onSubmit="return enviado()"

EDIT 2

Решение в этом случае простое, но требует маленького изменения в функции, которая сохраняет данные о формуляре. Чтобы предотвращать это сообщение, что ты должен делать, состоит в том, чтобы пересылать пользователя после того, как сохраняет изменения.

Представь, что нынешняя ситуация:

El usuario entra en /contacto.php, rellena el formulario y le da a Enviar.
El script contacto.php procesa los datos del formulario. Si hay errores, vuelve a mostrar la página con un mensaje. Si todo está bien, guarda los datos y muestra un mensaje de tipo "Hemos recibido tu mensaje. Gracias por contactarnos. Te responderemos pronto".

То, что нужно менять, состоит, в том, что contacto.php, сохраняли данные о формуляре, он должен пересылать в другую страницу (например в исходную страницу) вместо того, чтобы показывать результат на той же странице. Так уже оно не явится больше этим сообщением подтверждения возвращения в первоначальную инстанцию формуляра. Если ты программируешь PHP "в волосы", перенаправление - это такое легкое как делать header('Location: '.$url);

Я это достал отсюда: http://librosweb.es/foro/pregunta/983/como-hago-para-evitar-el-mensaje-confirmar-reenvio-del-formulario/

3
ответ дан 24.11.2019, 12:39
  • 1
    Меня продолжают вытекать это, перезагрузив pá gina: i.imgur.com/VjzYnyr.png –  Pavlo B. 11.11.2016, 13:59
  • 2
    Попытайся помещать html под кодом php –   11.11.2016, 14:00
  • 3
    Я издал вопрос, поместил полный код footer –  Pavlo B. 11.11.2016, 14:02
  • 4
    Я издал мой ответ @PavloB. –   11.11.2016, 14:17
  • 5
    <form action="" method="post" onSubmit="return enviado()"> я существую añ adido это и <script>...</script>, которые ты прокомментировал мне, но aú n así он продолжает появляться у меня alert достигает для " подтверждать отправление formulario" перезагрузив pá gina, введя почту в поле –  Pavlo B. 11.11.2016, 14:25

Есть форма, которую это называет PRG (Пост-Редирект-Хет) Паттерн, который запрещает посылать формуляры из-за дубликата.

А именно, что, когда послан формуляр посредством POST, ты имеешь, что REDIRECCIONAR посредством функции header (), по отношению к странице например enviado.php со сходным контекстом в: Formulario enviado con exito, это делает, что ты это redirecciona в страницу enviado.php с одним HEADER HTTP 3xx и потом отвечает поданный с GET HTTP 200 и подает тебе страницу enviado.php, и так ты избегаешь того, чтобы он не повернулся посылать формуляр посредством POST снова.

Я оставляю тебе более описательное изображение:

PRG - Pattern

Шрифт imágen: Wikipedia - Post/Redirect/Get

Твой код был бы тогда следующего способа и помни, что ты должен помещать этот блок кода перед твоим кодом HTML, чтобы предотвращать ошибки Header already sent...:

<?php
if (isset ($_POST['newsemail'])){
    include("db_files/db.php");
    $newsemail = mysqli_real_escape_string($db, $_POST['newsemail']);
    $strSQL = "INSERT INTO newsletter (`email`) VALUES ( '$newsemail')";
    $query = mysqli_query($db, $strSQL);
    unset($_POST['newsemail']);

    // Redirecciona a la página que deseas
    header('Location: 'enviado.php');
}
?>

// Y aqui el resto de tu código HTML
7
ответ дан 24.11.2019, 12:39
  • 1
    @Trauma - Потому что отрицательный обет? –  Black Sheep 11.11.2016, 15:12
  • 2
    Я не дал тебе отрицательный обет, но думаю, что он может быть, потому что это то же самое, что и мой ответ –   11.11.2016, 15:13
  • 3
    Она почти правильна, но, ¿ и если пользователь вновь входит в ту же pá gina? У проблемы есть другая часть, в pá gina, что производит формуляр. Если это тележка покупки, я mostrarí в diá logo 2 раза. Мне это послали бы 2 раза. И у меня это получили бы 2 раза tambié n :-( –  Trauma 11.11.2016, 15:15
  • 4
    @AlbertoMier - Ok... ничего страшного... querí в одинокое знание причина... –  Black Sheep 11.11.2016, 15:15
  • 5
    Я забираю у тебя негатив. Действительно, вопроса , как предотвращение диалога , и ваши ответы правильны. Был я неправильный; это показывания или нет формуляра и demá s мыслительных типов соломы mí эксперт они не имеют relació n с вопросом. Исправлять принадлежит мудрецам, они говорят :-( –  Trauma 11.11.2016, 15:25

Используй unset, если ты выравниваешь ее в другую стоимость, ты не разрушишь ее, просто у него будет другая стоимость будьте undefined или null, но она будет определенной.

0
ответ дан 24.11.2019, 12:39

Отвечая более краткий и ясный, более общее решение состоит в том, чтобы у тебя было два файла, один с html формуляра и другим с php, который обрабатывает данные и redirecciona, закончив процесс, более или менее как это говорит @aldanux и @alberto-mier в EDIT 2. Из-за ejeplo:

formulario.php: Он содержит html и в этикетке <form> добавлять признак action="enviar.php"

<form action="enviar.php" method="POST">
    <p class="footer-contact-info"><?php echo $lang['footer_string_5']; ?></p>
    <input type="email" class="my-form-control" placeholder="<?php echo $lang['footer_string_6']; ?>" name="newsemail" />
    <button class="newsletter-button"><?php echo $lang['footer_string_7'];?></button>
    <br>
</form>

enviar.php: Он содержит php, который вводит данные в базе данных:

<?php
$resultado = "";
if (isset ($_POST['newsemail'])){
    include("db_files/db.php");
    $newsemail = mysqli_real_escape_string($db, $_POST['newsemail']);
    $strSQL = "INSERT INTO newsletter (`email`) VALUES ( '$newsemail')";
    $query = mysqli_query($db, $strSQL);
    if($query){
      $resultado = "exitoso";
    }else{
      $resultado = "error";
    }
}
header('Location: formulario.php?resultado='.$resultado);
?>

Не необходимо использовать unset, чтобы удалять $_POST, после того, как ты записываешь данные redirecciona в формуляр снова со стоимостью из-за url так называемый результат, который ты получаешь с одним $_GET для того, чтобы ты проконтролировал сообщение результата, если ты это желаешь.

0
ответ дан 24.11.2019, 12:39