Php 选中“让我登录”时,不显示用户数据
我正在制作一个简单的登录脚本,当选中单选按钮时,该脚本应该让用户保持登录状态。 我已经设置了一个cookie,如果选中“让我登录”单选按钮,它将在24小时后过期,并且有效。。。 但是我得到了一些错误,比如:注意:未定义的索引:C:\xampp\htdocs\Webintegrator PHP\MySql&PHP\Register&Login\core\u Login.PHP中的user\u id,在第17行 &警告:mysql_result():无法跳转到第20行C:\xampp\htdocs\Webintegrator PHP\mysql&PHP\Register&Login\core_Login.PHP中mysql结果索引6的第0行 这些是应该从数据库中显示的用户名和姓氏 但是,在选中单选按钮“Keep me Loggin in”(保持我登录)之前,用户登录时始终会显示它们 下面是登录表单php的代码Php 选中“让我登录”时,不显示用户数据,php,Php,我正在制作一个简单的登录脚本,当选中单选按钮时,该脚本应该让用户保持登录状态。 我已经设置了一个cookie,如果选中“让我登录”单选按钮,它将在24小时后过期,并且有效。。。 但是我得到了一些错误,比如:注意:未定义的索引:C:\xampp\htdocs\Webintegrator PHP\MySql&PHP\Register&Login\core\u Login.PHP中的user\u id,在第17行 &警告:mysql_result():无法跳转到第20行C:\xampp\htdocs\
<?php
if(isset($_POST['username']) && isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$password_hash = md5($password);
if(!empty($username) && !empty($password)){
$query = "SELECT id FROM users WHERE username = '" . mysql_real_escape_string($username) . "' AND password = '" . mysql_real_escape_string($password_hash) . "'";
if($query_run = mysql_query($query)){
$query_num_rows = mysql_num_rows($query_run);
if($query_num_rows == 0) {
echo "Invalid username/password combination";
} elseif ($query_num_rows == 1) {
if(isset($_POST['remember_me'])){
setcookie("remember_username", $_POST['username'], time()+3600*24);
setcookie("remember_password", $_POST['password'], time()+3600*24);
$user_id = mysql_result($query_run, 0, 'id');
$_SESSION['user_id'] = $user_id;
header ('Location: index_login.php');
} elseif(isset($_POST['keep_me'])){
$user_id = mysql_result($query_run, 0, 'id');
setcookie('keep_me_loggedin', $user_id, time()+3600*24);
header ('Location: index_login.php');
} else {
$user_id = mysql_result($query_run, 0, 'id');
$_SESSION['user_id'] = $user_id;
header ('Location: index_login.php');
}
}
}
} else {
echo "You must supply a username & password";
}
}
?>
<form action="<?php echo $current_file; ?>" method="POST">
Username:<input type="text" name="username" value="<?php if(isset($_COOKIE['remember_username'])) {echo $_COOKIE['remember_username'];} ?>"><br/><br/>
Password:<input type="password" name="password" value="<?php if(isset($_COOKIE['remember_password'])) {echo $_COOKIE['remember_password'];} ?>"><br/><br/>
<input type="radio" name="remember_me"> Remember me?<br/><br/>
<input type="radio" name="keep_me"> Keep me logged in?<br/><br/>
<input type="submit" name="submit" value="Log in">
</form>
<?php
require 'connect_login.php';
require 'core_login.php';
if(loggedin()) {
$firstname = getuserfield('firstname');
$surname = getuserfield('surname');
echo "You are logged in, " . "$firstname " . "$surname " . "<a href='logout.php'>Log out</a>";
} else {
include 'login_form.php';
}
?>
<?php
ob_start();
session_start();
$current_file = $_SERVER['SCRIPT_NAME'];
function loggedin(){
if (isset($_SESSION['user_id']) && !empty($_SESSION['user_id']) || (isset($_COOKIE['keep_me_loggedin'])) && (!empty($_COOKIE['keep_me_loggedin']))) {
return true;
} else {
return false;
}
}
function getuserfield($field) {
$query = "SELECT $field FROM users WHERE id = '" . $_SESSION['user_id'] . "'";
if ($query_run = mysql_query($query)) {
return mysql_result($query_run, 0, $field);
}
}
?>
似乎您只需要执行一些附加条件检查
检查$query\u run是否是有效的mysql查询结果
在尝试将isset($\u SESSION['user\u id'])粘贴到getuserfield()的查询中之前,您需要检查isset($\u SESSION['user\u id'])是否为true
编辑:
我在PHP mysql_query()页面上找到了以下内容:
这意味着您应该使用mysql\u fetch\u array()而不是mysql\u result()来访问已执行查询的结果
运行$query\u正在运行。。正如我所说,我可以使用$_SESSION['user\u id']登录和注销。但是当用户选中单选按钮“让我登录”时,我希望用户使用cookie登录。。因此,用户下次访问该页面时仍应登录。但问题是,当用户使用cookie登录时,它不会显示用户名和姓氏哦,这可能是因为您没有在elseif语句中设置$\u SESSION['user\u id']
,而是在其他两个语句中设置了它。您应该只有一条$\u会话['user\u id']=$user\u id
语句,而不是3条。我会在检查$_POST['memory_me']`之前放置它,正如我所说,在尝试访问它之前,您应该检查isset($_SESSION['user_id'])。当您登录/注销时它工作的原因是因为您为这些情况设置了$\u会话['user\u id']。。。但是您没有将其设置为“让我登录”案例。您可能还需要修改loggedin()例程的逻辑。特别是将| |更改为&。好的,现在我已经将$\u会话['user\u id']
设置为在所有三种情况下都能工作。。现在,当我登录并选中单选按钮“让我登录”时,它会显示用户数据,但当我关闭浏览器并转到index_login.php页面时,它会显示与未定义索引相同的错误,并且不再显示用户数据。。这意味着cookie没有正常工作?
The returned result resource should be passed to mysql_fetch_array(), and other functions for dealing with result tables, to access the returned data.