2016-03-20 37 views
0

Kullanıcı adı, parola ve parola doğrulama alanı içeren çok basit bir HTML formum var. Form giriş onayı için bir PHP dosyasına gönderilir. PHP doğrulama dosyası, İstisnalar ve bir try/catch bloğunu uygular. Şu anda çalışma şekli, form alanlarından herhangi birini girmeden formu gönderirseniz, yalnızca ilk alanda bir hata döndürür. Tüm alanların eksik olduğunu algılamak ve tüm eksik alanlar için bir hata atmak gibi. Herhangi bir yardım takdirPHP Özel durum hatası çalışmıyor

<?php 

if (isset($_POST['register'])) { 


    //put the submitted values into regular variables 

    $user_name = $_POST['user_name']; 
    $pass_word = $_POST['pass_word']; 
    $pass_cfm = $_POST['pass_cfm']; 

    //make an array of field names and data types 

    $field_names = array("user_name" => "string", 
     "pass_word" => "string", 
     "pass_cfm" => "string"); 

    try { 
     form_validate($field_names); 
    } catch (Exception $e) { 
     echo $e->getMessage(); 
     echo "<br>"; 
    } 

    if (!isset($e) and isset($_POST['register'])) 
    { 
     echo "Thanks for your entry. We'll be in touch."; 
    } 
    else 
    { 
     echo "correct form"; 
    } 


}// main if 

function form_validate($fns) { 

    foreach ($fns as $key => $value) { 

     $field_value = $key; 

     global $$field_value; 

     //echo "actual field value is " . $$field_value . "<br>"; 

     switch ($value) { 

      Case "string"; 

       if ((strlen($$field_value) < 1) or (strlen($$field_value) > 99)) { 
        throw new Exception("Please enter a string value between 1 and 100 characters in the <b>$key</b> field"); 
       } 

       break; 

      default; 

       break; 
     } 
    } 
} 

// test_input 
?> 

:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>User Registration</title> 
     <meta charset="UTF-8"> 
    </head> 
    <body> 
     <h3>Register new account</h3> 
     <form action="HW4_action_exceptions.php" method="post"> 
      Username: 
      <br/> 
      <input type="text" name = "user_name"/> 
      <br/> 
      Password: 
      <br/> 
      <input type="password" name ="pass_word" /> 
      <br/> 
      Confirm: 
      <br/> 
      <input type="password" name = "pass_cfm" /> 
      <br/> 
      <input type="submit" name="register" value="Register"> 
     </form> 
    </body> 
</html> 

İşte benim PHP dosyasıdır:

İşte benim HTML dosyasıdır. Teşekkürler!

+1

Bir özel durum atmayın, yalnızca bir dizinin içindeki hata iletilerini kaydedin ve diziyi boş değilse, form_validate() işlevinin yanıtı olarak diziyi döndürün, sonra tüm hataları görüntüleyebilirsiniz. –

cevap

1

Ne yazık ki bu istisnalarla çalışmaz. Bir İstisna atıldığında, yakalama bloğu hemen uygulanır, böylece takip bloğundaki her şey atlanacaktır.

Oluşan tüm hata iletilerini sakladığınız bir dizi kullanmayı deneyebilirsiniz.

$errors = array(); 
switch ($value) { 
    Case "string"; 
    if ((strlen($$field_value) < 1) or (strlen($$field_value) > 99)) { 
     $errors[] = "Please enter a string value between 1 and 100 characters in the <b>$key</b> field"); 
    } 
    break; 
... 
} 

ve sonra

if (count($errors) == 0 and isset($_POST['register'])) 
{ 
    echo "Thanks for your entry. We'll be in touch."; 
} 
else 
{ 
    echo "correct form"; 
} 

Bunun sizin için işe yarar.