2015-10-07 6 views
-1

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

<html> 

     <form name="form" action="edit_record.php" method="POST" enctype="multipart/form-data">   

      <select name="pro_update" class="formTxtInputmany">   
      Product Name: <option>SELECT PRODUCT</option>     
      <?php 
      $sql = "SELECT pro_id,pro_name FROM products ORDER BY pro_name ASC"; 
      $query = $conn->query($sql); 
      $result = $query->fetchAll(PDO::FETCH_ASSOC); 
      $arrlength = count($result); 

       for ($x = 0; $x < $arrlength; $x++){?>    
        <option value="<?php echo $result[$x]['pro_id'].','.$result[$x]['pro_name']; ?>"> 
         <?php echo $result[$x]['pro_name']; ?> 
        </option><?php 
       } ?> 

      </select> 
      <input type="submit" value="UPDATE THE RECORD"> 
     </form>   
</html> 

    // process file  

     <?php 

     if(isset($_POST['pro_update'])){  
      $pro_update = $_POST['pro_update']; 

      if ($pro_update == "SELECT PRODUCT"){   
       echo "please choose producct";   
      }else{   

      $values = explode(',', $pro_update); 

      $pro_id = (int)$values[0]; 
      $pro_update = $values[1]; 

      $updateQuery = "UPDATE products SET pro_name = $pro_update 
      WHERE pro_id = $pro_id"; 
      $query = $conn->prepare($updateQuery); 
      $query->execute(array($pro_update)); 

      }  
     } 

ответ

0

вам использую готовить, но не actualy подготовки вашего query.In с помощью подготовки вы должны использовать placehoders в запросе, что вам могут понадобиться, чтобы использовать что-то вроде этого

$updateQuery = "UPDATE products SET pro_name = :proname 
    WHERE pro_id = :pro_id"; 
    $query = $conn->prepare($updateQuery); 
    $query->execute(array(':pro_update'=>$pro_update,':pro_id'=>$pro_id)); 

поскольку существует два типа заполнителей именемполя и позиционная placehodl er (?). Вы также можете использовать что-то вроде этого

$updateQuery = "UPDATE products SET pro_name = ? 
     WHERE pro_id = ?"; 
     $query = $conn->prepare($updateQuery); 
     $query->execute(array($pro_update,$pro_id)); 
+0

это даже не сработало – mohsin

+0

есть ли у вас какие-либо ошибки? вы пробовали повторять свою переменную $ prod_id? –

+0

ЭТО РАБОТАЕТ СЕЙЧАС СПАСИБО, я просто не освежил, я думаю – mohsin

0

Вы должны использовать

$query->execute(); 

вместо

$query->execute(array($pro_update)); 

EDIT

Используйте одинарные кавычки для строки & также использовать trim(); для $ ID

$updateQuery = "UPDATE products SET pro_name = $pro_update 
    WHERE pro_id = '$pro_id'"; 

Также

$pro_id = (int)trim($values[0]); 
+0

но он работает таким образом, когда я использую текстовое поле – mohsin

+0

'echo $ pro_update. "". $ pro_id; 'Результат? –

+0

Эти переменные имеют значения, которые они эхо-штрафа – mohsin

0
$updateQuery = "UPDATE products SET pro_name = :proupdate WHERE pro_id = :proid"; 

$stmt = $conn->prepare($updateQuery); 
$stmt->bindParam(':proupdate', $pro_update); 
$stmt->bindParam(':proid', $pro_id); 
$stmt->execute(); 

Вы почти там, но это лучший способ сделать это.

0

Ваш $ updateQuery будет оценить следующим образом:
UPDATE продукты SET pro_name = {строка} WHERE pro_id = {INT} который недопустимое заявление SQL, потому что {строка} должна быть в кавычках 'строка'.

Если вы используете инструкцию подготовки, попробуйте использовать ее правильным способом: используя bindParam (PDO) или bind_param (mysqli), чтобы использовать вашу переменную в вашем sql-запросе. Это имеет 2 преимущество:
1. Вы не должна беспокоиться о кавычке строки, бежать символ для инъекций вредна SQL
2. Используйте ваши подготовленный запрос несколько раз с различными значениями нуждаются

С уважением,

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