我有以下代码,以便从上一页捕获数据。它的工作正常,数据传递正确,只是问题是唯一有字符的变量($ itemName)。 我根本无法在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 :(得分: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%安全。
您应该升级到使用PDO或MySQLi和预备语句(PDO docs或MySQLi docs)。