2012-07-19 25 views
5

私は送信時にこの簡単なフォームを持っています。submit.phpにリダイレクトされます。エラーがある場合は、submit.phpにエラーメッセージが表示されます。今、私は、エラーメッセージがフォームページに戻って表示されるようにしたい。PHP登録フォームの検証

<html> 
<head> 
<? require_once('lib.php'); ?> 
</head> 
<body> 
<form name="my-form" id="my-form" method="post" action="submit.php"> 
     Your name: 
     <input name="name" value="" size="30" maxlength="255" /> 
     Your email: 
     <input name="email" value="" size="30" maxlength="255" /> 
     Your favourite color: 
      <select name="fav_color"> 
       <option value="">-select please-</option> 
       <option value="Black">Black</option> 
       <option value="White">White</option> 
       <option value="Blue">Blue</option> 
       <option value="Red">Red</option> 
       <option value="Yellow">Yellow</option> 
      </select> 
     Your comment: 
     <textarea name="comment" rows="6" cols="35"></textarea> 
    <input type="submit" value="Submit" />   
</form> 
</body> 
</html> 
<?php 

require_once('lib.php'); 

function getErrors($postData,$rules){ 

    $errors = array(); 

    // validate each existing input 
    foreach($postData as $name => $value){ 

    //if rule not found, skip loop iteration 
    if(!isset($rules[$name])){ 
     continue;  
    } 

    //convert special characters to HTML entities 
    $fieldName = htmlspecialchars($name); 

    $rule = $rules[$name]; 

    //check required values 
    if(isset($rule['required']) && $rule['required'] && !$value){ 
     $errors[] = 'Field '.$fieldName.' is required.'; 
    } 

    //check field's minimum length 
    if(isset($rule['minlength']) && strlen($value) < $rule['minlength']){ 
     $errors[] = $fieldName.' should be at least '.$rule['minlength'].' characters length.';  
    } 

    //verify email address  
    if(isset($rule['email']) && $rule['email'] && !filter_var($value,FILTER_VALIDATE_EMAIL)){ 
     $errors[] = $fieldName.' must be valid email address.'; 
    } 

    $rules[$name]['found'] = true; 

    } 


    //check for missing inputs 
    foreach($rules as $name => $values){ 
    if(!isset($values['found']) && isset($values['required']) && $values['required']){ 
     $errors[] = 'Field '.htmlspecialchars($name).' is required.'; 
    } 

    } 

    return $errors; 
} 

$errors = getErrors($_POST,$validation_rules); 

if(!count($errors)){ 
    echo 'Your form has no errors.'; 
} 
else{ 
    echo '<strong>Errors found in form:</strong><ul><li>'; 
    echo join('</li><li>',$errors); 
    echo '</li></ul><p>Correct your errors and try again.</p>'; 
} 
?> 

このPHPコードは、同じページにエラーメッセージを表示します。そのエラーメッセージをform.php pageに戻したいのですが。誰も私にそうするのを手伝ってくれるのですか?

答えて

3

This articleはあなたの解決方法を示しています。

バリデータスクリプト(例:validate.php)を作成し、そこにフォームを送信して検証する必要があります。検証が失敗した場合、バリデータスクリプトは(JSON、XML、あなたが望むものであれ)検証エラーの配列を返します。 Else - リダイレクトリンクを返します。

フォーム上で「送信」をクリックすると、リダイレクトではなく、validator.phpへのAJAXリクエストが発生します。

このような問題のためにフレームワークを使用することを検討する必要があります。それは多くのコーディング時間を節約します。

1

簡単な解決策は、フォームのアクションとして、あなたの登録ページを入れて、とPHPのコードをラップすることです:

if(isset($_POST['submit'])){ 
    //php code here 
} 

次にあなたがPHPのコードをコピーしてHTMLページの先頭に貼り付けることができます。次に、フォームアクションをページに設定します。

あなたはPHPコードが処理されるとき、あなたはこのようにそれを行うことができ、フォームの一部を非表示にする場合::

echo '<style>.style1 {display: none }</style>"; 

か、あなたもで登録後、ユーザーにカスタムメッセージを表示することができ同じフォーム:私はあなたのbodyタグの残りの部分は、クラスstlye1とスタイルであることを仮定してい

echo '<div class="highlight"><p class="textcenter"><h5>You have successfully registered for blah blah blah.</h5></p><p>Thank you!</p><style>.style1 {display: none }</style>"; 

注意。

これは、htmlページで必要なテキスト、つまりが表示されるようにします。ユーザーがフォームを送信すると表示されるテキストが読み込まれます。

