-4

重複の可能性:
PHP: 「通知: 未定義の変数」および「通知: 未定義のインデックス」</a>
参照 - PHP でこのエラーはどういう意味ですか?

注意: 未定義のインデックス: 6 行目の C:\xampp\htdocs\CMS\includes\login.php の ac

注意: 未定義のインデックス: C:\xampp\htdocs\CMS\includes\login.php の 13 行目にログイン

以下のコードで上記の通知を受け取りました。インデックスを定義するにはどうすればよいですか? ISSET を使用する方法があることは理解していますが、ログに記録された $_SESSION と USERS を使用してそれを行う方法がわかりません。複数の値があるためです。通知/エラーを抑制するだけでなく、上記のエラーを正しい方法で解決するにはどうすればよいですか?

<?php
session_start(); // initialize session
include($_SERVER['DOCUMENT_ROOT'] . 
        '/CMS/CMSController.php');

if ($_POST["ac"]=="log") { /// do after login form is submitted  
     if ($USERS[$_POST["username"]]==$_POST["password"]) { /// check if submitted username and password exist in $USERS array 
          $_SESSION["logged"]=$_POST["username"]; 
     } else { 
          echo 'Incorrect username/password. Please, try again.'; 
     }; 
}; 
if (array_key_exists($_SESSION["logged"],$USERS)) { //// check if user is logged or not  
    echo "You are logged in.";
    header('Location: /CMS/index.php');
} else { //// if not logged show login form 
     echo '<form action="login.php" method="post"><input type="hidden" name="ac" value="log"> '; 
     echo 'Username: <input type="text" name="username" />'; 
     echo 'Password: <input type="password" name="password" />'; 
     echo '<input type="submit" value="Login" />'; 
     echo '</form>'; 
}; 
?>
4

2 に答える 2

2

isset()あなたが言及したように、何かがチェックされているかどうかを確認できます。次のように使用します。

if(isset($_POST["ac"])) {
    //Code using ac here
}

acこのようにして、インデックスに 何もない場合、それを使用するコードが実行されます。issetそれ自体は通知を引き起こしません。

于 2012-10-15T01:56:22.517 に答える
0

次のように変更できます。

<?php
session_start(); // initialize session
include($_SERVER['DOCUMENT_ROOT'] . 
        '/CMS/CMSController.php');

// This is one way to do it - it will give AC a value if it does not exist
// Do this for each $_POST value that may NOT have a value when executing this
// PHP file, for example: $_POST['username'] and $_POST['password']

if (!isset($_POST['ac'])) $_POST['ac'] = FALSE;

また

// Or you can do it this way
if(isset($_POST['ac'])) {

// The code below will only execute if AC is set

      if ($_POST["ac"]=="log") { /// do after login form is submitted  
         if ($USERS[$_POST["username"]]==$_POST["password"]) { /// check if submitted username and password exist in $USERS array 
          $_SESSION["logged"]=$_POST["username"]; 
       } else { 
            echo 'Incorrect username/password. Please, try again.'; 
       }; 
    };

 // Don't forget the closing curly brace. NO NEED to put ; after the }'s
 }

これらの方法のいずれかが正常に機能します。

于 2012-10-15T01:59:39.397 に答える