2014-01-16 116 views
0

我有以下代碼以捕獲前一頁中的數據。它的工作正常,數據傳遞正確,只是問題是具有字符($ itemName)的唯一變量。 我根本無法插入mysql列。它不是類型設置或字符集。我懷疑它的一些事實,即文本來自數組。有任何想法嗎?無法將字符插入到數組的mysql列中

if(isset($_POST["cantidad"]) && count($_POST['cantidad'])>0) { 

    foreach($_POST["cantidad"] as $key => $value) { 
     $cantidad = $value; 
     $value = $_POST["cantidad"][$key]; 
     $idItem = $_POST['hiddenField'][$key]; 
     $itemName = $_POST['hiddenName'][$key]; 
     $query = "INSERT INTO `inventarioStat` SET `fecha` = $timestamp, `idItem` = $idItem, `nombreItem` = $itemName, `cantidad` = $value"; 
     ///// this section is to check do data pass true and they do 
     echo "<br>"; 
     echo "value:" . $value . "<br>"; 
     echo "id:" . $idItem . "<br>"; 
     echo "name:" . $itemName . "<br>"; 

     mysql_query($query); 
    }  

} 

echo "<br>"; 
+0

你能告訴我什麼'$ itemName'的值嗎? 或者您可以嘗試使用'mysql_real_escape_string'未使用字符串。 – chen

+0

當然,例如我有這樣的事情:Abrillantador maquina或7 Up 200cl – Iznogud

+0

它從你的查詢看起來很好。你可以試試這個。 'mysql_query($ query)或者die(mysql_error());'顯示錯誤信息 – chen

回答

6
$query = "INSERT INTO `inventarioStat` SET `fecha` = $timestamp, `idItem` = $idItem, `nombreItem` = $itemName, `cantidad` = $value"; 

此行是不正確的,非常不安全。問題在於你沒有在SQL查詢中引用你的字符串。您需要引用$itemName值。

您還需要轉義這裏的值。此代碼對SQL注入敞開大門。如果你使用它,你可能會被黑客入侵。

試試這個:

foreach($_POST["cantidad"] as $key => $value) { 
    $cantidad = $value; 

    $value = mysql_real_escape_string($_POST["cantidad"][$key]); 
    $idItem = mysql_real_escape_string($_POST['hiddenField'][$key]); 
    $itemName = mysql_real_escape_string($_POST['hiddenName'][$key]); 

    $query = "INSERT INTO `inventarioStat` SET `fecha` = '$timestamp', `idItem` = '$idItem', `nombreItem` = '$itemName', `cantidad` = '$value'"; 

    mysql_query($query); 
} 

此代碼是更好,但並不完美。它更安全,但不是100%安全。

您應該升級到使用PDOMySQLi並準備好語句(PDO docsMySQLi docs)。

+0

爲什麼「插入到集合中」是插入的正確的sql語句? – Hackerman

+0

@RobertRozas:是的。 http://dev.mysql.com/doc/refman/5.1/en/insert.html –

+0

Woooooops,我錯過了....信息@火箭 – Hackerman