我希望有人可以帮我解决我的问题。基本上我想要创建的是登录系统,而客户可以登录查看他们的包裹详细信息(地址,帐单号码等)但我很困惑我如何根据登录的用户显示客户结果。
到目前为止,我有2个表,一个名为 userlogin ,另一个名为 userinfo 。 Userlogin 只包含用户名和密码数据,而 userinfo 将包含所有客户信息(地址,帐单号等)。这两个表共享一行具有相同值的行 user_id 。我已经尝试使用MYSQL内连接等,但我不确定我哪里出错了,为什么我不能返回一个用户信息,而是显示所有结果,或者没有。
以下是我的2页的代码,首先是登录页面。
//Login.php
session_start();
if($user_is_valid) {
//Store the id in the session
$_SESSION['user_id'] = $user_id;
//Redirect to the home-page
header('Location: home.php');
exit;
}
////// Login Section.
$Login=$_POST['Login'];
if($Login){ // If clicked on Login button.
$username=$_POST['username'];
$password=$_POST['password']; // Encrypt password with md5() function.
// Connect database.
//connect
$con = mysql_connect("*****","*****","*****");
if (!$con){
die('Could not connect: ' . mysql_error());
}
//datebase
mysql_select_db("*****", $con);
// Check matching of username and password.
$result=mysql_query("select * from userlogin where username='$username' and password='$password'");
if(mysql_num_rows($result)!='0'){ // If match.
$_SESSION ['user']['id'] = $result ['id'];
session_register("username"); // Craete session username.
header("location:home.php"); // Re-direct to main.php
exit;
}
else { // If not match.
$message="--- Invalid Username or Password ---";
}
} // End Login authorize check.
这是主页(显示客户信息的页面)。
//Home.php
if(!strlen(trim($_SESSION['username']))) {
header("Location:login.php");
exit();
}
session_start();
echo $_SESSION['user_id']; //This will output the value we set earlier
$con = mysql_connect("*****","*****","*****");
if (!$con){
die('Could not connect: ' . mysql_error());
}
//datebase
mysql_select_db("*****", $con);
//select
$user_id = $_GET['user_id'];
$result = mysql_query("SELECT userinfo.name as name, userinfo.address as address, userlogin.username as username
FROM userinfo
INNER JOIN userlogin ON userlogin.user_id = userinfo.user_id
WHERE userlogin.user_id = userinfo.user_id");
while($row = mysql_fetch_array($result)){
echo $row['name'] . '</br> ';
echo $row['username'] . '</br> ';
echo $row['address'] . '</br> ';
}
所以在坚果壳中,我想要做的是创建一个系统,而用户可以进入我们的网站,登录然后显示他们的信息,但我不确定我哪里出错了,老实说,我很困惑自己。
我知道我可能没有解释得这么好,或者我的代码可能不是很干净,但请提出任何反馈,问题,或者如果你能指出我正确的方向我会非常感激!谢谢!
答案 0 :(得分:0)
变化:
$result = mysql_query("SELECT userinfo.name,userinfo.address,userinfo.username
FROM userinfo
INNER JOIN userlogin ON userlogin.user_id = userinfo.user_id
WHERE userlogin.user_id = $user_id;");
到
$result = mysql_query("SELECT userinfo.name,userinfo.address,userinfo.username
FROM userinfo
INNER JOIN userlogin ON userlogin.user_id = userinfo.user_id
WHERE userlogin.user_id = $user_id");
你的php var。
后面有一个分号答案 1 :(得分:0)
您可以将会话视为存储状态的位置 “pageloads”/请求。在这种情况下,状态可能是 用户已经过身份验证,如果是,那么当前的身份是什么 用户有。例如,当用户登录时 并且您已在数据库/后端验证了他们的身份 您初始化会话并存储其用户ID。这允许 您可以在以下任何请求中检索此ID,直到您 摧毁会议。
//Login.php
session_start();
if($user_is_valid) {
//Store the id in the session
$_SESSION['userid'] = $userId;
//Redirect to the home-page
header('Location: Home.php');
exit;
}
这允许我们在任何后续页面加载中检索userid
只需初始化会话并获取内容即可
$_SESSION['userid']
,如此:
//Home.php
session_start();
echo $_SESSION['userid']; //This will output the value we set earlier
最后,也许我们还需要一个清除我们存储内容的页面 当前用户的会话,即在用户想要的情况下 注销:
//Logout.php
session_start();
$_SESSION = array();
session_destroy();
此设置还可确保用户只能看到 他们被允许的信息。即使会话可以被篡改 如果一个人不小心,他们就要惹麻烦了 只需更改查询字符串中的某些参数即可。
至于你的实际数据库交互,我建议切换 到mysqli或MySql PDO,因为旧的mysql已被弃用,请参阅: http://php.net/pdo_mysql或http://php.net/mysqli
这也使您可以轻松利用预先准备好的语句 一种避免SQL注入问题的简单方法。显然,有 一些开销和与使用预准备语句相关的问题, 但在你的情况下,我认为这对你来说最简单。查看MySQL Prepared Statements或进行快速stackoverflow搜索。