2016-02-15 2 views
0

Я нашел несколько ответов, таких как this good one (он использует два файла один для форм и других для обработки), и есть другие ответы с использованием внешних ресурсов (таких как базы данных или простые файлы).Предотвращение множественных представлений одной и той же формы

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

Это то, что я пробовал:

<?php //fone.php 
if (session_status() == PHP_SESSION_NONE) { 
    session_start(); 
} 

if(isset($_SESSION['token'])) 
    $_SESSION['prv_token']=$_SESSION['token']; 

$_SESSION['token']=md5(uniqid()); 
?> 

<html> 
    <head><meta charset="utf-8"><title>TEST</title></head> 
    <body> 
     <?php 
      if($_SERVER['REQUEST_METHOD']=='POST' && $_POST['token']==$_SESSION['prv_token']){ 
       echo "<p>Form Submited</p>"; 
      } 
     ?> 
     <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>"> 
      <input type="hidden" name="token" value="<?php echo $_SESSION['token'];?>"> 
      Name : <input type="text" name="name"><br> 
      Age : <input type="text" name="age"><br> 
      <input type="submit" name="submit"> 
     </form> 
    </body> 
</htmL> 

Это решение работает для меня, но код перерывы, если я использую $_SESSION['token'] в других файлах.

+2

Итак ..... в чем ваш вопрос? – Glubus

+0

@Glubus Предотвращение нескольких представлений одной и той же формы, в случае формы и кода php, находится в одном файле ... и без использования файлов extrnal. – BBeta

+0

Как вы заявляете в своем вопросе, вы уже достигли этого. Вы просите альтернативы своему собственному решению? На самом деле это не место для этого. – Glubus

ответ

1

ЕСЛИ вы используете сеанс, он будет распространен для всех страниц браузера. Поэтому вам нужно использовать разные имена для сеансов.

Eg: $_SESSION['your_page_name_token'] 
+0

Да, похоже, что использование разных имен для сеансов - это решение. Как проверить $ _POST решение проблемы?! – BBeta

+0

Да. Я бы не предполагал, что, поскольку я не знаю весь код! – Ruby

+0

Brosef просто установил friggin cookie после первого представления. Затем каждая загрузка страницы проверяет, была ли почта уже сделана. – Glubus

Смежные вопросы