簡體   English   中英

循環內的PHP按鈕

[英]PHP Buttons inside loop

我有一個問題,我不知道該如何解決。我有一個庫存表,其中包含一個id(分配給用戶)列和id_item列(該分配給items表中的項目)和一個items表還包含一個id表。

更具體地說,這是我的數據庫包含的內容:items表:

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是來自item表的項目id。

問題:假設我以motoc身份登錄,他的庫存中有2種武器。 到現在一切都很好。 我要為他擁有的每個物品都按下一個按鈕。 按鈕在那里,但不能正常工作。 當我單擊第一個時,顯示ssss1是正確的,但是當我按第二個時,則沒有發生。 我想更具體地向我展示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'];      
    }
}

這是構建表單的一種不好的方法。 由於您要為每個項目構建一個“個性化”表單,因此無需創建動態字段名,只需創建一個隱藏的表單字段即可:

<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代碼,以檢查表單中的更改。

我現在告訴你。 您設計數據庫的方式應該更改。 保持更新將是一個痛苦的過程。 您應該使用項目表,用戶表,並在它們之間使用數據透視表,因為這是多對多關系。

玩得開心!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM