2015-05-04 3 views
1

У меня есть ряды, показывающие продукты и их чулки. Я могу вытащить записи из базы данных, но каким-то образом я застрял в редактирующей части. Когда я нажимаю на редактирование, я не знаю, как передать идентификатор, чтобы я мог использовать идентификатор, чтобы выбрать, что нужно выбрать в таблице.потянув базу данных и обновленную базу данных - php

У меня есть что-то вроде stock.php, который показывает все ITEM_NAME и запас

<?php 
     $sql = "SELECT * FROM inventory"; 
     $result = mysqli_query($mysqli,$sql); 

    //make sure database queries 
    if (!$result) { 
     echo "DB Error, could not query the database\n"; 
     echo 'MySQL Error: ' . mysql_error(); 
     exit; 
    } 

    if ($result->num_rows > 0) { 
     echo "<table><tr><td>Name</td> 
         <td>Stock</td> 
        </tr>"; 
     // output data of each row 
     while($row = $result->fetch_assoc()) { 
      $id = $row['id']; 
      echo "<tr> 
        <td>".$row["item_name"]."</td> 
        <td>".$row["stock"]."</td> 
        <td> 
         <form action='edit.php' method='POST'> 
          <input type='hidden' name='$id' value='$id'/> 
          <input type='submit' name='edit' value='edit' /> 
         </form> 
        </td> 
       </tr>"; 
     } 
     echo "</table>"; 
    } else { 
     echo "0 results"; 
    } 
?> 

в моем edit.php у меня есть что-то вроде этого, который дает мне ошибку, потому что $id не передается

include_once "init.php"; 
if ($_SERVER['REQUEST_METHOD']=='POST') { 
    // query the table by matching up the int id 
    $sql = "SELECT * FROM inventory WHERE id = '$id'"; 
} 

Я хочу снова вытащить данные на новой странице, а затем снова ввести поле ввода, чтобы пользователи могли обновлять запас # или даже имя продукта и другие, если это необходимо.

+0

используйте $ _POST ['id'] вместо $ id, и он должен работать. –

ответ

1

В вашей декларации ввода есть ошибка. Элементы HTML не могут иметь имена, начинающиеся со специальных символов (например, $). Вы должны быть Установка по именам переменным на основе следующим образом:

<input type='hidden' name='".$id."' value='".$id."'/> 

Также в вашем edit.php, ваш SQL заявление содержит ошибку.

$sql = "SELECT * FROM inventory WHERE id = '$id'"; 

должно быть:

$sql = "SELECT * FROM inventory WHERE id = ".intval($id); 
+0

Оператор SQL также будет работать с кавычками, но вы обязательно должны использовать '$ sql =" SELECT * FROM inventory WHERE id = ".intval ($ id);', чтобы избежать инъекций или ошибок, когда '$ id' не является целое число. Если у вас нет '$ id = intval ($ _ POST ['id'])' before, который вам понадобится в той же точке, так как 'register_globals' - вещь из прошлого – Capsule

+0

да! вы должны отображать переменные ввода/сессии пользователя перед тем, как запросить свою базу данных, используя htmlspecialchars или что-то в этом роде. – Evan

+0

'htmlspecialchars' ничего не сделает против SQL-инъекций, но http://php.net/manual/en/mysqli.real-escape-string.php или вообще говоря, подготовленные заявления, будет – Capsule

0

Вам необходимо сделать следующие обновления:

stock.php

<input type='hidden' name='id' value='$id'/> 

edit.php

$sql = "SELECT * FROM inventory WHERE id = '".$_POST["id"]."'"; 

вы передаете текущее значение id в качестве имени post var, имя var должно быть «id».

+1

https : //www.owasp.org/index.php/SQL_Injection – PeeHaa

Смежные вопросы