我想使用我网站上登录用户的 session 从数据库中获取数据,这样他就可以看到他的个人资料以及他的所有数据,如姓名、国家、城市和地址。但是我正在使用的代码不起作用 "SELECT * FROM login WHERE username = $_SESSION[user]"
它没有给我任何数据,但是当我用这个 "SELECT * FROM login WHERE passowrd = $_SESSION[pass]"
替换它时它工作正常,但它提供了数据库中的所有数据,而不仅仅是 session 或登录的用户,请告诉我解决方案
完整代码如下:
<?php
if(!isset($_COOKIE['loggedin'])){
header("location:index.php");
}
session_start();
if(!isset($_SESSION['user'])){
header("location: index.php");
}
else {
?>
<?php
$con=mysqli_connect("localhost","root","123","user");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM login WHERE username = $_SESSION[user]")
or die(mysql_error());
echo "<table border='1'>
<tr>
<th>Name</th>
<th>Country</th>
<th>City</th>
<th>Address</th>
</tr>";
while($row = mysqli_fetch_array($result, MYSQL_ASSOC))
{
echo "<tr>";
echo "<td>" . $row['name'] . "</td>";
echo "<td>" . $row['country'] . "</td>";
echo "<td>" . $row['city'] . "</td>";
echo "<td>" . $row['address'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_close($con);}
?>
最佳答案
你有很多错误,伙计。让我试着给你一些建议:
代替:
“SELECT * FROM login WHERE username = $_SESSION[user]”
你需要这样的东西:
"SELECT * FROM login WHERE username = '".$_SESSION[user]."'"
您需要在用户名两边加上撇号。
确保
$_SESSION[user]
存在并且确实拥有用户名。切勿编写类似
SELECT *
的查询,因为这不是一个好习惯。最佳做法是只选择您真正需要的列。如果我们谈论内存使用,它会更安全、更经济。因此,不要使用SELECT * 使用 SELECT col1, col2, col3
。尝试混淆您的密码。如果有人攻破了您的数据库,他将能够窃取任何用户的身份。阅读更多 here和 here .如果您正在考虑使用像 MD5 这样简单的东西,也不要忘记彩虹表。
转义您的查询以防止 SQL injections .
关于php - 没有从数据库中为用户在 PHP 中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20168280/