0

私は友人と自分自身のためにウェブサイトをデザインする小さなプロジェクトに取り組んでいます。現在、ユーザー登録システムを構築していますが、ユーザーのエントリをチェックする方法が最善かどうか疑問に思っています。

ええと、API のことは無視してください。これは前夜のためのものであり、おそらく無関係です。

sの予定がありelseます。

本質的に、これが受け入れられるかどうかを知りたいです... すべて。そうでない場合、これを改善するために何ができるでしょうか。

私はPHPの初心者です、親切にしてください:)

だから、これは私が現在使用しているものです:

if (!empty($_POST['username'])
&& !empty($_POST['password1'])
&& !empty($_POST['password2'])
&& !empty($_POST['email1'])
&& !empty($_POST['email2'])
&& !empty($_POST['keyID'])
&& !empty($_POST['vCode'])
){
 $api = new EVEAPI();
 if ($api->getCharacterID($_POST['username']) != 0){

     //The username is valid.

     if ($_POST['password1'] == $_POST['password2']){

         //Passwords match.

         if ($_POST['email1'] == $_POST['email2']
             && filter_var($_POST['email1'], FILTER_VALIDATE_EMAIL)
             ){

             //Emails match and are in valid format.

             if ($api->isValidAPI($_POST['keyID'], $_POST['vCode'])){

                 //If the API returns something that is not an error, continue.

                 $xml = $api->getAPIKeyInfo($_POST['keyID'], $_POST['vCode']);
                 if ($xml->result->key->attributes()->type == 'Account'){

                     //If the 'type' of the returned API info is 'Account', continue.

                     foreach ($xml->result->key->rowset->row as $apiRow){
                         $charID = (int) $apiRow->attributes()->characterID;
                         if ($charID == $api->getCharacterID($_POST['username'])){

                             //DO SOMETHING WITH INFO

                         }
                         else{
                         }
                     }
                 }
                 else{
                 }
             }
             else{
             }
         }
         else{
         }
     }
     else{
     }
 }
 else{
 }
4

4 に答える 4

0

最近では、ほとんどのプログラマーはフォームの検証に jquery / Javascript を使用していますが、純粋な PHP を使用している場合は、以下のコードを試してみてください。

$username = mysql_real_escape_string($_POST['username']);
  if($username == "")
  {
    $username_required = '<div>Please enter your username</div>';
    } else {
    $username_ok = true;
  }
于 2012-11-03T07:43:08.877 に答える
0

通常、そこにあるほとんどの検証パターンでは、このエラー配列があり、すべての条件をチェックし、最後に配列が空の場合はエラーメッセージを配列に追加します。これは、エラーがないことを意味するだけです..

私にとっては、コードがこのようにネストされすぎないようにしたくないので、変数を使用して各ステップを指示します。

そこから、最初のエラーだけを表示するかどうかを決定できます。5000 のフォーム フィールドがない限り、処理はそれほど大規模ではないため、すべてを一度に検証しても問題はありません。大丈夫だと思います。

コードは人間のために書かれており、自分の目やコードを読む人に優しくする必要があるため、コードを書くときは覚えておく必要があります。基本的にネストは問題ありません。さらなる処理を節約し、必要なロジックにも依存します。

はい、時間を節約するのは良いことですが、処理を最小限に抑えるために物事をうまく行う場合もあります。うまくやればニーズを検討する必要がありますが、最終的に節約できる時間は非常に大きく、意味がありません..コンパイラはとにかく、背中をなでて、良い仕事を言うつもりはありません..

$errors = array();

$usernameValid = $api->getCharacterID($_POST['username']) != 0;
if (!$usernameValid) $errors[] = 'Username is not valid';
//If you want to store which attribute caused the error you can use the attribute name as array key
//if (!$usernameValid) $errors['username'] = 'Username is not valid';

$passwordMatches = $_POST['password1'] == $_POST['password2'];
if (!$passwordMatches) $errors[] = 'Password does not match';

if ($usernameValid && $passwordMatches)
{
  //What to do if user name and password passes validation. wooo hoo~
}

//Etc etc..
于 2012-11-03T07:59:45.753 に答える
0

読みづらく、あまりきれいではありません。私がそれを行う方法は、負の if ステートメントを使用することです。つまり、次のことを意味します。

if ($api->getCharacterID($_POST['username']) == 0){
    // Username is not valid, so stop execution
}

if ($_POST['password1'] != $_POST['password2']) {
    // Send error to user and stop execution
}

// ...etc.

では、実行を停止するにはどうすればよいでしょうか。まあ、あなたにはいくつかのオプションがあります

  1. 例外をスローする
  2. die ステートメントを使用する
  3. if ブロックに入るたびに変更するパラメーターがある場合は、続行する必要があるかどうかを確認してください。
  4. 他の解決策

しかし重要なのは、このアプローチはコードをよりクリーンにするということです。

乾杯。

于 2012-11-03T07:40:10.707 に答える