0
if(isset($_POST["email"]))
{
$email = mysql_real_escape_string($_POST["email"]); /* Line 10 */
$password = mysql_real_escape_string($_POST["password"]);

$result = mysql_query("SELECT password, id FROM users WHERE email = '$email'");

if (!$result)
    {
        die('Invalid query: ' . mysql_error());
    }

$row = mysql_fetch_assoc($result);

if($row['password'] == $password)
    {
        ini_set("session.cookie_lifetime","360000");
        session_start();
        $_SESSION['valid_user'] = $row['id'];
        $_SESSION['email'] = $row['email'];
        mysql_close($link);
        header('Location: index.php');
    }


mysql_close($link);
}

投稿はしてい$emailませんが、10 行目で定義されていないと表示されます。なぜですか? 私はEasyPHPを使用しています。

Notice: Undefined index: email in C:\Program Files\EasyPHP-5.3.5.0\www\v0.3\model\login.php 行 10

4

3 に答える 3

5

POST が完了したかどうかを確認する最も信頼できる方法は、

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
   ... you're in a post ...
}

特定のフォーム フィールドをチェックするのは危険です。フィールドの名前を変更/削除して、フォームの更新を忘れる可能性があります。しかし、その $_SERVER 値のチェックは 100% 信頼できます。スクリプトが呼び出されたメソッドに関係なく、常に利用できます。

于 2011-03-08T02:30:28.127 に答える
0

array() == false、それで、なぜでしょうか:

if($_POST)
{
    // stuff
}

これを好まない人もいますが、動的言語を使用している場合は、それを利用したほうがよいでしょう。

于 2011-03-08T01:31:48.990 に答える
0

配列が空であるため$_POST(もちろん、投稿していません)、存在しないemailその配列のインデックスにアクセスしようとしているためです。if(isset($_POST["email"]))

これを修正するには、次のようにします。

if (isset($_POST['email']))
$email = mysql_real_escape_string($_POST["email"]);

:これは単なる通知であり、アプリケーションには影響しません。そのため、あまり心配しないでください。よりクリーンなコードが得られます。これは個人的な意見です。ここにすべきではない理由を確認してください: How to avoid isset() and empty()

アップデート

通知を防ぐ isset 関数を追加しました。ありがとうデス。

于 2011-03-08T01:12:00.297 に答える