我正在尝试进行SQL查询,如果userID与会话和表的匹配,则只从表中选择数据。
我的问题是它没有确认与会话关联的userID变量并返回一个空字符串。它也为fName,lName和密码执行此操作,但对其他人(包括用户名和级别)执行此操作,它从数据库获取这些值并显示与会话关联的正确值。为什么有些列名称在我的代码中有效但在其他代码中却没有
我已经尝试回显用户ID,但是当我回显用户名时,它会显示它。
<?php
session_start();
include "connection.php";
if(!isset($_SESSION["username"])){
header("Location: login.php");
}
$userID = $_SESSION["userID"];
$sql = ("SELECT * FROM users WHERE userID = '$userID'");
$result = mysqli_query($con, $sql);
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
echo "ID: " . $row["userID"]. ";
}
}
else{
echo "No records";
}
?>
这只是我的代码的一部分,我只是借用W3Schools的if语句检查事情,看看它们是否可行
adminPage.php
<?php
session_start();
echo $_SESSION ["level"];
if(isset($_SESSION["username"])){
if($_SESSION["level"] != "admin"){
header("Location: users.php");
}
else{
header("Location: adminPage.php");
}
}
?>
login.php
<?php
if (!isset($_SESSION["username"])){
echo"
<p class = \"big\"> Login </p>
<hr>
<form action = \"loginInsert.php\" method = \"post\">
Username: <input type = \"text\" name = \"username\"><p>
Password: <input type = \"password\" name = \"password\"><p>
<button type = \"submit\" value = \"Submit\"/> Sign in </button>
<hr>
Not a member? <a href = \"signUp.php\"><button type = \"button\"> Sign Up </button></a>
</p>
</form>";
}
else{
header("Location: admin.php");
}
?>
loginInsert.php
<?php
session_start();
include "connection.php";
if(isset($_POST["username"])){
$username = $_POST["username"];
}
if(isset($_POST["password"])){
$password = $_POST["password"];
}
$sql = "SELECT * FROM users WHERE username = '$username' and password = '$password'";
$result = mysqli_query($con, $sql);
$row = mysqli_fetch_assoc($result);
if(mysqli_num_rows($result) == 1){
$_SESSION["username"] = $username;
$_SESSION["level"] = $row ["level"];
if ($_SESSION["level"] == "admin"){
header("Location: admin.php");
}
else{
header("Location: users.php");
}
}
else{
header("Location: login.php");
}
?>
感谢您花时间阅读我的问题
答案 0 :(得分:0)
编辑3:请包含您的所有文件。像USER.PHP
我正在尝试进行SQL查询,如果userID与会话的那些匹配,那么它只从表中选择数据。
根据您的问题,我不得不怀疑您是否初始化了会话变量?请发布您的login.php文件。
我之前遇到过类似的问题,我的会话变量神秘地丢失了。我建议的一件大事就是在你的所有页面上进行session_start()。我相信您的问题要么是(A)您没有分配它,要么(B)您没有真正在数据库中调用您的值。更有可能是后者。
使用对象获取值。你有这样的东西登录
$user = new user();
$_SESSION['UserName']=$_POST['UserName'];
$_SESSION['UserMail']=$_POST['UserMail'];
对于创建帐户,您只插入了值?如果是这样,你可能想要将它添加到你的insertUser.php文件或类似的东西,以便对象$ user正确地具有他或她的值。
$user->setUserName($_POST['UserName']);
$user->setUserMail($_POST['UserMail']);
关于评论:@esqew我可能错了,但我认为mysqli会自动清理查询。你还应该使用 - &gt; fetchAll();如果您正在使用循环。
编辑:对不起,我无法评论,因为没有足够的街头信誉,但我想强调一下 - 请确保您确切知道超级全局变量的作用。每次启动会话时都会创建$ _SESSION,并在结束时销毁它。我们假设您在insertUser.php中创建了一个用户,并说
$_SESSION['UserName']=$_POST['UserName'];
如果你只把它放在insertUser中,那么当你登录时$ _SESSION变量就不存在,除非你把它放在你的login.php文件中。 $ _SESSION是非常通用和可消耗的,但你必须始终记住直接与数据库交谈而不是PHP。例如,这是我为我的网站写的:
require_once "conn.php";
$req=$dbh->prepare("SELECT * FROM users WHERE UserMail=:UserMail AND UserPassword=:UserPassword");//:thepassword
$req->execute(array(
'UserMail'=>$this->getUserMail(),
'UserPassword'=>$this->getUserPassword()
));
if($req->rowCount()==0){//None matched, 0 selected
//header("Location: ../index.php?error=1");
//echo "<script type='text/javascript'>alert('Incorrect Email or Password.');</script>";
header("Location: ../index.php?error=1");</script>";
return false;
}
else{
while($data=$req->fetch()){//Fetches closest row from table
//PERSON ASKING QUESTION MAKE SURE YOU HAVE SOMETHING LIKE THIS
$this->setUserId($data['UserId']);
$this->setUserName($data['UserName']);
$this->setUserPassword($data['UserPassword']);
$this->setAge($data['Age']);
$this->setUserMail($data['UserMail']);
$this->setUserLocation($data['UserLocation']);
header("Location: Home.php");
return true;
}
}
}
编辑3:请包含您的所有文件。像USER.PHP
答案 1 :(得分:0)
我发现它无法正常工作,因为我没有正确设置会话变量。谢谢你的帮助:))