2015-10-14 2 views
1

Как выполнить эхо ввода формы без повторного отображения формы после проверки? Я могу отображать только данные после формы. Вот код, у меня естьPHP - Отображение ввода формы без повторного отображения формы

<?php 
$postalCode = $_POST['postalCode']; 
$postalCodeErr = ""; 
$postalCodeValidation = '/^[A-Z][0-9][A-Z][0-9][A-Z][0-9]$/'; 
$postalCodeIsValid = false; 
?> 
<html> 
<body> 
    INT322 Lab 3-1 
    <br /> 
    <br /> 
    <form name="lab3form" action="index.php" method="post"> 
     Postal Code: 
     <input type="text" name="postalCode" value="<?php if(isset($postalCode)) echo $postalCode; ?>" /> 
     <?php 
     if(($postalCode != "") && preg_match($postalCodeValidation, $postalCode)) { 
      $postalCodeIsValid = true; 
     } 
     else { 
      $postalCodeErr = "Invalid Postal Code"; 
     } 
     if(isset($postalCode)) echo " $postalCodeErr"; 
     ?> 
     <br /> 
     <br /> 
     <input type="submit" name="submit" /> 
    </form> 
</body> 
</html> 

<?php 
if($_POST['submit'] && $postalCodeIsValid) { 
    echo "Postal Code: $postalCode"; 
} 
?> 
+1

Попробуйте использовать AJAX;) –

+0

Отправьте форму в php через ajax, если она действительна, покажите свой контент, в противном случае предупредите пользователя. –

ответ

1

Как насчет упаковки вашей формы в else из if($_POST['submit'] && $postalCodeIsValid) { ... } else { ... }

<?php 
if($_POST['submit'] && $postalCodeIsValid) { 
    echo "Postal Code: $postalCode"; 
} 
else { 
    <form name="lab3form" action="index.php" method="post"> 
     Postal Code: 
     <input type="text" name="postalCode" value="<?php if(isset($postalCode)) echo $postalCode; ?>" /> 
     <?php 
     if(($postalCode != "") && preg_match($postalCodeValidation, $postalCode)) { 
      $postalCodeIsValid = true; 
     } 
     else { 
      $postalCodeErr = "Invalid Postal Code"; 
     } 
     if(isset($postalCode)) echo " $postalCodeErr"; 
     ?> 
     <br /> 
     <br /> 
     <input type="submit" name="submit" /> 
    </form> 
} 
?> 

ОБНОВЛЕНО ANSWER с полным кодом:

<html> 
<body> 
    INT322 Lab 3-1 
    <br /> 
    <br /> 
    <?php 
     if(!empty($_POST['submit'])): 
      $postalCode = $_POST['postalCode']; 
      if(isValidPostalCode($postalCode)): 
       echo "Postal Code: $postalCode"; 
      else: 
       form($postalCode, true); 
      endif; 
     else: 
      form(); 
     endif; 
    ?> 
</body> 
</html> 

<?php 

function form($postalCode = null, $hasError = false) { ?> 
    <form name="lab3form" action="postal.php" method="post"> 
     Postal Code: 
     <input type="text" name="postalCode" value="<?php if(isset($postalCode)) echo $postalCode; ?>" /> 
     <?php if ($hasError): ?> 
      <div class="error">Invalid Postal Code</div> 
     <?php endif; ?> 
     <br /> 
     <br /> 
     <input type="submit" name="submit" /> 
    </form> 
<?php } 

function isValidPostalCode($postalCode) { 
    $postalCodeValidation = '/^[A-Z][0-9][A-Z][0-9][A-Z][0-9]$/'; 
    return !empty($postalCode) && preg_match($postalCodeValidation, $postalCode); 
} 
?> 

Пожалуйста, обратите внимание, что ваш обычный выражение работает только с почтовыми кодами, такими как A1B2C3. - Я не уверен, что это поведение, которое вы хотите.

+0

Я пробовал это, однако форма все еще отображается, а результаты не отражены. – user3211391

+0

@ user3211391 это решило вашу проблему? – grim

+0

Я не пробовал обновленную версию, я решил проблему другим методом – user3211391