1

我有一个问题,我不知道如何解决它。我有一个清单表,其中包含一个 id(分配给用户)列和 id_item 列(分配给项目表中的项目)和一个项目还包含一个 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 是项目表中的项目 id。

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

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

这是我尝试过的:

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'];      
    }
}
4

2 回答 2

3

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

<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']入表单处理代码,而不必寻找每一个可能submit1的 ,submit2等...

同样,您的表单处理代码与表单生成代码在相同的上下文中运行,甚至在表单有机会显示并获得用户点击之前。你至少应该有类似的东西

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

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

于 2013-07-18T15:18:04.720 回答
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 代码以检查表单中的更改。

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

玩得开心!

于 2013-07-18T15:48:27.913 回答