MySQL,更新一行

时间:2013-06-28 03:04:00

标签: php mysql

我一直在寻找不同的网站,试图找到一些帮助,但我似乎找不到任何问题,所以这里是:

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

我已经有更新工作,但它会更新所有行。我希望它只更新一个 - 但这不是完整的问题。

我想要它,所以当我点击item1上的Edit时,它会转到下一页,其中包含JUST item1,而不是item1,item2和item3。

示例:

+------------+-------------+---------------+
| Item       | Value       | Actions       |
+------------+-------------+---------------+
| item1      | 123         | Edit / Delete |
| item2      | 456         | Edit / Delete |
| item2      | 789         | Edit / Delete |
+------------+-------------+---------------+

这是我的管理员项目表(不是数据库)。我想要它所以我点击编辑(删除工作正常),它带我到下一页只有我想要编辑的项目。目前,它将我带到下一页,但是所有项目。

这就是我的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.";
            }
        }

    }
        ?>

1 个答案:

答案 0 :(得分: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注入。