2013-06-06 2 views
0

У меня есть форма, которая представляет много разных полей, заполненных пользователем.Передача многих переменных из PHP обратно в форму

PHP-страница получает форму и проверяет, заполнены ли все поля. Если один из них отсутствует, он должен вернуться к форме и указать, какой из них отсутствует.

Мне было интересно, как лучше всего передать все поля, попавшие на мой PHP-сайт, на страницу формы, чтобы пользователь не мог повторно заполнить всю форму.

Вот как я проверяю:

if (empty($firsName) || empty($lastName) || empty($address) || empty ($city) || empty ($state) || empty($zip)) 
{ 
header('Location: checkout.php'); 
} 

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

Спасибо!

+0

Я думаю, что вы с ould проверить форму перед отправкой – Fabio

+3

Просто отправьте сообщение на страницу формы вместо какого-либо другого или используйте include, чтобы включить форму вместо перенаправления. Или сохраните поля в сеансе. Множество вариантов. – jeroen

+0

Это будет полезно для проверки на стороне клиента и на стороне сервера. Проверяя, являются ли поля пустыми до публикации формы, вам не нужно беспокоиться о заполнении полей, имеющих значения – Pudge601

ответ

1

Лучший способ, если вы не знаете, как это сделать, - использовать фреймворк. Если это не вариант, то я обычно имеют функцию, которая проверяет, есть ли значение, которое было отправлено, и печатает его, где необходимо:

function getElementValue($elementName) 
{ 
    if (isset($_POST[$elementName])) 
    { 
     return htmlspecialchars($_POST[$elementName]); 
    } 

    return ''; 
} 

А на странице:

<input type="text" name="firstName" value="<?php echo(getElementValue('firstName')); ?>" /> 

Вы будете нуждаться в такой же, но различные функции для флажков и т.д.

0

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

<form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 

В любом случае, ответ на ваш вопрос

у вас есть несколько вариантов, вы можете хранить их отдельно в сеансе или хранить их в виде массива в сеансе и просто отменить индекс после того, как вы извлекли все.

вы могли бы пройти через параметры GET, хотя кажется длинным и получить не является самый безопасный тонкий g для использования, так как для этого вы не заметите заметной разницы в времени загрузки страницы и не должны слишком беспокоиться о том, как выглядит URL-адрес

Если у вас есть база данных, вы можете просто сохранить ее в таблицу и читать & удалите ее на следующей странице.

0

Сохраните переменные в сеансе, а затем на странице формы выделите переменные сеанса. Вы также можете передать сообщения об ошибках таким образом, создав другую переменную сеанса, такую ​​как $ _SESSION ['error_msg'], и добавив к ней.

session_start(); 

$errors = array(); 

if(empty($firstName)){ 
    $errors[] = 'Please enter your first name'; 
} 
if(empty($lastName)){ 
    $errors[] = 'Please enter your last name'; 
} 
if(empty($address)){ 
    $errors[] = 'Please enter your address'; 
} 
if(empty($city)){ 
    $errors[] = 'Please enter your city'; 
} 
if(empty($state)){ 
    $errors[] = 'Please enter your state'; 
} 
if(empty($zip)){ 
    $errors[] = 'Please enter your zip code'; 
} 


if(!empty($errors)){ 
    $_SESSION['firstName'] = $firstName; 
    $_SESSION['lastName'] = $lastName; 
    $_SESSION['address'] = $address; 
    $_SESSION['city'] = $city; 
    $_SESSION['state'] = $state; 
    $_SESSION['zip'] = $zip; 
    $_SESSION['errors'] = $errors; 
    header('Location: checkout.php'); 
    exit; 
} 
0

Попробуйте что-то вроде ниже

$validate_fields_arr = array('firsName', 'lastName', ...)  
$returntourl = false; 
foreach($validate_fields_arr as $v){ 
    if(empty($_POST[$v])) 
     $returntourl = true; 
} 

if($returntourl){ 
    $return_str = '<html><title>ERROR!</title><body><h3>ERROR on data submitted!</h3>'; 
    $return_str .= '<form action="checkout.php" method="post" name="retfrm">'; 
    foreach($_POST as $k=>$v){ 
     $return_str .= '<input type="hidden" name="'.$k.'" value="'.$v.'">'; 
    } 
    $return_str .= '</form>'; 
    $return_str .= '</body><script>document.retfrm.submit()</script></html>'; 
    echo $return_str; 
    exit; 
} 
Смежные вопросы