[英]How do I query mysqli db's with variables in a loop (php)
我正在学习一点 php 和 mysqli 和 atm 我正在尝试创建一个简单的私人消息传递系统。 为此,我创建了两张我需要的表,一张用于我网站的用户,一张用于消息传递。 两个表 atm 与其用户名(不是用户 ID)之间存在一个连接。 我创建了一个有效的 php 脚本,它为 session 用户获取 pms 列表。 为此,我创建了一个 foreach 循环,该循环允许我在表单中显示每个下午都具有相同的收件人用户名,例如 session 用户。 我的问题是 pm 表不满足发件人的前名和姓名,这就是需要在表单中而不是在用户名上显示的内容。
我已经发现在 foreach 循环中无法从 pm 之外的另一个表中查询内容,但无论如何我都无法让它工作。 我尝试了什么:
由于我对 mysqli 完全陌生,我不知道现在该尝试什么。 有人可以给我一个提示吗?
“用户”表列:
CREATE TABLE `users` (
`id` smallint(6) NOT NULL,
`username` tinytext NOT NULL,
`password` char(80) NOT NULL,
`usergroup1` tinyint(2) NOT NULL,
`usergroup2` tinyint(2) NOT NULL,
`prename` char(30) NOT NULL,
`name` char(30) NOT NULL,
`email` char(50) NOT NULL,
`date` date NOT NULL,
`rights` tinyint(4) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
“pm”表列:
CREATE TABLE `pm` (
`id` int(11) NOT NULL,
`sentby` char(32) NOT NULL,
`recipient` char(32) NOT NULL,
`subject` varchar(90) NOT NULL,
`topic` varchar(90) NOT NULL,
`message` varchar(500) NOT NULL,
`new` tinyint(3) NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
pm.php(提交尚未设置)
<html>
<head>
<title>User Portal</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<script>
function onSelectChange(){
document.getElementById('frm').submit();
};
</script>
<?php
$phpself = $_SERVER['PHP_SELF'];
//start session and define mysqli connection $conn
include 'header.php';
//query own private messages as session user
$sqlownpn = "SELECT * FROM pm WHERE recipient='$username'";
$queryownpn = mysqli_query($conn, $sqlownpn);
echo "<h3>Inbox</h3><br>";
echo "<div id=“resp-table-body”>
<form action='$phpself' id='frm' method='post' enctype='multipart/form-data'>
<select name='pn' id='pn' size='3' onchange='onSelectChange()'>";
function build_choice($rows2)
{
$result = "";
foreach ($rows2 as $row2){
$sentby = $row2['sentby'];
$new = $row2['new'];
if($new == 1) {
$result.= "<option value='{$row2['id']}'>NEU | {$row2['timestamp']} | $sentby | {$row2['thema']} | {$row2['ueberschrift']}</option></div>";
} elseif($new == 2) {
$result.= "<option value='{$row2['id']}'>{$row2['timestamp']} | $sentby | {$row2['thema']} | {$row2['ueberschrift']}</option></div>";
};
return $result;
};
};
echo build_choice($queryownpn);
echo "</select><br></form></div><br>";
?>
<br>
<br>
</body>
</html>
该脚本正在运行。 我只需要获取发件人用户名的相关前名和名称(在定义为 $sentby 的循环中)。 所有 pms 都是由存在于 users 表中的用户创建的。
有任何想法吗?
我找到了一种将 INNER JOIN 添加到 function 中的方法:
global $conn;
$sqlnamelist = "SELECT a.id, a.prename, a.name, b.absender FROM users AS a INNER JOIN pm AS b ON a.id = b.sender";
$querynamelist = mysqli_query($conn, $sqlnamelist);
while ($row4 = mysqli_fetch_assoc($querynamelist)) {
$sender = $row4["sender"];
$vorname = $row4["prename"];
$nachname = $row4["name"];
if($sentby == $sender) {
$valid = "1";
$name = "$prename $name";
}
else {
continue;
}
那安全吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.