Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取登录用户的id以显示类别_Php_Mysql_Sql - Fatal编程技术网

Php 获取登录用户的id以显示类别

Php 获取登录用户的id以显示类别,php,mysql,sql,Php,Mysql,Sql,我有一个处理用户id和cat id的表联接,取决于哪个用户登录取决于他们可以看到的类别-但是,我只能通过在代码中显式输入用户id并需要它知道登录的用户来实现这一点: <?php try{ $results = $dbh->query("SELECT * FROM cat_List INNER JOIN user_cat_l

我有一个处理用户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>";
        }
    }
?>

您正在使用会话,因此在需要使用用户id的php页面中,只需执行以下操作:

<?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'");

正如我在第二个脚本中看到的,您将登录的用户id保存在$\u会话['user']全局变量中。
因此,您只需将查询更改为准备好的语句,如下所示:
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']));

}...

根据用户登录的位置动态选择类别。

警告:请使用正确的方法,不要使用SHA256。由于比特币挖掘的普及,系统每秒可以进行数十万亿次哈希运算,因此基本上毫无价值。所讨论的ID是否存储在
$\u会话['user']
中?如果是这样,就使用它。
$actusr
它代表一个字符串。如果它实际上是一个字符串,则需要引用它。只是说说而已。最好覆盖所有基础;-)@弗雷德二世-你说得对!打字错误。编辑我的答案修复!这不一定是打字错误。会话id可以是一个整数,我们不能确定这一点。正如我所说的,最好覆盖所有的基地。我在底部做了一个注释,如果它是一个字符串,那么引用它;-)干杯-现在我们来看看OP是否接受它。:-)布昂吉奥诺/布昂那色拉。@Fred ii-现在我记得了,你会说一点意大利语!:)啊,佩卡托,我没有skype。我来自魁北克,是的。。。我说法语。这就是为什么我能很好地理解意大利语;-)如果这两个脚本位于两个不同的页面中,则必须在第二个页面上启动会话才能使其正常工作。