0

这是我的登录功能中的一个简短代码。我在尝试从特定用户获取 id 并将其索引到新会话时遇到问题。代码已注释,希望你们能帮助我。

$email = mysql_real_escape_string($_POST['email']);
$password = md5(mysql_real_escape_string($_POST['password']));

include_once("include/connection.php");

$query = "SELECT email,password,id FROM user WHERE email ='".$email."' AND password='".$password."'";
$result = mysqli_query($ligaBD,$query);
$value= mysqli_fetch_array($result);

echo $value['id']; // On this line i get the exact id that i want but if i try to echo this inside "if(mysqli_num_rows($result) == 1) { }"  its like the value variable does not exist

if(mysqli_num_rows($result) == 1) {
    session_start();
    echo $value['id']=$_SESSION['id'];exit; // Getting this error -> "Notice: Undefined index: id" 
    header("Location: ./cpanel/#welcome");
}
4

2 回答 2

1

要解决您的问题:

echo $value['id']=$_SESSION['id']

不正确,这就是您收到错误的原因。您将 $value['id'] 的值分配给未定义的 $_SESSION['id'] ,因为您还没有给它一个合适的值。

你应该做

$_SESSION['id'] = $valud['id'];
echo $S_SESSION['id'];

问题是:会话不存在,您没有按应有的方式分配值。

您还应该使用 isset() 来确保会话确实存在。

还要确保您在脚本顶部启动了会话

session_start();

现在有点题外话:

不要使用 md5,它不安全。

你应该使用也正在做

require_once("include/connection.php");

对于您不想丢失的可执行脚本。

您的代码对 SQL 注入开放,您必须使用准备好的语句来防止 sql 注入。

“但是 mysql_real_escape_string() 还不够吗”?不,这不对。

关于如何使用 PDO 和准备好的语句,我已经做出了很多答案,但是您可以轻松地在 google 上搜索它,也适用于 mysqli。

既然我已经回答了您的问题,请在此处查看我对 PHPhass 的回答以及如何轻松使用它而不是 md5:php md5 password for user login

于 2013-04-16T20:40:57.497 回答
0

那是因为您尚未设置$_SESSION['id'],据我所知,您需要将其设置为$value['id']的值(您不能将变量设置为那不存在)。

echo $_SESSION['id']=$value['id'];
于 2013-04-16T20:38:00.183 回答