2013-06-28 67 views
2

我一直在寻找通过不同的网站试图找到一些帮助,但我似乎无法找到与我的问题任何东西,所以在这里它是:的MySQL,更新一行

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

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

我想要它,所以当我点击对item1的编辑时,它会进入带有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编辑链接和所有因此这将是对物品1 ID为7: /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."; 
      } 
     } 

    } 
     ?> 
+0

你使用的是什么SQL(“UPDATE ....”)? –

+2

我认为你应该在'/ admin/index中显示你写的PHP代码。php' – Passerby

+0

编辑你的问题,你的代码的职位相关的部分'index.php' – peterm

回答

0

与您的代码的问题是,当用户点击“更新价格”,表单提交您不再具有的价值。您可以将项目的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注入攻击。

+0

好的,谢谢。我现在就试一试。 – Franky

+0

@Franky有帮助吗? – peterm