2015-10-07 81 views
-1

我做一個基本的庫存系統,我試圖編輯,然後通過單擊編輯按鈕,通過該ID的進程文件通過URL,還有我PIC的ID更新記錄,我能改變和更新數據,現在的問題是產品類別,它僅僅在一個文本框出現之前,我必須鍵入新的產品,以取代舊的,但這樣可以使拼寫或其他錯誤,以避免我想有下拉其加載產品數據庫列表,我會選擇更換新,但它不工作,處理文件選擇從HTML文件,並查詢ID我都檢查過也它的正常工作,但數據未更新。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

你使用的準備,但使用做準備,您必須在您的查詢中使用placehoders不actualy您準備query.In,你可能需要,因爲有兩種類型的佔位符的命名和位置placehodl使用這樣的事情

$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)); 

呃(?)。你也可以用這樣的東西

$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)); 

編輯

使用單引號串&也使用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 = {string}裏WHERE pro_id = {} INT這 是無效的SQL語句,因爲{string}裏有被引用字符串 ''。

如果使用準備語句,嘗試使用它的正確方法:使用bindParam(PDO)或bind_param(mysqli的),以在SQL查詢中使用的變量。這有2個好處:
1.你不必擔心引號字符串,轉義字符有害SQL注入
2.需要用不同的價值用你準備好的查詢多次

問候,