我正在制作一个简单的登录脚本,当选中单选按钮时,应该让用户登录。如果选中“让我登录”单选按钮,我已经设置了一个24小时后到期的cookie,而且它有效.但是我发现了一些错误,比如: C:\xampp\htdocs\Webintegrator-PHP\MySql&PHP\Register&Login\core_login.php中的未定义索引: user_id,第17行,&警告: mysql_result():无法跳到第20行上的MySQL结果索引6上的0行。
这些是用户的姓名和姓氏,应该从数据库中显示。
但是它们总是在用户登录时显示,直到单选按钮“让我登录”被选中为止。
以下是login_form.php的代码
<?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>和index_login.php
<?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';
}
?>这是core_login.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);
}
}
?>任何解决问题的办法都将不胜感激!
提前感谢
发布于 2014-07-11 06:06:07
似乎你只是需要做一些额外的条件检查。
检查$query_run是否是有效的mysql查询结果。
在尝试将isset放在getuserfield()中之前,要检查isset($_SESSION‘’user_id‘)是否为真。
编辑:
我在PHP ()页面上找到了这样的内容:
The returned result resource should be passed to mysql_fetch_array(), and other functions for dealing with result tables, to access the returned data.这意味着您应该使用mysql_fetch_array()而不是mysql_result()来访问执行的查询的结果。
https://stackoverflow.com/questions/24690121
复制相似问题