[英]Session not being saved as id
基本上,我一直在努力解决我的PHP代码中的一个未知问题。
代码( login_config.php
):
<?php
session_start(); //POST VARIABLES
$submit = $_POST['login_submit'];
$password = $_POST['login_password'];
$email = $_POST['login_email'];
if(isset($submit)){
require 'password_config.php';
require 'connect.php';
//PASSWORD VERIFYING
$pass_query = "SELECT password FROM users WHERE email='$email'";
$queried = mysql_query($pass_query);
while($row = mysql_fetch_array($queried)){
$user_pass = $row['password'];
$veri_password = password_verify($password, $user_pass);
}
if($veri_password != true){$errors[] = '-Account does not exist ';}
elseif($veri_password = true){
//CHECKING NUM ROWS
$sql = "SELECT id, username FROM users WHERE email='$email'";
$entered_user = mysql_query($sql);
$num_rows = mysql_num_rows($entered_user);
//STORING ID AS SESSION
while($row1 = mysql_fetch_array($entered_user)){
//PROBLEM IS HERE
$row1['id'] = $id;
}
//ERRS ARRAY ESTABLISHED
$errors = array();
//FURTHER VERIFYING
if( empty($password) || empty($email) )
{
$errors[] = 'Please do not leave fields empty';
}
elseif( $num_rows != 1 )
{
$errors[] = '-Account does not exist ';
}
elseif( $num_rows == 1 )
{
$id = $_SESSION['key'];
header('Location: profile.php');
exit();
}
}
}
?>
问题:为什么当我通过header()重定向到profile.php时,$ _ SESSION ['key']值为null? 我一直在使用var_dump()证明这一点。 我希望会话密钥在数据库中具有用户ID的值,并且我的代码没有问题。
首先, $id
变量没有在任何地方定义 。
做$row1['id'] = $id;
意味着assigning $id value to $row1['id']
如果要将用户ID存储在$id
,则应使用
$id = $row1['id'];
$id = $_SESSION['key'];
的相同错误$id = $_SESSION['key'];
这意味着assiging $_SESSION['key'] to $id
。 如果要在会话中存储$id
值:
$_SESSION['key'] = $id;
据我所知,您的代码中有2个问题,这两个问题都是您正在运行循环以获取数据,因此这是代码,我标记了您正在拧线的行
<?php
session_start();
//POST VARIABLES
$submit = $_POST['login_submit'];
$password = $_POST['login_password'];
$email = $_POST['login_email'];
if(isset($submit)){
require 'password_config.php';
require 'connect.php';
//PASSWORD VERIFYING
$pass_query = "SELECT password FROM users WHERE email='$email'";
$queried = mysql_query($pass_query);
//while($row = mysql_fetch_array($queried)){ //no need to run loop here
$row = mysql_fetch_array($queried);
$user_pass = $row['password'];
$veri_password = password_verify($password, $user_pass);
// } //remove this too
if($veri_password != true){$errors[] = '-Account does not exist ';}
elseif($veri_password = true){
//CHECKING NUM ROWS
$sql = "SELECT id, username FROM users WHERE email='$email'";
$entered_user = mysql_query($sql);
$num_rows = mysql_num_rows($entered_user);
//STORING ID AS SESSION
//while($row1 = mysql_fetch_array($entered_user)){//no need to run loop here
$row1 = mysql_fetch_array($entered_user);
//PROBLEM IS HERE
//$row1['id'] = $id; // you can't store values in $id like this
$id = $row1['id']; // right way to do
} //remove this too
//ERRS ARRAY ESTABLISHED
$errors = array();
//FURTHER VERIFYING
if( empty($password) || empty($email) )
{
$errors[] = 'Please do not leave fields empty';
}
elseif( $num_rows != 1 )
{
$errors[] = '-Account does not exist ';
}
elseif( $num_rows == 1 )
{
$id = $_SESSION['key']; //again wrong you cant load $id into session
$_SESSION['key'] = $id; //right way to load $id variable value into session
header('Location: profile.php');
exit();
}
}
}
?>
一律包括
ini_set("display_errors", "On");
ERROR_REPORTING(E_ALL);
作为测试时代码的前两行,或相应地更改测试环境php.ini。 这将为您提供来自php的所有可能的帮助/错误声明
第二,使用session_start()时,在打开Php-tag之前删除所有空格。 如果有空格,如您的代码所示,php的行为将不正常。
然后再次查看您的代码。 /尼尔毫升
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.