我有一个表连接,它处理user_id和cat_id,具体取决于他们可以看到哪些类别 - 但是,我只能通过在代码中明确键入用户ID来实现这一点。需要它知道它登录的用户:
<?php
try{
$results = $dbh->query("SELECT *
FROM cat_List
INNER JOIN user_cat_link_table
ON cat_List.Cat_ID = user_cat_link_table.Cat_ID
WHERE user_cat_link_table.UserID = 10 //HERE IS THE ISSUE!
");
}catch(Exception $e) {
echo $e->getMessage();
die();
}
$docs = $results->fetchAll(PDO::FETCH_ASSOC);
foreach($docs as $docs){
echo '
<a href="catView.php?cat_id='.$docs["cat_id"].'">
<div class="indexBox">
<div class="indexBoxHeader">
<i class="fa fa-users" style="font-size: 2em;"></i></div>
<div class="indexBoxFooter">
<p>'.$docs["cat_title"].'</p>
</div>
</div>
</a>
';}
?>
用户使用此脚本登录:
<?
session_start();
if(isset($_SESSION['user'])){
header("Location:home.php");
exit;
}
$dbh=new PDO('mysql:dbname=######;host=localhost', '######', '######');/*Change The Credentials to connect to database.*/
$email=$_POST['username'];
$password=$_POST['pass'];
if(isset($_POST) && $email!='' && $password!=''){
$sql=$dbh->prepare("SELECT * FROM user_login WHERE username=?");
$sql->execute(array($email));
while($r=$sql->fetch()){
$p=$r['password'];
$p_salt=$r['psalt'];
$id=$r['id'];
$email=$r['username'];
$firstname=$r['firstname'];
$lastname=$r['lastname'];
}
$site_salt="subinsblogsalt"; /*Common Salt used for password storing on site. You can't change it. If you want to change it, change it when you register a user.*/
$salted_hash = hash('sha256',$password.$site_salt.$p_salt);
if($p==$salted_hash){
$_SESSION['user']=$id;
$_SESSION['username']=$email;
$_SESSION['firstname']=$firstname;
$_SESSION['lastname']=$lastname;
header("Location:home.php");
}else{
echo "<h2>Username/Password is Incorrect.</h2>";
}
}
?>
有3个表,有user_login表,cat_list表和处理关系的表,但是燃烧的问题是让脚本知道用户是谁以及与用户关联的那些类别如何第三个表中的行。
答案 0 :(得分:1)
您正在使用会话,因此您需要在php页面中使用用户ID:
<?php
session_start();
$actusr = $_SESSION['user'];
try{
$results = $dbh->query("SELECT *
FROM cat_List
INNER JOIN user_cat_link_table
ON cat_List.Cat_ID = user_cat_link_table.Cat_ID
WHERE user_cat_link_table.UserID = '$actusr'");
答案 1 :(得分:1)
正如我在第二个脚本中看到的那样,您将登录的用户ID保存在$ _SESSION [&#39; user&#39;]全局变量中。 所以你只需要将查询更改为准备好的语句,如下所示:
session_start();
try{
$results = $dbh->prepare("SELECT *
FROM cat_List
INNER JOIN user_cat_link_table
ON cat_List.Cat_ID = user_cat_link_table.Cat_ID
WHERE user_cat_link_table.UserID = :user_id //HERE IS THE ISSUE! ");
$dbh->execute(array(':user_id' => $_SESSION['user']));
}...
根据用户的登录情况动态选择类别。