我不太确定我该怎么回答这个问题,但是我会继续尝试解释它,我可以 - 让我知道如果我说的话没有意义
我正在为自己创建一个基于社区的网站作为个人学习项目,作为网站的一部分,用户将能够加入一个特定的“小组” - 一个小组将成为用户可以讨论共同兴趣的地方到目前为止,我已经创建了两个用于测试的组,我正在尝试根据用户点击的按钮将用户分配到其中一个组。
下面的代码显示有关页面上组的信息以及加入该特定组的按钮。当然,当用户点击加入一个组时,它就会加入第一个组,即使我点击第二个显示的按钮,因为我从join_group获取了值,因为我只有一个名字。
我知道我的输入没有被消毒,但那是我要离开的东西。
我需要做的是为$_POST['join_group']
提供一些预测,但不完全确定如何去做。有什么想法吗?
显示组
foreach ($group_info as $key => $value) {
echo "<div>Group name: " . $value['group_name'] . "</div>";
echo "<div>Description: " . $value['description'] . "</div>";
echo "<div>Members: " . $value['group_size'] . "</div>";
echo "<form method='post'>";
echo "<input name='group_id' type='hidden' value='" . $value[0][$i] ."'>";
echo "<button name='join_group' class='btn btn-green'>Join Group</button>";
echo "</form>";
$i = $i++;
}
插入数据
if (isset($_POST['join_group'])) {
try {
$join_group = $db->prepare("INSERT INTO groups_members (group_id, username)
VALUES (:group_id, :username)
");
$join_group->bindParam(":username", $_SESSION['username']);
$join_group->bindParam(":group_id", $group_id);
$join_group->execute();
$update_members_number = $db->prepare("UPDATE groups
SET group_size = group_size + 1
WHERE id = :group_id
");
$update_members_number->bindParam("group_id", $group_id);
$update_members_number->execute();
}
catch (Exception $e) {
echo $e->getMessage();
}
答案 0 :(得分:0)
您的代码最棘手的问题是,在将group_id参数绑定到查询的位置,您没有使用$_POST
数组,但可能是将其设置为null。试试这个:$join_group->bindParam(":group_id", $_POST['group_id']);
而不是$join_group->bindParam(":group_id", $group_id);
。
除此之外,我个人喜欢明确设置表单属性,例如:
<form method='post' action='.'>
......和......
<button type='submit' name='join_group' class='btn btn-green'>Join Group</button>
我希望这有帮助!
答案 1 :(得分:0)
您只需使用来自帖子的变量,就像使用$_POST['join_group']
作为按钮一样。试试这样:
您需要做的改变就是:
这一行:
$join_group->bindParam(":group_id", $group_id);
要
$join_group->bindParam(":group_id", $_POST['group_id']);
这一行:
$update_members_number->bindParam("group_id", $group_id);
到
$update_members_number->bindParam("group_id", $_POST['group_id']);
这是因为group_id
来自你的HTML表单通过post方法,所以你必须通过php的$_POST
数组来获取它。