1

ユーザー メンバーシップを設計する別の試み。ログインに成功し、データベース内のデータを見つけました。しかし、インデックス ファイルでは、ログイン後、登録してログインする代わりに、ログインしているかどうかを確認し、アカウントへのリンクを表示する必要があります。コードは次のとおりです。

<?php
session_start(); // Must start session first thing
// See if they are a logged in member by checking Session data
$toplinks = "";
if (isset($_SESSION['id'])) {
// Put stored session variables into local php variable
$userid = $_SESSION['id'];
$username = $_SESSION['username'];
$toplinks = '<a href="member_profile.php?id=' . $userid . '">' . $username . '</a>           &bull; 
<a href="member_account.php">Account</a> &bull; 
<a href="logout.php">Log Out</a>';
} else {
$toplinks = '<a href="join_form.php">Register</a> &bull; <a     href="login.php">Login</a>';
}
?>

そして、これがログインフォームコードです。問題は、セッションIDが保存されていないためだと思います。

<?php
if ($_POST['email']) {
//Connect to the database through our include 
include_once "connect_to_mysql.php";
$email = stripslashes($_POST['email']);
$email = strip_tags($email);
$email = mysql_real_escape_string($email);
$password = preg_replace("[^A-Za-z0-9]", "", $_POST['password']); 
// filter everything but numbers and letters
$password = md5($password);
// Make query and then register all database data that -
// cannot be changed by member into SESSION variables.
// Data that you want member to be able to change -
// should never be set into a SESSION variable.
$sql = mysql_query("SELECT * FROM users WHERE email='$email' AND password=
'$password'AND emailactivated='1'"); 
$login_check = mysql_num_rows($sql);
if($login_check > 0){ 
while($row = mysql_fetch_assoc($sql)){ 
    // Get member ID into a session variable
    $userid = $row["id"];   
    $_SESSION['id'] = $userid;
    // Get member username into a session variable
    $username = $row["username"];
    $_SESSION['username'] = $username;
    // Update last_log_date field for this member now
    mysql_query("UPDATE users SET lastlogin=now() WHERE id='$userid'"); 
    // Print success message here if all went well then exit the script
    header("location: member_profile.php?id=$userid"); 
    exit();
} // close while
} else {
// Print login failure message to the user and link them back to your login page
print '<br /><br /><font color="#FF0000">No match in our records, try again 
</font>  <br/>
<br /><a href="login.php">Click here</a> to go back to the login page.';
exit();
}
}// close if post
?>

もう一度誰かのチュートリアルに従って、それを自分のウェブサイトに実装しようとしていますが、うまくいけば完璧です。ログイン後に $toplinks が設定されない理由を教えてください。

4

2 に答える 2

3

session_start()問題は、セッションを使用するすべてのファイルにを含める必要があることだと思います。それ以外の場合は、通常の配列のようにファイル内で機能しますが、グローバルでは機能しません。あなたのフォームでは、あなたがセッションを開始したことがわかりません。

編集:これは、ファイルが2つある場合にのみ必要です。ファイルが1つだけで、他のページをインクルードすると、その上に1回インクルードすると機能します。

于 2012-12-15T01:05:48.560 に答える
1

ログアウトする場合は、ログアウトファイルを作成し、次のファイルを含める必要があります。

session_destroy();

おそらく、次のようなことを行ってリダイレクトリンクを取得するためのhrefも追加します。

header('location:index.php'); // will return you to index as soon as you logout.

于 2012-12-15T01:36:12.067 に答える