0

PHP と MySQL を学習してしばらく経ちましたが、問題が発生しました。ログインに成功した後にリダイレクトされるようにサポートされているユーザー データベース (MySQL)、ログイン フォーム、およびページを作成しました。

ログインページ

<?php 

require_once 'login.php'; //connecting to db
$db_server = mysql_connect($db_hostname, $db_username, $db_password);
if (!$db_server) die("Unable to connect to MySQL: " . mysql_error());

mysql_select_db($db_database)
or die("Unable to select database: " . mysql_error());

session_start(); //
if (isset($_POST['username']) &&
isset($_POST['password']))

{
$username = $_POST["username"];
$password = $_POST["password"];

$salt1 = "qm&h*";
$salt2 = "pg!@";

$query = "SELECT * FROM login WHERE username='$username'";
$result = mysql_query($query);
if (mysql_num_rows($result) == 0) die("Wrong username or password.");

elseif (mysql_num_rows($result))
{
    $row = mysql_fetch_row($result);
    $crypt_login_pass = md5("$salt1$password$salt2");
    if ($crypt_login_pass == $row[2])
    {
        $_SESSION['username'] = $username;
        $_SESSION['password'] = $crypt_pass;

        header("Location: index_account.php");
        exit;
    }
    else {
        die("Wrong username or password.");
    }   
}
}
?>

を追加するまで、コードは問題なく実行されましたheader("Location: index_account.php")。私はちょうどそこに持っていましたdie("You are now logged in.")。リダイレクト先としてサポートされているページは次のとおりです。

<?php
session_start();
if (isset($_SESSION['username']) &&
isset($_SESSION['password']))
{
$username = $_SESSION['username'];
$password = $_SESSION['password'];

echo "Your username is '$username'
and your crypted password is '$password'.";
}
else echo "Please <a href=index.php>click here</a> to log in.";
?>  

このコードはすべて localhost で実行されています。問題は、$_SESSION['username'] と $_SESSION['password'] が 2 ページ目 (index_account.php) に転送されないことです。私は多くの投稿を読みましたが、私が見つけた最も類似したものはこれです:ヘッダーリダイレクト後にセッション変数が失われましたが、回答がありません。これは私の最初のプログラミング言語 (HTML と CSS を除く) であり、私はまだこれに非常に慣れていないことに注意してください。

PS私の英語でごめんなさい。それは私の母国語ではありません。

前もって感謝します!

4

1 に答える 1

5

存在しない変数を使用してパスワードを割り当てています:

$_SESSION['password'] = $crypt_pass;

コードで定義$crypt_login_passされているため、代わりにそれを使用する必要があります。

$_SESSION['password'] = $crypt_login_pass;

さらに、 の値はから設定され、$_SESSION['username']が設定されて$usernameいない場合$_POST['username']は空になります。

if (isset($_POST['username']) &&
    isset($_POST['password']))

{
    $username = $_POST["username"];

これを修正するには、フォームの「ユーザー名」フィールドにデータが送信されていることを確認してください。

于 2013-05-17T18:48:29.573 に答える