0

フレームワークなしの php をゼロから学習するために、次のコードを含む admin.php ファイルを作成しました。

<?php

$not_auth_msg = "<h1>Not Authorized</h1>";
if($_GET['username'] == "admin") {
    $pass = md5($_GET['password']);
    if($pass != "21232f297a57a5a743894a0e4a801fc3") {
        exit($not_auth_msg);
    }
} else {
    exit($not_auth_msg);
}

?>

<!doctype html>
<html>
<head>
  <!-- link to bootstrap -->
  <!-- jquery script -->
  <!-- etc -->
</head>
..
..
..
</html>

認証は正常に機能しますが、php 5.4 のビルトイン サーバーは、静的ファイル (ブートストラップ、jquery など) ごとに "PHP Notice: Undefined index: username in ..." と応答し、さらに悪いことに、静的ファイルが読み込まれません!

私は何を間違っていますか?

4

3 に答える 3

2

if を変更します

if(isset($_GET['username']) && $_GET['username'] == "admin") {
...

}

それはあなたの問題を解決します。usernameそのキーが設定されていない場合、ファイルが必要な$_GET場合はエラー通知が表示されます。つまり、通知が表示/レンダリングされます。php.iniALL

于 2013-03-03T18:20:59.627 に答える
1

この通知は、配列内に存在しない要素にアクセスしようとすると発生します。あなたの場合、 $_GET スーパーグローバルには実際には「ユーザー名」要素がありませんでした (つまり、URL を介してユーザー名を渡さなかったということです)。

要素の内容を実際に確認する前に、要素の存在をテストするようにコードを変更できます。

if(array_key_exists('username',$_GET) && $_GET['username'] == "admin") {
  ...
}

これが機能するのは、PHP がショートカット ブール評価を使用するためです。つまり、式の左半分が評価される場合、式の右辺は評価されませんfalse

于 2013-03-03T18:21:35.943 に答える
0

この行を参照してください

if($_GET['username'] == "admin")

空/値がない場合は常に$_GET['username']このエラーが発生します..その場合も処理できるようにコードを調整する必要があります。

if(!isset($_GET['username'])){

your code....to handle this index error
}else{

normal cose
}
于 2013-03-03T18:23:05.113 に答える