2014-10-02 168 views
0

我真的不知道最新的錯誤,我可以用類似的PHP和另一個幾乎相同的$ categoria = $ _POST [「CAT」];和$ sql。=「SET catPERS ='$ categoria'」; (有它的一些西班牙語,如果你需要它生病翻譯)不能更新mysql數據庫與PHP

<?php 
// PROCESO PERSONAS UPD (ACTUALIZACION) 

// CONECTAR AL SERVIDOR DE BASE DE DATOS 
$conex = mysql_connect("localhost","root",""); 

// CONTROLAR CONEXION 
if (!$conex) { 
    die("ATENCION!!!.. NO se pudo CONECTAR al SERVIDOR de Bae de Datos"); 
} // endif 

// SELECCIONAR BASE DE DATOS 
$selDB = mysql_select_db("database",$conex); 

// CONTROLAR SELECCION DE BASE DE DATOS 
if (!$selDB) { 
    die("ATENCION!!!.. NO se pudo SELECCIONAR Base de Datos"); 
} // endif 

// CAPTURAR DATOS DEL FORMULARIO 
$id    = $_POST["ID"]; 
$nombre   = $_POST["NOM"]; 
$direccion  = $_POST["DIR"]; 
$telefono  = $_POST["TEL"]; 
$departamento = $_POST["DTO"]; 
$categoria  = $_POST["CAT"];  

// CREAR SENTENCIA SQL PARA ACTUALIZACION 
$sql = "UPDATE Personas "; 
$sql .= "SET nomPERS='$nombre', "; 
$sql .= "SET dirPERS='$direccion', "; 
$sql .= "SET telPERS='$telefono', "; 
$sql .= "SET dtoPERS='$departamento', "; 
$sql .= "SET catPERS='$categoria' "; 
$sql .= "WHERE idPERS=$id"; 

// die($sql); 

// EJECUTAR SENTENCIA SQL 
mysql_query($sql,$conex); 

// CERRAR CONEXION 
mysql_close($conex); 

// VOLVER AUTOMATICAMENTE AL FORMULARIO DE ACTUALIZACIÓN (REDIRIGIR) 
header("Location: productos.html"); 
?> 
+1

檢查是否有任何輸出'的mysql_query($的SQL,$ CONEX)或死亡(mysql_error ());'並閱讀關於SQL注入a nd不要使用mysql_擴展名,因爲它將來不會被支持。 – Cheery 2014-10-02 19:56:55

+0

在打開'<?php'標籤後立即在文件頂部添加錯誤報告 'error_reporting(E_ALL); ini_set('display_errors',1);'看看它是否產生任何東西。還有'或者(mysql_error())'去''mysql_query()'。 – 2014-10-02 19:58:44

+0

只能使用一個'SET'。 – 2014-10-02 20:02:40

回答

3

當在更新查詢更新多個值,你只需要一個SET關鍵字和其他值用逗號分隔。

+0

@MikeBrant如果您在發佈之前重新加載答案,您會看到我刪除了我的評論;)和答案+1。 – 2014-10-02 20:05:13

+0

我誤解了你的答案Juru。你完全正確。 TBH,我有一個輕度的閱讀困難的情況,這使我在*「你知道什麼」有時會咬我。其中一次是今天大聲笑 - 我+1之後。 – 2014-10-02 20:06:31

1

使用mysql_是個壞主意,因爲它目前已被棄用。而且,你的查詢字符串很容易被SQL注入。聖地亞哥時間來加強你的遊戲。

$mysqli = new mysqli('localhost', 'user', 'pass', 'database'); 

if($stmt = $mysqli->prepare("update Personas set nomPERS = ?, dirPERS = ?, telPERS = ?, dtoPERS = ?, catPERS = ?, where idPERS = ?")): 
    $stmt->bind_param('sssssi', $_POST['ID'], $_POST['NOM'], $_POST['DIR'], $_POST['TEL'], $_POST['DTO'], $_POST['CAT'], $id); 

    if($stmt->execute()): 
     $stmt->close(); 
     header("Location: productos.html"); 
    endif; 
endif; 

這是安全方式。它還將解決您的(當前)損壞的SQL查詢的問題。

通過在mysqli中使用預準備語句,我們避免了當前代碼中可能出現的SQL注入。

鏈接

  1. MySQLI
  2. Prepared Statements
  3. Binding Parameters
  4. execute()