2013-06-28 113 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