0

Sergey Ereminが指摘したように、この種のタスクのフレームワークを検討することは良いことです。

とにかく、ここで私はそれをPHPでやっています。すべてのコードは1ページ(submit.php)に含まれています。したがって、フォームはそれ自身に送信されます。 submit.phpを開くと、フォームが表示されます。彼らが提出をクリックすると、プログラムは、名前、有効な電子メール、好きな色とコメントが提供されているかどうかをチェックします。それらのどれもが空でなく、電子メールが有効でない場合、プログラムは「すべては大丈夫です」と表示します。それ以外の場合は、ユーザーをフォームに戻して、正しく入力されていないフィールドを指します。ユーザーが以前に提供したすべてのデータは、リダイレクトURLに渡されます。 $ _GETを使用すると、フォームに取り込まれて表示されるので、ユーザーは最初からすべてを再入力する必要はありません。

データベースに挿入する前に、データを消去/エスケープすることを忘れないでください。

これが役に立ちます。

<?php 
    //if the form has been submitted 
    if (isset($_POST['submit'])){ 

     //extract data submitted through the form and assign date to variables 
     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $favoriteColor = $_POST['fav_color']; 
     $comment = $_POST['comment']; 

     //pattern against which to check email validity 
     $good_email = "[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}"; 

     //if provided data is valid (email especially) and no form field has been left empty display "everything is okay" 
     if(strlen($name) > 0 && strlen($email) > 0 && preg_match("/$good_email/", $email, $regs) && strlen($favoriteColor) > 0 && strlen($comment) > 0){ 
      echo "Everything is okay"; 
     } 
     //otherwise redirect the user back to the form and indicate errors that they need to correct 
     else{ 

      //build an error message string where the user is shown where the issue is 
      $error_message = "There are errors with your form."; //starting point for the error message 

      //if message has been left empty let the user know that the name is required 
      if(strlen($name) == 0){ 
       $error_message .= "<br/>Name is required"; 
      } 
      //if the email is left empty let the user know that an email is required 
      if(strlen($email) == 0){ 
       $error_message .= "<br/>Email is required"; 
      } 
      //if the email does not match the pattern ($good_email) let the user know that the email they have supplied is invalid 
      if(!(preg_match("/$good_email/", $email, $regs))){ 
       $error_message .= "<br/>Email is not valid"; 
      } 
      //if the a favorite color has not been selected let the user know that they need to select a favorite color 
      if(strlen($favoriteColor) == 0){ 
       $error_message .= "<br/>Favorite color can not be left empty"; 
      } 
      //if the comment is left empty let the user know that comment is required 
      if(strlen($comment) == 0){ 
       $error_message .= "<br/>Comment is required"; 
      } 
      //if any field is left empty or the email is invalid redirect the user back to the form along with the data they submitted 
      header("Location: submit.php?&submittedName=$name&error=$error_message&submittedEmail=$email&submittedColor=$favoriteColor&submittedComment=$comment"); 
     } 
    } 
    //if no submission display the form 
    else{ 
?> 
<html> 
<head> 

</head> 
<body> 

<?php 
    //display the error message 
    //error message is passed through the url 
    if (isset($_GET['error'])) 
    { 
     echo "<p style='color:red'>".$_GET['error']."</a>"; 
    } 
?> 
<form name="my-form" id="my-form" method="post" action="submit.php"> 
     Your name: 
     <input name="name" value="<?php if($_GET['error']) { echo $_GET['submittedName'];} //if there's been an error with form submission display the name the user prevously submitted ?>" size="30" maxlength="255" /> 
     Your email: 
     <input name="email" value="<?php if($_GET['error']) { echo $_GET['submittedEmail'];} //if there's been an error with form submission display the email the user prevously submitted ?>" size="30" maxlength="255" /> 
     Your favorite color: 
      <select name="fav_color"> 
       <option value="">-select please-</option> 
       <option value="Black">Black</option> 
       <option value="White">White</option> 
       <option value="Blue">Blue</option> 
       <option value="Red">Red</option> 
       <option value="Yellow">Yellow</option> 
      </select> 
     Your comment: 
     <textarea name="comment" rows="6" cols="35"><?php if($_GET['error']) { echo $_GET['submittedComment'];} //if there's been an error with form submission display the comment the user prevously submitted ?></textarea> 
    <input type="submit" value="Submit" name="submit"/>   
</form> 
</body> 
</html> 
<?php 
} 
?> 
関連する問題