2015-04-22 2 views
0

Привет, если это ответ, но я не могу найти четкого ответа на мой вопрос.Остановить пользователя на странице просмотра, если условие не выполнено.

Допустим, у меня есть 2 страницы, называемые fruit.php и salad.php

, когда пользователь ввел данные в поля для fruit.php он будет направлено не salad.php однако ничто не мешает пользователю вводить salad.php в свой браузер, который будет открыт и не дают неправильных результатов, потому что его данные со страницы 1, fruit.php не были введены.

Любая идея, как я могу остановить пользователя от доступа salad.php до того, как fruit.php будет завершен?

+0

Покажите свои попытки .. –

+0

Отправьте свою форму пожалуйста. –

+0

@NarendraSisodia Я просто ищу логику, чтобы начать решать эту проблему, а не код – Marilee

ответ

1

в таком случае вы можете сделать что-то вроде этого: , поскольку пользователь должен ввести некоторые значения в 1-й странице поэтому (форма) будет presenced там, скажем, это одно:

fruit.php

<form name="fruit" id="fruit" action="salad.php" method="POST"> 
First component: <input type="text" name="component1"> 
Second component: <input type="text" name="component2"> 
<input type="submit" value="check"> 
</form> 

теперь вторая страница:

salad.php

<?php 
//first thing first, we're going to check whether the user 
//is being redirected by the form by doing something like 
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
//do something 
} else { 
//this thing will redirect the user to the former page in case no form was applied 
header('Location: fruit.php') or die('Unexpected error'); 
} 
?> 

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

1

Скажем fruit.php отправить данные в get как так

salad.php&donut=yummy 

То, что вы хотите, когда вы загрузите salad.php, чтобы проверить, если пончик было отправить. Для этого вам нужно использовать isset(). (Обратите внимание, что это тоже работает с $_POST, но ради примера, я буду придерживаться $_GET)

if (isset($_GET['donut')) 
//Good, your script has been called from fruit.php 
else 
//Nope ! He tried to type the adress in the browser ! Let's serve him an empty page here. 

Для начала это должен сделать трюк, после того, что я предложил бы смотреть на $_POST вместо $_GET и после этого возможно проверка $_session. И вот он у вас есть.

0

Вы должны написать salad.php таким образом, что он принимает только запрос POST, в случае запроса GET, перенаправить его на fruit.php

+0

Вы можете вручную отправить POST-запрос тоже. – Mekap

0

в верхней части salad.php:

if(($_SESSION['HTTP_REFERER'] !="http://domain.ext/dir/fruit.php") || (!isset($_POST['essentialFormVar1From_fruit.php'])) || ...){ 
    header('location: http://domain.ext/dir/fruit.php'); 
}; 
else{ 
    ... 
    //render page 
    ... 
} 
0

Если вы передаете значения с помощью POST можно проверить на странице «salad.php» подобное:

if(!isset($_POST['myVariable'])) { 
    header('Location: fruit.php'); 
    exit; 
} 

... continue my salad page ... 

Если вы используете GET, просто изменить $ _POST до $ _GET.

0

Вы можете добавить в свой файл salad.php чек, если корректные данные из запроса посылается:

if($_POST['fieldname'] == ''){ 
    echo 'you enterd the page wrong. Please go back to the <a href="...">Form</a> and enter the data needed'; 
}else{ 
    // normal page content here. 
} 

Таким образом, зритель будет получить только страницу, когда он подал заявку фитинга.

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