5

送信時にこの単純なフォームがあり、にリダイレクトされます。submit.phpエラーがある場合は、にエラー メッセージが表示されsubmit.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。誰かがそうするのを手伝ってくれますか..

4

3 に答える 3

3

この記事では、ソリューションについて説明します。

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

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

このような問題には、フレームワークの使用を検討する必要があります。コーディング時間を大幅に節約できます。

于 2012-07-19T19:19:21.790 に答える
1

簡単な解決策は、サインアップ ページをフォーム アクションとして配置し、php コードを次のようにラップすることです。

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

次に、php コードをコピーして、html ページの先頭に貼り付けます。次に、フォーム アクションをページに設定します。

PHP コードが処理されるときにフォームの一部を隠したい場合は、次のようにできます::

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

または、同じフォームで登録後にユーザーにカスタム メッセージを表示することもできます。

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>";

body タグの残りの部分は class のスタイルであると想定していることに注意してくださいstlye1

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

于 2012-07-19T19:55:36.633 に答える