根据单击的特定提交按钮的值更新列

时间:2014-07-11 16:01:56

标签: php mysql

我不太确定我该怎么回答这个问题,但是我会继续尝试解释它,我可以 - 让我知道如果我说的话没有意义

我正在为自己创建一个基于社区的网站作为个人学习项目,作为网站的一部分,用户将能够加入一个特定的“小组” - 一个小组将成为用户可以讨论共同兴趣的地方到目前为止,我已经创建了两个用于测试的组,我正在尝试根据用户点击的按钮将用户分配到其中一个组。

下面的代码显示有关页面上组的信息以及加​​入该特定组的按钮。当然,当用户点击加入一个组时,它就会加入第一个组,即使我点击第二个显示的按钮,因为我从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();
}

2 个答案:

答案 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数组来获取它。