1

私のウェブサイトにはたくさんのフォームとフィールドがあり、完璧に機能するシステムがありますが、本当に苦痛で、立ち上がって実行することができます。

これは私のシステムが行うことです。フォームを送信すると、すべての情報がすべてのデータを所有し、それを検証するクラスに送信されます。また、このようにフィールドの値を格納します$_SESSION['userUpdate']['firstName'][1] = $firstName;

エラーが発生した場合、このようなセッション変数が作成されます$_SESSION['userUpdate']['firstName'][0] = 1;。1は、フィールドが空であることを示します。エラーがない場合、セッション変数は0になります。

検証プロセスでエラーが見つからなかった場合、データはデータベースに送信されます。

その後、フォームページは次のように再読み込みされます。

header( 'HTTP/1.1 303 See Other' );
header( 'Location: '.curPageURL().'' ); 

ページをリロードするときにデータを再送信できないようにするために使用します。これが、これらすべてのセッション変数を使用している理由です。

次に、多くのit / else if / elseを使用して、セッション変数の値と出力エラーを確認し、前に入力したデータをフォームに入力します。

名フィールドの例を示します。

これはHTMLコードです:

<label for="firstName" class="block">First Name</label>
<span>Your first name goes here.</span><?php echo $text_first_name ?>
<input type="text" id="firstName" class="mediaText" name="firstName" value="<?php echo $first_name2; ?>" onchange="needToConfirm=true" <?php echo $style_first_name ?> />

これは、クラスによる検証プロセスです。

$_SESSION['ui']['first_name'][1] = $this->first_name; 
if (isset($this->first_name)) 
    {
        if($this->first_name == NULL)
        {
            $_SESSION['ui']['first_name'][0] = 1;
        }
        else if(minRange(3, $this->first_name)) 
        {   
            $_SESSION['ui']['first_name'][0] = 2; 
        }
        else
        {
            array_push($set, "FirstName = '".$db->sql_escape($this->first_name)."'");
        }
    }

これは、最終的なエラーを処理するphpコードです。

$error_bg = "style=\"background:#EE5C42\"";

//FIRST NAME
if($_SESSION['ui']['first_name'][0] == 1)
{
    $style_first_name = $error_bg;
    $first_name2 = $_SESSION['ui']['first_name'][1];
}
else if($_SESSION['ui']['first_name'][0] == 2)
{
    $style_first_name = $error_bg;
    $first_name2 = $_SESSION['ui']['first_name'][1];
    $text_first_name = "<span class=\"errorText\">Your first name must consist of at least 3 characters.</span>";
}
else
{
    $first_name2 = $userdetails["FirstName"];
}

ページの最後に、セッション変数の設定を解除するための小さな関数があります。

これをより簡単に、そしてより簡単に立ち上げて実行する方法があるのだろうか?

4

2 に答える 2

1

コードの最適化に関するアドバイスが必要な場合は、次のようにします。

// so you have bunch of error codes
$possible_errors = array(
  '0' => '', // No error
  '1' => '', // Error, but no error message
  '2' => 'Your %s must consists of at least 3 characters',
  ...
);

// then you have form fields stored in session
// fields in session should be named like the keys in $userdetails
// 'formName' => array('FirstName' => array(0, 'German'), 'LastName' => array('1', ''))
$errors = $values = array();
foreach ($_SESSION['formName'] as $field => $element) {
    if ($element[0] > 0) { // Has error
        $error_code = $element[0];
        $error_message = $possible_errors[$error_code];
        if (!empty($error_message)) {
            $errors[$field] = sprintf($error_message, $field);
        }
    } else {
        $values[$field] = $userdetails[$field];
    }
}

// in here you end up with two arrays:
//   - $errors Error messages keyed by field name
//   - $values Values keyed by field name
// You use them like this
<label for="firstName" class="block">First Name</label>
<span>Your first name goes here.</span><?php if (array_key_exists('FirstName', $errors)) echo $errors['FirstName']; ?>
<input type="text" id="firstName" class="mediaText" name="firstName" 
  value="<?php echo $values['FirstName']; ?>"
  onchange="needToConfirm=true"
  <?php if(array_key_exists('FirstName', $errors)):?>style="background:#EE5C42"<?php endif;?> />
于 2012-07-02T21:35:30.027 に答える
0

非常に優れたBassistancejQueryValidateプラグインを使用してクライアント側の検証を追加することをお勧めします。

于 2012-07-02T23:30:16.407 に答える