这是我的登录功能的简短代码。我试图从特定用户获取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");
}
答案 0 :(得分:1)
解决您的问题:
echo $value['id']=$_SESSION['id']
不正确,这就是您收到错误的原因。您将$ value ['id']的值分配给$ _SESSION ['id'],这是UNDEFINED因为您还没有给它一个正确的值。
你应该这样做
$_SESSION['id'] = $valud['id'];
echo $S_SESSION['id'];
问题是:会话不存在,你没有像你应该那样分配值。
您还应该使用isset()来确保会话实际存在。
还要确保使用
在脚本顶部启动会话session_start();
现在有点偏离主题:
不要使用md5,这不安全。
您也应该使用
require_once("include/connection.php");
表示您不想丢失的可执行脚本。
您的代码对SQL注入是开放的,您必须使用预准备语句来阻止sql注入。
“但是mysql_real_escape_string()不够”?不,不是。
我已经就如何使用PDO和准备好的语句做了很多答案,但你也可以轻松地谷歌这个,也适用于mysqli。
现在我已经回答了你的问题,请看看我在这里关于PHPhass的答案,以及如何轻松使用它而不是md5:php md5 password for user login
答案 1 :(得分:0)
那是因为你还没有设置 $ _ SESSION ['id'] ,根据我的收集,你需要将它设置为 $ value ['的值id'] (你不能将变量设置为不存在的东西)。
echo $_SESSION['id']=$value['id'];