2

私はいくつかの助けを見つけようとしてさまざまなサイトを調べてきましたが、私の問題で何かを見つけることができないようです.

かなり頻繁に更新する必要がある値システムがあり、それを削除して再作成する代わりに、MySQL 更新で編集機能を使用したいと考えています。

すでに更新が機能していますが、すべての行が更新されます。1つだけ更新したいのですが、それが完全な問題ではありません。

item1で[編集]をクリックすると、item1、item2、item3ではなく、item1だけで次のページに移動します。

例:

+------------+-------------+---------------+
| | アイテム | 値 | アクション |
+------------+-------------+---------------+
| | アイテム1 | 123 | 編集 / 削除 |
| | アイテム2 | 456 | 編集 / 削除 |
| | アイテム2 | 789 | 編集 / 削除 |
+------------+-------------+---------------+

これは私の管理者の項目テーブルです (データベースではありません)。欲しいので [編集] をクリックすると (削除は正常に機能します)、編集したい項目だけを含む次のページに移動します。現時点では、次のページに移動しますが、すべてのアイテムが表示されます。

私のMySQLは次のようになります。

+------------+-------------+---------------+
| id         | name        | value         |
+------------+-------------+---------------+
| 7          | item1       | 123           |
| 8          | item2       | 456           |
| 9          | item3       | 789           |
+------------+-------------+---------------+

「id」はプライマリで、自動インクリメントです。基本的には、次のページの編集時以外はすべて設定済みです。

正しい ID にリンクする編集リンクがあるので、ID 7 の item1 になります: /admin/index.php?_managevalues&itemId=7

ただし、すべてのアイテムが表示され、すべてのアイテムの値が更新されます。

事前に感謝します。必要に応じて喜んでコードを投稿します。

EDIT1:

さて、manageitems.php は次のとおりです。

<tr>
    <td><b>Item Name</b></td>
    <td><b>Image</b></td>
    <td><b>Action</b></td>
    </tr>
        <?php
            if($getitem = $db->query("SELECT * FROM lukevalues ORDER BY name ASC")) {
            while($item = $getitem->fetch_assoc()) {
    echo "
    <tr>
    <td><b>" . $item['name'] . "</b><br>at the price of <b>" . $item['price'] . "</b></td>
    <td><img src='" . $item['image'] . "'></td>
    <td><a href='index.php?_page=edititem&itemId=" . $item['id'] . "'>Edit Price</a> / <a href='index.php?_page=manageitem&del=" . $item['id'] . "'>Remove</a></td>
    </tr>";
    }
        }
            ?>
    </table>
    <?php if(isset($_GET["del"]))
        {
        $db->real_query("DELETE FROM lukevalues WHERE id = '" . filter($_GET["del"]) . "'");
    echo "
    Item has been removed successfully. <br /><br />
    ";
        }
        echo $output;
        ?>

EDIT2:

ここに私の編集ページがあります:

<?php
        if($getitem = $db->query("SELECT * FROM lukevalues")) {
        while($item = $getitem->fetch_assoc()) {
echo "

You're editing: <b>" . $item['name'] . "</b><br>
Which has a price of <b>" . $item['price'] . "</b>
            <br /><br>
            <form method='post'>
                <h3>New Price</h3>
                <input type='text' name='newprice'> <br />
                <br />
                <input type='submit' value='Update Price'>
            </form>";
                if(isset($_POST["newprice"])) {
                    $new = $db->real_escape_string($_POST["newprice"]);

                        $db->real_query( "UPDATE lukevalues SET price='$new' WHERE id = ".$item['id']);

                echo "<br><br>Done! <a href='http://habzilla.net/admin/index.php?_page=manageitems'>Go back</a> to manage items.";
            }
        }

    }
        ?>
4

1 に答える 1

0

コードの問題は、ユーザーが「Update Price」を押してフォームを送信すると、 の値がなくなることですitem['id']。アイテムの ID 値をフォームの非表示フィールドに保存できます。

編集ページのコードは次のようになります

<?php
// If it was an update submission do the update first
if(isset($_POST['newprice']) && isset($_POST['id']) && 
         $_POST['newprice'] && $_POST['id']) {
    $new = $db->real_escape_string($_POST['newprice']);
    $id  = $db->real_escape_string($_POST['id']);
    $db->real_query("UPDATE lukevalues SET price='$new' WHERE id = '$id'";
    echo "<br><br>Done! <a href='/admin/index.php?_page=manageitems'>Go back</a> to manage items.";
}
// Now fetch all items and produce edit forms with updates values
if($getitem = $db->query("SELECT * FROM lukevalues")) {
    while($item = $getitem->fetch_assoc()) {
        echo "You're editing: <b>" . $item['name'] . "</b><br>
              Which has a price of <b>" . $item['price'] . "</b>
              <br /><br>
              <form method='post'>
                <h3>New Price</h3>
                <input type='text'   name='newprice'> <br />
                <input type='hidden' name='id' value=" .$item['id']. ">
                <br />
                <input type='submit' value='Update Price'>
            </form>";
    }
}

注: コードは明らかにテストされていません。

余談ですが、準備されたステートメントを学び、使用してください。現在のコードは、SQL インジェクションに対して脆弱です。

于 2013-06-28T03:49:06.247 に答える