我想使用我网站中loggedin用户的会话从数据库中获取数据,这样他就可以看到他的个人资料以及他的所有数据,如姓名、国家、城市和地址。但是我使用的代码不起作用"SELECT * FROM login WHERE username = $_SESSION[user]"
它没有给我任何数据,但当我用这个"SELECT * FROM login WHERE passowrd = $_SESSION[pass]"
替换它时,它工作得很好,但它只提供数据库中的所有数据,而不是只提供会话或登录的用户,请告诉我解决方案
这是完整的代码:
<?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 * use SELECT col1, col2, col3
。尝试混淆您的密码。如果有人闯入你的数据库,他将能够窃取任何用户的身份。点击此处阅读更多信息。如果您正在考虑使用MD5这样简单的东西,也不要忘记彩虹表。
转义查询以防止SQL注入。