循环中的PHP按钮


PHP Buttons inside loop

我遇到了一个问题,我不知道如何解决它。我有一个库存表,它包含一个id(分配给用户)列和id_item列(分配给items表中的item),还有一个items表,它也包含id表。

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

id  name 
1   Dagger
2   Staff
3   Wood Shield

每个人都有自己独特的id。

库存表:

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

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

问题:假设我以莫托克的身份登录,他的库存中有两件武器。直到现在一切都很好。我想为他所有的每一件物品都做一个纽扣。按钮在那里,但不能正常工作。当我点击第一个是显示ssss1,这是正确的,但当我按下第二个时,什么都没有发生。我想更具体地向ssss2显示下一个$row1['d_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'];      
    }
}

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

<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...";
}

因此项目信息检索仅在表单实际提交时运行。

试试看。我有点困惑你到底想发生什么,但我认为这会做到的。

<?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代码,以检查表单中的更改

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

玩得开心!