0

私はこのコードを使用してログインしようとしています:

session_start();

require "connect.php";

$username = $_POST['username'];
$password = $_POST['password'];

  if($username&&$password)
 {
$query = mysql_query("SELECT * FROM users WHERE username='$username'");
$numrow = mysql_num_rows($query);

if($numrow!=0)
{
    while($row = mysql_fetch_assoc($query))
    {
        $db_username = $row['username'];
        $db_password = $row['password'];
    }

    if($username==$db_username&&$password==$db_password)
    {
        //echo 1;
        header("Location: members.php");
        $_SESSION['username']=$db_username;

    }
    else echo 0;
}
else die("That user doesn't exist");
    }
     else die("Please enter a username and password");

ログインに成功すると、members.phpに移動します。

 session_start();
 if($_SESSION['username'])  <------ this is line 5
   {
echo "20730312";
echo " You are logged in as: ".$_SESSION['username'];
echo "<p><a href='logout.php'>Click here to logout</a>";
    }

しかし、アプリケーションでmembers.phpをリクエストすると、次のようになります。

Notice: Undefined index: username in E:\Program Files\xampp\htdocs\adddrop\members.php on line 5

ログインに成功した後、Android WebViewを使用してmembers.phpを要求していることに注意してください。これは正しいですか?私は何を間違っているのですか?

4

4 に答える 4

3

ちなみに、そこにはSQLインジェクションがあります。もっと読みたいかもしれません:http://en.wikipedia.org/wiki/SQL_injection

あなたが直面している問題は、ユーザー名が常にPOSTされるとは限らないことです(最初にページをロードするとき):

$username = isset($_POST['username']) ? $_POST['username'] : null;
$password = isset($_POST['password']) ? $_POST['password'] : null;

それはそれを修正する必要があります。基本的に、POSTインデックスが設定されているかどうかを確認し、設定されている場合にのみアクセスを試みます。それ以外の場合はに設定しnullます。

また、次のように実行することもできます。

$query = mysql_query("SELECT * FROM users WHERE username='" . mysql_real_escape_string($username) . "'");

これにより、SQLインジェクションの脆弱性が防止されます。

また、追加しexit;ます:

header("Location: members.php");
$_SESSION['username']=$db_username;
exit; // Add this.
于 2012-05-27T09:23:46.853 に答える
0

おそらくこれ:

header("Location: members.php");
$_SESSION['username']=$db_username;

(逆)に変更する必要があります:

$_SESSION['username']=$db_username;
header("Location: members.php");
于 2012-05-27T09:53:31.140 に答える
0

いつもと同じ。URLに投稿していません。POSTしようとしているURLを確認します。

于 2012-05-27T09:22:27.040 に答える
0

それが言うように、あなたはPOSTから指定されたデータを持っていません。フォームの操作が正しく、ユーザー名を入力していることを確認してください。

また、パスワードのハッシュ化を検討することもできます。私がここで見ることができるものから、あなたはプレーンテキストのパスワードを比較します(またはあなたはすでにハッシュされたパスワードをあなたのスクリプトに取得しています、それは大丈夫でしょう)。

于 2012-05-27T10:02:10.723 に答える