0

こんにちは、ユーザーがログインできるPHPのログインログアウト機能があります。彼がモデレーターの場合は moderator.php にリダイレクトされ、エージェントの場合は agent.php ページに移動します。

ログインする必要があるindex.phpでは..コードは次のとおりです。

<form name="form1" method="post" action="check_login.php">
  <center><div id='login_header'><b><font face='Arial Black' color='black' size='4px'>Sign in to Minquep!</font></b></div></cen                 
  <br/><br/>
  <center><label>Username:</label><input type='text' name='myusername' size='20'><br/><label>Password:</label>
  <input type='password' name='mypassword' size='20'><br/>
  <input type='text' name='myfirstname' style='display:none;'>
  </center>
  <br/><input type='submit' value='Submit' name='submit' class='submit'>    

</form>

check_login.php は次のとおりです。

<?php

$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="minquep_test"; // Database name
$tbl_name="users"; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or

die("cannot connect");

mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form
$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);

$sql="SELECT * FROM $tbl_name WHERE login='$myusername' and password='$mypassword'";

$result=mysql_query($sql);

$count=mysql_fetch_array($result);

if($count['user_type']== "agent"){
echo '<script type="text/javascript">alert("You have logged in successfully!\n"); return false;</script>';
echo "<meta http-equiv=\"refresh\" content=\"0;URL=pages/agent.php\">";
session_register("myusername");
session_register("mypassword");


//header("location:pages/agent.php");



}
else if ($count['user_type']== "moderator"){
echo '<script type="text/javascript">alert("You have logged in successfully!\n"); return false;</script>';
echo "<meta http-equiv=\"refresh\" content=\"0;URL=pages/moderator.php\">";
session_register("myusername");
session_register("mypassword");

//header("location:pages/moderator.php");


}
else {
echo "<script type='text/javascript'>alert('Invalid Login! Please Try Again!');</script>";
echo "<meta http-equiv=\"refresh\" content=\"0;URL=index.php\">";
}
?>

moderator.php と agent.php の両方で、ログインしているユーザーのユーザー名を次のように出力します。

<?php
session_start();

print("<b><h2>Hi! $_SESSION[myusername] (You are logged in as moderator / agent) </h2>");

?>

logout.php では、セッションを破棄して index.php にリダイレクトするだけです。

<?php
session_start();
session_destroy();
echo "<meta http-equiv=\"refresh\" content=\"0;URL=../index.php\">";
exit;


?>

問題は、モデレーター アカウントまたはエージェント アカウントを使用した初めてのテスト ログイン中に、ログイン後にユーザー名が表示されないことです。「こんにちは! モデレーターとしてログインしています」または「こんにちは! ログインしていますエージェントとして」。しかし、ログアウトして再度ログインすると、ユーザー名はすでに表示されています...本来あるべき姿のように、「こんにちは、モデレーターとしてログインしています」。または「こんにちは!エージェントとしてログインしています」。

では、最初のcheck_login中に私の**$_SESSION("myusername")**が機能しない理由は何でしょうか。

ありがとう。

4

1 に答える 1

1

session_start();最初のページ (表示されていない場所) で関数を呼び出す必要があります。

ユーザーとのセッションを開始し、そこに保存されている変数を参照する場合は、スクリプトの最後までセッションを使用する予定がない場合でも、ページの最初からセッションを開始してください。

$_SESSIONそのコマンドを送信すると、オブジェクトから変数を設定および参照できるようになります。

于 2012-08-02T14:26:25.093 に答える