目前我有一个PHP脚本作为登录系统工作,完全正常,我已成功连接到数据库,并能够在站点和数据库之间进行交互。
所以,问题。我在我的主login.PHP页面(包含实际表单)中使用了include函数来调用处理登录功能的脚本。我在body标签之间“包含”了这个内容,因为当您成功登录或失败时会弹出内容。现在问题实际上就出现了。
我需要在用户成功登录后添加会话,以便它可以在所有页面上运行。唯一可行的方法是,如果我将session_start()放在页面的最顶层。但我需要在body标签中的表单下显示内容。我很困惑我应该怎么做才能解决这个问题。有人会碰巧有任何想法吗?
以下代码位于login.php的正文标记中:
<?php
// DATABASE VARIABLES
$user_name = "";
$pass_word = "";
$database = "";
$server = "";
// CONNECTS TO DATABASE
$db_handle = mysql_connect($server, $user_name, $pass_word);
$db_found = mysql_select_db($database, $db_handle);
// ACCOUNT INFORMATION
$email;
$password;
$num_rows = 0;
// IF SUBMIT IS CLICKED
if (isset($_POST['submit'])) {
// STORES INPUTS AS VARIABLES
$email = $_POST['email'];
$password = $_POST['password'];
// REMOVES HARMFUL CODE
$email = htmlspecialchars($email);
$password = htmlspecialchars($password);
if ($db_found) {
/*
// SUCCESS
print '<div class="password-wrapper"><div class="password-match">';
print '<li class="pass-match">Login Successful</li>';
print '</div></div>';
// FAILURE
print '<div class="password-wrapper"><div class="password-match">';
print '<li class="pass-nomatch">Email Already Exists</li>';
print '</div></div>';
*/
/*// REMOVES SQL INJECTION
$email = quote_smart($email, $db_handle);
$password = quote_smart($password, $db_handle);*/
$SQL = "SELECT * FROM accounts WHERE email = '$email' AND password = '$password'";
$result = mysql_query($SQL);
$num_rows = mysql_num_rows($result);
if ($num_rows > 0) {
print '<div class="password-wrapper"><div class="password-match">';
print '<li class="pass-match">Login Successful</li>';
print '</div></div>';
/*
session_start();
$_SESSION['login'] = "1";
header("Location: page1.php");
*/
}
else {
print '<div class="password-wrapper"><div class="password-match">';
print '<li class="pass-nomatch">Invalid Credentials</li>';
print '</div></div>';
/*
session_start();
$_SESSION['login'] = '';
*/
}
}
else {
}
}
?>
答案 0 :(得分:0)
您要包含php脚本,session_start()
只需要调用一次,并且在父页面上。在login.php
页面的最顶部放置session_start();
稍后在页面中调用PHP中的session_start不会有任何损害。