带有$ i和$ _POST值的SQL循环

时间:2011-07-17 21:29:32

标签: php mysql

我正在尝试从表单中循环一些结果,但无法正确使用它。

  for ($i=1;$i<$total;i++)
    {
     mysql_query("INSERT INTO MYSQL(value1,value2,value3) VALUES('{$i}','{$_POST['$iH']}', '{$_POST['$iA']}'");
    }

我希望$_POST['$iH']$_POST['1H']$_POST['2H']$_POST['3H']等相同。

3 个答案:

答案 0 :(得分:3)

像这样:

for ($i = 1; $i < $total; $i++) { // <--- You had a typo here
   $sql  = "INSERT INTO MYSQL(value1,value2,value3) ";
   $sql .= "VALUES('{$i}','" . $_POST[$i . 'H'] . "', '" . $_POST[$i . 'A'] . "')";
   mysql_query($sql);
}

但是,两个大问题。

多个查询

男孩,多么浪费!派遣一个代替:

$rows = Array();
for ($i = 1; $i < $total; $i++) {
   $rows[] = "('{$i}','" . $_POST[$i . 'H'] . "', '" . $_POST[$i . 'A'] . "')";
}

$sql  = "INSERT INTO MYSQL(value1,value2,value3) VALUES('" . implode("','", $rows) . "')";
mysql_query($sql);

SQL注入

在2011年,人们仍然没有得到这一点,这让我感到困惑。

如果您要坚持使用the ancient mysql API(甚至不是the OO version?!)而不是PDO,请养成清理输入的习惯:

$rows = Array();
for ($i = 1; $i < $total; $i++) {
   $rows[] = "('{$i}'," . 
             "'" . mysql_escape_string($_POST[$i . 'H']) . "'," .
             "'" . mysql_escape_string($_POST[$i . 'A']) . "')";
}

$sql = "INSERT INTO MYSQL(value1,value2,value3) VALUES('" . implode("','", $rows) . "')";
mysql_query($sql);

好的,所以如果您的API中没有多查询支持,这不太可能会让您感到非常悲痛,但它可以在身份验证例程中执行。在这方面,只是习惯于正确编写脚本。

答案 1 :(得分:1)

你真的需要用mysql_real_escape_string()转义你的post变量......你正在认真寻找这样的麻烦。

在回答你的问题时,我认为你需要做这样的事情:

mysql_query("INSERT INTO MYSQL(value1,value2,value3) VALUES('{$i}', '" . $_POST[$i . 'H'] . "', '" . $_POST[$i.'A']. "'");

随着字母与你的变量摩擦,php引擎将假设它们是变量名的一部分;该变量名称不存在,因此您将得到一些奇怪的结果。

答案 2 :(得分:0)

您需要转义引号,因为您的变量是以文字形式传递的:

for ($i=1; $i<$total; $i++)
    {
     mysql_query('INSERT INTO MYSQL(value1,value2,value3) VALUES("' . $i . '","' . $_POST[$i . 'H'] . '", "' . $_POST[$i . 'A'] . '")');
    }