我正在尝试从表单中循环一些结果,但无法正确使用它。
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']
等相同。
答案 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);
在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'] . '")');
}