2016-02-10 47 views
0

我正在PHP上使用PDO運行UPDATE語句。UPDATE語句將空白添加到其他行

這是我的形式:

<form method="post" class="form-style"> 

    <h3>ACTUALIZAR PRODUCTOS</h3> 

    <div class="form-group"> 

     <label>Codigo del producto a actualizar:</label> 
     <input type="text" class="form-control" name="code" /> 

     <label>Nombre producto:</label> 
     <input type="text" class="form-control" name="nombre" /> 

     <label>Marca:</label> 
     <input type="text" class="form-control" name="marca" /> 

     <label>Descripcion:</label> 
     <textarea class="form-control" name="desc"></textarea> 

    </div>        
    <br /> 
    <button type="submit" class="btn btn-default" name="actualizar">Actualizar Producto</button> 
</form> 

這裏是代碼:

<?php 

$errores = array(); 
$nombre = $_POST['nombre']; 
$marca = $_POST['marca']; 
$descripcion = $_POST['desc']; 
$codigo = $_POST['code']; 

if(isset($_POST['actualizar'])) { 

     if(empty($nombre)) { 
      $nombre = null; 
     } 

     if(empty($marca)) { 
      $marca = null; 
     } 

     if(empty($descripcion)) { 
      $descripcion = null; 
     } 

     if(empty($codigo)) { 
      $codigo = null; 
     } 


     $sentencia = $conn_db->prepare("UPDATE productos SET nombre = :nombre, marca = :marca, descripcion = :descripcion WHERE codigo = :codigo"); 
     $sentencia->bindParam(':nombre', $nombre, PDO::PARAM_STR); 
     $sentencia->bindParam(':marca', $marca, PDO::PARAM_STR); 
     $sentencia->bindParam(':descripcion', $descripcion, PDO::PARAM_STR); 
     $sentencia->bindParam(':codigo', $codigo, PDO::PARAM_STR); 
     $sentencia -> execute(); 

     echo "Producto actualizado con exito."; 
     exit(); 

} 
?> 

的問題是,每當我想從產品僅改變第1行,它增加了空白的其他行。例如,我只想更新產品的「名稱」,我在表單上寫新名稱,當我點擊提交時,名稱在數據庫中更改,而其他行也設置爲空。

關於如何解決這個問題的任何想法?仍在學習PHP。謝謝。

+0

你總是在更新一切,無論有什麼需要改變。不要始終綁定所有參數,請檢查並查看是否有要更改的內容,並且只包含更新的字段。 – andrewsi

+0

然後不使用該準備好的語句,你應該創建一個只取決於你需要更新,如果你發送空白參數到其餘的列,它會更新它們像這樣... – jpganz18

+0

但是如果我想改變爲例如,產品的名稱,品牌和描述?我必須爲每一行做一個聲明? –

回答

0

通常的做法是用現有數據填充表單域。這將使你的行動實際上編輯,因爲人們可以在描述中修復一個字母,而不是從頭開始寫。

因此,在顯示錶單之前,從數據庫中選擇相應的行,並用實際值填充value屬性(不要忘記先用htmlspecialchars()處理它們全部)。

這種方式提交的一切都會更新好的。