Отправляя форму, которая улавливает несколько ошибок и сохраняет другие данные, как мне получить эти входные значения для очистки при повторной отправке формы? - PullRequest
0 голосов
/ 12 октября 2019

Я проверяю свою контактную форму HTML, используя PHP. Я проверяю форму, отправляя форму без данных. Затем я проверяю форму, предоставляя частичные данные. когда я отправляю частичные данные, правильные поля останутся в форме, а другие будут выдавать ошибочные сообщения. тогда я правильно заполню форму, чтобы предотвратить любые ошибки, но при отправке формы данные все еще присутствуют в форме, а не очищаются ... так как я могу это исправить?

Я пытался использовать это, но оно не работает:

 function show_data() {
    if (!empty($_POST['firstName'] && isset($_POST['submit']))) {
      if ($lastNameErr || $emailErr || $phoneErr) {
        echo $_POST['firstName'];
      } else {
        echo '';
      }
    }
  }

<input type="text" name="firstName" placeholder="First name" value="<?php show_data(); ?>">

моя форма:

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST">
          <label for="firstName">
            First Name <span class="error"><?php echo $firstNameErr; ?></span>
            <input type="text" name="firstName" placeholder="First name" value="<?php show_data(); ?>">
          </label>

          <label for="lastName">
            Last Name <span class="error"><?php echo $lastNameErr; ?></span>
            <input type="text" name="lastName" placeholder="Last name">
          </label>

          <label for="email">
            E-mail <span class="error"><?php echo $emailErr; ?></span>
            <input type="email" name="email" placeholder="E-mail Address">
          </label>

          <label for="phone">
            Phone <span class="error"><?php echo $phoneErr; ?></span>
            <input type="phone" name="phone" placeholder="Phone Number">
          </label>

          <label for="message">
            Message
            <textarea name="msg" placeholder="Write your message here..."></textarea>
          </label>

          <input type="submit" name="submit" value="SUBMIT">

          <div class="success">
            <?php
              if (isset($_POST['submit'])) {
                if (isset($firstName) && isset($lastName)) {
                  echo '<p>Thank you '.$firstName.' '.$lastName.' for submiting the form';
                } else {
                  echo '';
                }
              }
            ?>
          </div>
        </form>

мой код php:

function clean_data($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

if ($_SERVER["REQUEST_METHOD"] == 'POST') {

  if (empty($_POST['firstName'])) {
    $firstNameErr = '*First name required';
  } else {
    $firstName = clean_data($_POST['firstName']);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z ]*$/",$firstName)) {
      $firstNameErr = "Only letters and white space allowed";
    }
  }

  function show_data() {
    if (!empty($_POST['firstName'] && isset($_POST['submit']))) {
      if ($lastNameErr || $emailErr || $phoneErr) {
        echo $_POST['firstName'];
      } else {
        echo '';
      }
    }
  }

  if (empty($_POST['lastName'])) {
    $lastNameErr = '*Last name required';
  } else {
    $lastName = clean_data($_POST['lastName']);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z ]*$/",$lastName)) {
      $lastNameErr = "Only letters and white space allowed";
    }
  }

  if (empty($_POST['email'])) {
    $emailErr = '*Email required';
  } else {
    $email = clean_data($_POST['email']);
    // check if e-mail address is well formatted
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $emailErr = 'Not a valid e-mail format';
    }
  }

  if (empty($_POST['phone'])) {
    $phoneErr = '*Phone required';
  } else {
    $phone = clean_data($_POST['phone']);
    // check if the phone number is well formated
    if (!preg_match("/^(\+1|001)?\(?([0-9]{3})\)?([ .-]?)([0-9]{3})([ .-]?)([0-9]{4})/",$phone)) {
      $phoneErr = 'Not a valid phone format';
    }
  }

  if (empty($_POST['msg'])) {
    $message = '';
  } else {
    $message = clean_data($_POST['msg']);
  }

}
?>

Iхотите, чтобы форма очищалась при отправке формы, но поле ввода останется даже после правильной отправки формы.

1 Ответ

0 голосов
/ 13 октября 2019

Я предполагаю, что у вас есть поля значений, заполненные с использованием значений post или переменных из вашего сценария проверки, потому что вы показываете первый пример имени с вашей функцией, но ни один из других входных данных не показывает признаков значений, полученных из PHP. Есть разные способы сделать это в зависимости от того, где вы разместили свою бизнес-логику. Если вы выполнили всю свою бизнес-логику до того, как что-либо отобразится в браузере, вы просто перенаправляете обратно на страницу формы после того, как определите успех. Если вам нужно установить определитель успеха для обмена сообщениями, вы можете просто использовать значение $_GET или $_SESSION:

//....your form check code
# Not sure what determines success of your script action, so this function if
# obviously a placeholder, but would return a true or false
$success = whatever_determines_success();
# If the validation is successful and submit is successful
if($success) {
    # Use a redirect header to go back to the form page. The post would be clear at this point.
    header('Location: /whatever_page_the_form_is_on.php?success=1');
    exit;
}

Затем на странице формы:

<div class="success">
    <?php if(!empty($_GET['success']))
        echo '<p>Thank you for submiting the form</p>' ?>
</div>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...