2013-06-28 3 views
2

Я просматривал различные сайты пытаются найти помощь, но я не могу найти что-нибудь с моей проблемой, так вот она:MySQL, обновление ONE ряд

У меня есть система ценностей, которая требуется обновление довольно часто, и вместо удаления &, пересоздающего его, я хочу использовать функцию редактирования с обновлением MySQL.

У меня уже есть обновление, но оно обновляет ВСЕ строки. Я хочу, чтобы он обновлял только один, но это не полная проблема.

Я хочу, чтобы это было, когда я нажимаю Edit на 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 и все, что так будет для item1 с ID 7: /admin/index.php?_managevalues ​​& Itemid = 7

Но она по-прежнему отображаются все items & обновляет ВСЕ значения элементов.

Заранее спасибо, и я с радостью отправлю код, если это необходимо.

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

Я думаю, вы должны показать код PHP, который вы пишете в '/ admin/index.php' – Passerby

+0

Измените свой вопрос и опубликуйте соответствующие части своего кода из 'index.php' – peterm

ответ

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-инъекций.

+0

Хорошо спасибо. Я попробую сейчас. – Franky

+0

@Franky Помогло ли это? – peterm