2016-07-12 2 views
0

Я сделал код, чтобы предотвратить повторение отправки формы. В соответствии с этим кодом выполняется последовательность действий:
1. Пользователь отправляет почтовую форму.
2.Page отправляет данные формы. Начало сеанса. Все данные формы присваиваются глобальным переменным $ _SESSION. Почта отправляется функцией mail(). Переменная $ _SESSION ['sent'] = true; создано для эха «Спасибо, что обратились к нам!».
3.Тогда «если» выберете $ _SESSION ['sent'] и получите, что это правда ...
, а затем проблема возникла!
Потому что, как я понимаю, следующее действие должно повторять «Спасибо, что обратились к нам!». И тогда unset() должен уничтожить $ _SESSION ['sent'], чтобы предотвратить повторение показа «Спасибо ...»
Но этого не происходит, и вся форма контакта отображается на экране, что должно быть показано только случай, если $ _SESSION ['sent'] не установлен.
Итак, вопрос is unset ($ _ SESSION ['sent']) в if() {} уничтожить $ _SESSION ['sent'] в целом скрипте?

<?php 
/* code for mailing and redirecting to the same page */ 
session_start(); 
if (!empty($_POST['tosendmail'])) { 
    $_SESSION['admin_email'] = "[email protected]"; 
    $_SESSION['subject'] = $_REQUEST['subject']; 
    $_SESSION['email'] = $_REQUEST['email']; 
    $_SESSION['message'] = $_REQUEST['message'];  
    $send = mail($_SESSION['admin_email'], $_SESSION['who'], $_SESSION['message'], "From:" . $_SESSION['email']); 
    /* create variable $_SESSION['sent'] to use condition if (isset($_SESSION['sent'])) below */ 
    if ($send) { 
     $_SESSION['sent'] = true; 
    } 
    header("Location: " . $_SERVER["REQUEST_URI"]); 
} 

if (isset($_SESSION['sent'])) { 
    ?> 
    <h3 class="page-title">Thank you for contacting us!</h3> 
    <?php  
     unset($_SESSION['sent']); 
} else { 
?> 

    <!-- CONTACT FORM --> 
    <h3 class="page-title">Contact us:</h3> 
    <form class="contact-form" method="post"> 
     Your name:<br> 
     <input type="text" name="subject" value=""><br> 
     E-mail:<br> 
     <input type="email" name="email" value=""><br>  
     Your message:<br> 
     <textarea type="text" name="message" rows="10" cols="40"></textarea><br><br> 
     <input type="submit" name="tosendmail" value="Send"> 
     <input type="reset" value="Reset"> 
    </form> 
<?php } 
?> 
+0

Ответ на титул будет 'yes' ... от чего-либо за пределами' unset' точки ... – FirstOne

+0

Я думаю, что проблема ваша почта функция не выполняется. Поэтому $ _SESSION ['sent'] не задано в первую очередь. Попробуйте var_dump ($ send). Вероятно, он вернет false –

+0

Возможно, он просто продолжает и отменяет значение сеанса. Попробуйте добавить 'exit();' сразу после перенаправления, поэтому 'header (" Location: ". $ _SERVER [" REQUEST_URI "]); exit(); ' – FirstOne

ответ

0

Не уверен, что я бы заморачиваться с $ _SESSION для этой части. Ваш сервер знает, является ли это $ send истинным или нет.

if (!empty($_POST['tosendmail'])) { 
     $sent ='false'; 
... 
... 

    if ($send) { 
    $sent = 'true'; $display ='Thank you for contacting us!'; 
    } else { $display ='Ooops, something went wrong';} 

    if (isset($display)){echo $display; } 

}