Значения формы не должны очищаться - PullRequest
1 голос
/ 20 сентября 2011

У меня есть форма для отправки моей контактной информации. и я выбираю поля формы, используя php как:

if(isset($_post['submit']))
{
//submit cantact info
}
else
{
//bad user
}

Моя проблема: если пользователь не смог отправить форму, «значения формы не должны очищаться» ....

но значения формы очищаются при нажатии кнопки отправки ...! так кто-нибудь знает, как предотвратить четкие значения формы?

Ответы [ 3 ]

1 голос
/ 20 сентября 2011

Вы должны заполнить эти поля вручную.

общая идея заключается в использовании метода POST / Redirect / GET

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

вот пример:

<?  
$err = array();
if ($_SERVER['REQUEST_METHOD']=='POST') {  

  //performing all validations and raising corresponding errors
  if (empty($_POST['name']) $err[] = "Username field is required";  
  if (empty($_POST['text']) $err[] = "Comments field is required";  

  if (!$err) {  
    // if no errors - saving data 
    // and then redirect:
    header("Location: ".$_SERVER['PHP_SELF']);
    exit;
  }  else {
    // all field values should be escaped according to HTML standard
    foreach ($_POST as $key => $val) {
      $form[$key] = htmlspecialchars($val);
    }
} else {
  $form['name'] = $form['comments'] = '';  
}
include 'form.tpl.php';
?>  

и затем в шаблоне form.tpl.php сделайте так:

<? if ($err): ?>
  <? foreach($err as $e): ?>
<div class="err"><?=$e?></div>
  <? endforeach ?>
<? endif ?>
<form>
  <input type="text" name="name" value="<?=$form['name']?>">
  <textarea name="comments"><?=$form['comments']?></textarea>
  <input type="submit">
</form>
0 голосов
/ 20 сентября 2011

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

На POST вы затем объединяете данные публикации.Например,

$formData = array(
    'foo' => '',
    'bar' => 'default value',
    'baz' => ''
);

if ('POST' == $_SERVER['REQUEST_METHOD') {
    $formData = array_merge($formData, $_POST);

    // do validation, handle success
}

Затем в HTML

<input name="foo" value="<?php echo htmlspecialchars($formData['foo']) ?>">
<!-- etc -->
0 голосов
/ 20 сентября 2011

Вы должны (вручную) поместить отправленные значения в элементы формы. Пример:

<input type="text" name="username" value="<?=( isset( $_POST['username'] ) ? $_POST['username'] : '' )?>" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...