2

我一直在浏览不同的网站以寻求帮助,但似乎找不到任何与我的问题有关的东西,所以这里是:

我有一个价值系统,需要经常更新,而不是删除和重新创建它,我想使用 MySQL 更新的编辑功能。

我已经有一个更新工作,但它更新了所有行。我希望它只更新一个 - 但这不是全部问题。

我想要它,所以当我在 item1 上单击 Edit 时,它会转到只有 item1 的下一页,而不是 item1、item2 和 item3。

例子:

+------------+-------------+----------------+
| 项目 | 价值 | 行动 |
+------------+-------------+----------------+
| 项目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

但它仍然显示所有项目并更新所有项目值。

在此先感谢,如果需要,我会很乐意发布代码。

编辑1:

好的,这里是 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;
        ?>

编辑2:

这是我的编辑页面:

<?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

您的代码的问题是,当用户点击“更新价格”并且您的表单提交时,您不再具有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 回答