Проблема перезагрузки PHP - PullRequest
0 голосов
/ 02 января 2012

У меня есть следующий скрипт php:

<?php

$name = $_REQUEST['name'];
$email = $_REQUEST['email'];
$subject = $_REQUEST['subject'];
$message = $_REQUEST['message'];
$submit = $_REQUEST['submit'];
$to = "torayevagajan@gmail.com";

if(isset($submit))
{

    function isValidEmail($email)
    {
        return eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email);
    }

    if(!empty($name) && !empty($email) && !empty($message) && isValidEmail($email))
    {
        $text = "From: ".$email."<br>Name: ".$name."<br>".$message;
        if(mail($to, $subject, $text) && !empty($submit)){
            echo "<script type=\"text/javascript\">alert(\"Your message has been sent!\");</script>";
            }
        else{
            echo "<script type=\"text/javascript\">alert(\"Error Occured!\");</script>";
            }
    }elseif(empty($name) || empty($email) || empty($message))
    {
        echo "<script type=\"text/javascript\">alert(\"Please fill in the all fields!\");</script>";
    }else echo "<script type=\"text/javascript\">alert(\"Incorrect email format!\");</script>";

    unset($submit);
}
?>

У меня возникает следующая проблема: после отправки сведений для контакта с php, когда я хочу обновить страницу, он пытается снова и снова отправлять почту, я имею в видупытается запустить скрипт, даже я не установлен ($ submit);как это можно исправить?

Ответы [ 5 ]

2 голосов
/ 02 января 2012

Решение этой проблемы называется Post Redirect Get

Пример решения кода можно посмотреть здесь:

Simple Post-Redirect-GetПример кода

0 голосов
/ 02 января 2012

вы сбросили переменную $ submit, но не $ _REQUEST ['submit'].

поэтому при каждой перезагрузке вы снова устанавливаете $ submit с данными, которые все еще хранятся в массиве $ _REQUEST:)

0 голосов
/ 02 января 2012

Когда вы обновляете страницу, браузер отправляет данные POST из вашей формы.Отключение $submit не приносит вам никакой пользы, так как оно устанавливается заново каждый раз, когда вы запускаете скрипт.Хотя я не уверен, какова ваша цель при обновлении страницы, вам придется написать код, чтобы обновить страницу после того, как скрипт был выполнен.(Если вы не хотите использовать сеансы для определения, была ли отправлена ​​эта форма.)

В любом случае, это будет работать для обновления.Обратите внимание, что вы не можете иметь никакого вывода (даже пробела) перед заголовками.

<?php header('Refresh: 0'); ?>

Конечно, вы должны иметь это, когда установлен $submit, а не иначе.

0 голосов
/ 02 января 2012

Чувство обновления означает отправить запрос еще раз, который будет состоять из переменных, которые также нужно отправить повторно. Вот почему многие веб-сайты используют такую ​​осторожность, чтобы не обновлять после отправки ...

Но для этого есть решение..

Перенаправить скрипт на ту же страницу после отправки письма ..

header('Location: http://www.example.com/contact.php');

Таким образом, он отправит запрос страницы на ту же страницу, но на этот раз без переменных.

Или отправьте их на другую страницу после успешной отправки почты ..

0 голосов
/ 02 января 2012

1) Вы не должны использовать $ _REQUEST, так как это открывает некоторые проблемы безопасности для вашего приложения.Вместо этого используйте $ _POST.

2) Зачем вам нужно обновить страницу контактов?Альтернативой является создание отдельного сценария для обработки отправки формы и последующего перенаправления обратно на исходную страницу контактов после завершения.

...