0

ログインに成功したときにユーザーを特定のページにリダイレクトするために正常に機能するchecklogin.phpスクリプトがあります。ここで、ユーザーをログインフォームにリダイレクトした元のindex.phpページにリダイレクトするように設定します。index.phpの上部に以下を含めます。

<?php
session_start();

$_SESSION['url'] = $_SERVER['REQUEST_URI'];

if(!session_is_registered(myusername)){
header("location:main_login.php");
}
?>

このページで$_SESSION['url']が正しく設定されていることを確認しました。

main_login.phpには、checklogin.phpによって処理されるログインフォームが含まれています。

<form name="form1" method="post" action="checklogin.php">

$_SESSION['url']もこのページで正しく設定されています。

checklogin.phpは次のようになります。

<?php
session_start();

print_r($_SESSION['url']);

ob_start();
$host="localhost"; // Host name 
$username=""; // Mysql username 
$password=""; // Mysql password 
$db_name=""; // Database name 
$tbl_name=""; // Table name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$encrypted_mypassword=md5($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$encrypted_mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){

// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword"); 
header("location:$_SESSION['url']");
}
else {
echo "Wrong Username or Password";
}
ob_end_flush();
?>

ご覧のとおり、このスクリプトの先頭に$ _SESSION ['url']を出力しようとしていますが、何も返されません。

誰かがこれを手伝ってもらえますか?

ありがとう、

ニック

4

1 に答える 1

1

次のステートメントのように、$ _SESSION['url']のような「複雑な」変数を文字列内に挿入することはできません。

header("location:$_SESSION['url']");

私のバージョンのPHP(5.3.10)では、次のエラーが発生します。

PHP解析エラー:構文エラー、予期しないT_ENCAPSED_AND_WHITESPACE、行の/home/.../test.phpにT_STRINGまたはT_VARIABLEまたはT_NUM_STRINGが必要です...

実際、配列にフィールドを出力する場合は、連結を使用する必要があります。

header("Location: " . $_SESSION['url']);

これが問題の原因である可能性があります。PHPの設定によっては、エラーが表示されず、空白のページが出力される場合があります。phpログを確認してください。

変数の値を文字列で出力する場合は常に、これを使用することをお勧めします。

たとえばecho "Foo: $foo";、使用せず、代わりに使用してくださいecho "Foo : ". $foo;

于 2012-06-07T18:19:39.660 に答える