1

ログインスクリプトからセッション変数を渡して Welcome [Username] メッセージを表示しようとしていますが、現時点ではそれを通過していません - 何かアイデアはありますか? 私はPHPにまったく慣れていないので、すべてのコメントを大歓迎します。

コードは次のとおりです。

<?php
ob_start(); // Start output buffering

session_start(); //must call session_start before using any $_SESSION variables
$_SESSION['username'] = $username;

function validateUser()
{

    session_regenerate_id (); //this is a security measure
    $_SESSION['valid'] = 1;
    $_SESSION['username'] = $username;
}

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

//connect to the database here

$hostname_PropSuite = "localhost";
$database_PropSuite = "propsuite";
$username_PropSuite = "root";
$password_PropSuite = "root";
$PropSuite = mysql_pconnect($hostname_PropSuite, $username_PropSuite, $password_PropSuite) or trigger_error(mysql_error(),E_USER_ERROR); 
mysql_select_db($database_PropSuite, $PropSuite);

$username = mysql_real_escape_string($username);

$query = "SELECT password, salt FROM admin_users WHERE username = '$username';";

$result = mysql_query($query) or die(mysql_error());

if(mysql_num_rows($result) < 1) //no such user exists
{
    header('Location: http://localhost/PropSuite/index.php?login=fail');

    die();
}
$userData = mysql_fetch_array($result, MYSQL_ASSOC);
$hash = hash('sha256', $userData['salt'] . hash('sha256', $password) );
if($hash != $userData['password']) //incorrect password
{
    header('Location: http://localhost/PropSuite/index.php?login=fail');

    die();
}
else
{
   validateUser(); //sets the session data for this user
}
//redirect to another page or display "login success" message
header('Location: http://localhost/PropSuite/main');
die();




//redirect to another page or display "login success" message


?>
4

3 に答える 3

3

あなたの問題は、$_SESSION['username'] = $username;$username が定義される前に使用していることだと思います。$username = isset($_POST['username'])?$_POST['username']:'';より上である必要があります$_SESSION['username'] = $username;

于 2012-10-25T16:59:01.270 に答える
3

関数のパラメーターとしてユーザー名を追加します

function validateUser($username)
{
    session_regenerate_id (); //this is a security measure
    $_SESSION['valid'] = 1;
    $_SESSION['username'] = $username;
}

そして、あなたがそれを呼び出すときにそれを渡します

validateUser($username); //sets the session data for this user
于 2012-10-25T16:59:30.150 に答える
1

関数内からグローバル スコープで宣言された変数にアクセスするには、次のglobalようにキーワードを使用する必要があります。

function validateUser()
{
    global $username;//NEEDED to access $username declared in global scope
    session_regenerate_id (); //this is a security measure
    $_SESSION['valid'] = 1;
    $_SESSION['username'] = $username;
}
于 2012-10-25T16:59:33.897 に答える