循环中的PHP按钮

时间:2013-07-18 15:09:27

标签: php button

我有一个问题,我不知道如何编织它。我有一个库存表,其中包含一个id(分配给用户)列和id_item列(从items表中分配一个项目)还有一个包含id表的items表。

更具体地说,这是我的数据库包含的内容: 物品表:

id  name 
1   Dagger
2   Staff
3   Wood Shield

每个人都有自己独特的身份。

库存表:

id  id_item     username    name
1   3           cristi          Wood Shield
2   1           motoc           Dagger
2   2           motoc           Staff

id来自每个用户ID,id_item是items表项中的id。

问题: 假设我已经登录为motoc,他的库存中有2个武器。直到现在一切都很好。我想为他拥有的每件商品制作一个按钮。按钮在那里但不能正常工作。当我点击第一个时,显示我ssss1这是正确的,但当我按下第二个没什么hapens。我想更具体地向我展示ssss2下一个$ row1 ['id_item']。

我真的不知道如何解决这个问题。 谢谢。

这就是我尝试过的:

if (isset($_SESSION['id'])) {
    $sth1 = $dbh->prepare("SELECT * FROM inventory WHERE id = ".$_SESSION['id']."");
    $sth1->execute();
    while($row1 = $sth1->fetch(PDO::FETCH_ASSOC)){
        $sth = $dbh->prepare("SELECT * FROM items WHERE id = ".$row1['id_item']."");
        $sth->execute();
        $row = $sth->fetch(PDO::FETCH_ASSOC);
        $ss = print $row1["id_item"];
?>

<form id='<?php echo $row1["id_item"]; ?>' method="POST" action="" >
    <input type="hidden" name="refid" value="add" />
    <input type="submit" name="submit<?php echo $row1["id_item"]; ?>" value="Add" />
</form>

<?php
    }

    if (isset($_POST["submit$ss"])) {
        $refid = intval($_POST["refid"]);
        $sth1 = $dbh->prepare("SELECT * FROM inventory WHERE id = ".$_SESSION['id']."");
        $sth1->execute();
        $row1 = $sth1->fetch(PDO::FETCH_ASSOC);
        echo "ssss".$row1['id_item'];      
    }
}

2 个答案:

答案 0 :(得分:2)

这是构建表单的一种糟糕方式。由于您正在为每个项目构建“个性化”表单,因此无需创建动态字段名称,只需隐藏表单字段:

<form ... >
    <input type="hidden" name="id_item" value="<?php echo $row1['id_item'] ?>" />
    <input type="hidden" name="refid" value="add" />
    <input type="submit" name="submit" value="Add" />
</form>

然后,您只需检查表单处理代码中的$_POST['id_item'],而不必查找每个可能的submit1submit2等等。

同样,表单处理代码在表单生成代码的相同上下文中运行,之后表单甚至有机会显示并获得用户单击。你应该至少有一些像

这样的东西
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    ... handle form here ...
    echo "ssss...";
}

所以项目信息检索仅在表格实际已提交时才会运行。

答案 1 :(得分:0)

给它一个机会。我对你想要发生的事情感到困惑,但我认为这样做会很好。

<?php
if (isset($_SESSION['id'])) {
    $sth1 = $dbh->prepare("SELECT * FROM inventory WHERE id = " . $_SESSION['id']);
    $sth1->execute();
    while ($row = $sth1->fetch(PDO::FETCH_ASSOC)) {
        $sth = $dbh->prepare("SELECT * FROM items WHERE id = " . $row['id_item']);
        $sth->execute();
        $row = $sth->fetch(PDO::FETCH_ASSOC);
        $ss = $row["id_item"];
        ?>

        <form id='<?php echo $ss; ?>' method="post" action="?show">
            <input type="hidden" name="item_id" value="<?php echo $ss; ?>" />
            <input type="submit" name="submit" value="Add" />
        </form>

    <?php
    }

    if (isset($_GET["show"]) && isset($_POST['item_id'])) {
        echo "ssss" . $_POST['item_id'];
    }

}

我清理了一些代码并改变了表单的构建方式。我还更改了底部的PHP代码,以检查表单中的更改。

我现在会告诉你的。应该更改您设计数据库的方式。保持更新将是一个痛苦的屁股。您应该使用项目表,用户表,并在它们之间有一个数据透视表,因为它是多对多关系。

玩得开心!