首页 > 解决方案 > PHP函数乱序输出数据

问题描述

我编写了一个函数来查询数据库,以找出使用会话中的用户 ID 登录后的特定用户角色。但是当我去测试它时。它输出正确的数据,但它不在正确的位置。例如,当我使用我的一个用户名是“Fred12”的用户登录时,它会说“你好,fred12,你的角色在上面,它的用户角色在一个长字符串中。见附件截图问题截图。角色应该是相同的行与其他所有内容一样。下面我包含了我的函数和出现问题文本的页面的代码。我已经使用相同的代码发布了其他问题,因为在到达这一点之前我遇到了一些其他问题。

功能

function getRoleName($conn, $id)
{
        $id = $_SESSION['userid'];
        $sql = "SELECT 
                * FROM users
                INNER JOIN user_roles ON users.usersId = user_roles.user_id
                INNER JOIN roles ON user_roles.role_id = roles.role_id 
                WHERE users.usersId = ?;";
        $stmt = $conn->prepare($sql);
        //$stmt -> mysqli_stmt_prepare($stmt, $sql);
        $stmt -> bind_param("s", $_SESSION['userid']);
        $stmt -> execute();
        $result = $stmt->get_result();
        if($result->num_rows > 0){

            while ($row = $result->fetch_assoc()){
                if ($row['role_name'] == 0) {
                $array = array($row['role_name']);
                foreach ($array as $value) {
                        echo ($value);
                }
                }else{
                echo "no role!";
                }//end else
            }//end while
        }else{
        echo "JPS Says go away from me!";
        }//end if numrows   

指数

<?php 
include_once 'header.php';
include_once 'includes/dbh.inc.php';

?>
<?php  
if (isset($_SESSION["useruid"])) 
{
    echo "<p>Hello there " . $_SESSION["useruid"]. "&nbsp;your roles are &nbsp;" . getRoleName($conn, $_SESSION["userid"])."</p>";

}//end isset
    
                ?>
<?php 
include_once 'footer.php';
?>

标签: phpfunction

解决方案


当你这样做

 echo "<p>Hello there " . $_SESSION["useruid"]. "&nbsp;your roles are &nbsp;" . getRoleName($conn, $_SESSION["userid"])."</p>";

首先必须生成要回显的字符串,所以在回显之前它基本上会做

$tmp = "<p>Hello there " . $_SESSION["useruid"]. "&nbsp;your roles are &nbsp;" . getRoleName($conn, $_SESSION["userid"])."</p>";
echo $tmp;

因为您正在调用getRoleName($conn, $_SESSION["userid"]),它本身会回显,所以将首先回显。

您只需要返回角色名称:

function getRoleName($conn, $id)
{
    $roles = [];
    $id = $_SESSION['userid'];
    $sql = "SELECT 
            * FROM users
            INNER JOIN user_roles ON users.usersId = user_roles.user_id
            INNER JOIN roles ON user_roles.role_id = roles.role_id 
            WHERE users.usersId = ?;";
    $stmt = $conn->prepare($sql);
    //$stmt -> mysqli_stmt_prepare($stmt, $sql);
    $stmt -> bind_param("s", $_SESSION['userid']);
    $stmt -> execute();
    $result = $stmt->get_result();
    if($result->num_rows > 0){
        while ($row = $result->fetch_assoc()){
            if ($row['role_name'] == 0) {
            $array = array($row['role_name']);
            foreach ($array as $value) {
                $roles[] = $value
            }
            }else{
                $roles[] = "no role!";
            }//end else
        }//end while
    }else{
        throw new Exception('JSP says go away!');
    }//end if numrows
    return $roles;
}

echo "<p>Hello there " . $_SESSION["useruid"]. "&nbsp;your roles are &nbsp;" . implode(",", getRoleName($conn, $_SESSION["userid"]))."</p>";
   

推荐阅读