0

こんにちは、次の問題があります。

私はいくつかの入力エラーをphp経由でチェックしたいというフォームを持っています。それに加えて、何が間違っているかについてのユーザー情報を表示したいと思います。

私が抱えている問題は、すべてのメッセージを同時に表示するのではなく、1 つのメッセージだけを表示したいということです。そのため、php からのすべてのエラー メッセージをフィルタリングして 1 つに制限する必要があります。

だからphpはこれを探しています:

<?php if (isset($errors['for_a']):?><div id="errormessage">some text</div><?php endif; ?>

そしてphpルールは次のとおりです。

(case1) ... if ( isset($errors['for_a']) AND (!isset($errors['for_b'])) AND (!isset($errors['for_c'])) OR (!isset($errors['for_d'])) ...
OR
(case 2) ...AND (!isset($errors['for_b'])) AND (!isset($errors['for_c'])) AND (!isset($errors['for_d'])) ...
and so on for input field a...

問題は、入力フィールドが 7 つあることです。これは、すべての可能性を記述しなければならないことを意味します。これを短くする方法はありますか?

どうもありがとう。

アップデート:

さて、私が達成したいことは十分に明確ではないかもしれません。

エラーメッセージの表示に問題はありません。これはうまくいきます。特定の入力フィールドごとの各エラー メッセージが正しく表示される可能性があります。

問題は、それぞれに異なるエラーメッセージがあることです。私はそれをより次元の配列に保存します:

if(empty($a)){$errors['a'][]="first failure for a"}
if(something else happens($a)){$errors['a'][]="second failure for a"}
...

if(empty($b)){$errors['b'][]="first failure for b"}
if(something else happens($b)){$errors['b'][]="second failure for b"}
...

そのエラーメッセージを表示することも問題ではありません。

<?php if (isset($errors['a'])):?>
<?php echo "<div class='erl'>"; 
echo $errors['a'][0];
echo "</div>";          
endif;?>
<?php endif;?>

問題は、同時に 1 つのエラー メッセージのみを表示する条件です。

だからここに私が何を意味するかを示すためのいくつかのグラフィックがあります:

これは現時点での状況です。すべてのエラー div が同時に表示されます。

f0

これは私が達成したいことです。同時に1つのエラーメッセージのみが表示され、最初の入力フィールドでチェックを開始します:

f2

これにより、ユーザーは 2 番目のエラー レイヤーを表示する前に最初の入力フィールドを修正する必要があります。

f5

それが今明らかになることを願っています。

4

4 に答える 4

1

何を尋ねているのかわかりません。通常、フォームでは、多数のフィールドがある場合、エラーの配列を作成し、エラーをフォームの上部に箇条書きリストとして表示するか、対応するフォーム要素とインラインで表示できます。

<?php
$errors = array();

if (isset($_POST['submit'])) {
    // for each form field check it's valid, if it's not add a key to the errors array, i.e.
    if (empty($_POST['name'])) {
        $errors['name'] = 'Name is a required field';
    }
}

// display form
?>

これで$errors配列ができました。空でない場合は、フォームにエラーがあります。これらのエラーは、2 つの方法のいずれかで表示できます。フォームの上部にある箇条書きとして:

<!DOCTYPE html>
<html>
  <body>
    <form method="post">
<?php if (!empty($errors)): ?>
      <p>Please correct the following errors:</p>
      <ul>
<?php foreach ($errors as $error): ?>
        <li><?php echo $error; ?></li>
<?php endforeach; ?>
      </ul>
<?php endif; ?>
      <!-- the rest of your form -->
    </form>
  </body>
</html>

または、各フォーム フィールドにインラインで次のように入力します。

<form method="post">
  <div class="input">
    <label for="name">Name:</label>
    <input type="text" name="name" id="name" />
<?php if (isset($errors['name'])): ?>
    <div class="error"><?php echo $errors['name']; ?></div>
<?php endif; ?>
  </div>
</form>

それが役立つことを願っています。

于 2012-07-23T11:09:43.993 に答える
0

エラー処理はどのようにしていますか?

などを設定するだけの場合$errors['for_a']、入力フィールドfor_aにエラーがある場合は、次のことができます。

if (count($errors) > 0) {
    foreach ($errors as $input => $errormsg) {
        echo '<div id="errormessage">' . $errormsg . '</div>'
    }
} else {
    // continue normally
}
于 2012-07-23T11:10:50.303 に答える
0

OO ソリューションはどうですか? 何かのようなもの:

<?php echo $errors->show('for_a', 'some text'); ?>

$errors は、以前に何も出力していない場合にのみ「テキスト」を出力するクラスを指します。

于 2012-07-23T11:12:36.980 に答える
0

おそらく最も簡単な解決策は、エラーを表示した場合に保持されるグローバル変数を使用することです。

例えば:

$errorShown = false;

そして関数:

function showError($whatError,$errArr){
  global $errorShown;
  if ((isset($errArr[$whatError])) && (!$errorShown)){
    echo $whatError;
    $errorShown = true;
  }
}

代わりにその関数を呼び出します。

<?php showError('for_a',$errors); ?>
于 2012-07-23T11:13:25.147 に答える