【问题标题】:PHP Buttons inside loop循环内的 PHP 按钮
【发布时间】:2013-07-17 15:05:56
【问题描述】:

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

【问题讨论】:

    标签: php button


    【解决方案1】:

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

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

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

    【讨论】:

    • 完美运行。谢谢
    • 如何在 if 语句中回显 $row1['id_item'] 不作为输入值?我认为这是一个范围问题
    • php 的作用域是函数/方法级别。就变量而言,if() 不是一个单独的块。
    【解决方案2】:

    试一试。我对你想要发生的事情有点困惑,但我认为这会做到。

    <?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 表,并在它们之间有一个数据透视表,因为它是多对多关系。

    玩得开心!

    【讨论】:

    • 非常感谢您。完美运行。我将搜索有关数据透视表的更多信息。再次感谢您
    • 我如何在 if 语句中回显 $ss 因为我想做一个 UPDATE 语句 $sth = $dbh->prepare("UPDATE attributes SET gold = :gold WHERE id = :id") ;如果我将它放在输入类型 item_id 中,则每次刷新页面时都会进行更新,并且我希望在单击按钮后进行更新。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多