php - 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"]. " your roles are " . getRoleName($conn, $_SESSION["userid"])."</p>";
}//end isset
?>
<?php
include_once 'footer.php';
?>
解决方案
当你这样做
echo "<p>Hello there " . $_SESSION["useruid"]. " your roles are " . getRoleName($conn, $_SESSION["userid"])."</p>";
它首先必须生成要回显的字符串,所以在回显之前它基本上会做
$tmp = "<p>Hello there " . $_SESSION["useruid"]. " your roles are " . 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"]. " your roles are " . implode(",", getRoleName($conn, $_SESSION["userid"]))."</p>";
推荐阅读
- visual-studio - Visual Studio 扩展的默认参考路径是什么?
- javascript - NodeJS - 使用 node-fetch 发送 JSON 对象参数
- regex - 搜索 / 并将其替换为 ; 在带有崇高文本的 xml 标记中 3
- c# - LINQ 中的可迭代析取
- python - 如何使用 matplotlib 绘制散点饼图
- python - 我的代码没有在控制台窗口中抛出任何数据包
- jenkins - 扫描多分支现在构建每个(也未更改)作业
- html - 如何在用户浏览器中缓存 html 文档?
- ios - 如何过滤附件视图中的集合视图的数组列表
- python-3.x - 从边界框到面具