这是一个小段,为了简单和测试目的,使用 PHP 和数据库构建,这里是一个文本示例。
这个想法是表单将提交,然后 PHP 将处理结果。但是我试图为每个帖子使用 mysql_real_escape_string 以确保安全(也许有更好的方法?)
无论如何,这就是问题所在。当我保持 foreach 循环到位时, qty[] 和 optname[] 的两个后数组变量都返回为 NULL(通过 var_export($_POST) 输出用于测试目的。这是 WITH foreach mysql_real_escape_string 循环输出的内容:
array (
'update' => 'Yes',
'qty' => NULL,
'optname' => NULL,
)
如果我删除 foreach 循环一切正常,这就是我得到的,也是 php 处理结果所需要的,这就是我用 foreach mysql_real_escape_string 循环注释掉的结果:
array (
'update' => 'Yes',
'qty' =>
array (
1 => '2',
2 => '2',
3 => '2',
4 => '2',
),
'optname' =>
array (
1 => '1|4',
2 => '1|4',
3 => '1|4',
4 => '1|4',
),
)
但是在 sql 查询发生之前没有检查/清理数据。如何使用循环检查每个 post 变量但保持 POST 变量完整?
这是可以粘贴到任何本地主机并进行测试的代码。
<?php
foreach ($_POST as $key=>$value) { $_POST[$key] = mysql_real_escape_string($value); }
echo '<pre>';
var_export($_POST);
echo '</pre>';
?>
<form name="updateQty" id="updateQty" method="post" />
<input type="hidden" name="update" id="update" value="Yes" />
<input type="text" name="qty[1]" id="qty[]" class="field" value="2" />
<input type="hidden" name="optname[1]" id="optname[]" value="1|4" />
<input type="text" name="qty[2]" id="qty[]" class="field" value="2" />
<input type="hidden" name="optname[2]" id="optname[]" value="1|4" />
<input type="text" name="qty[3]" id="qty[]" class="field" value="2" />
<input type="hidden" name="optname[3]" id="optname[]" value="1|4" />
<input type="text" name="qty[4]" id="qty[]" class="field" value="2" />
<input type="hidden" name="optname[4]" id="optname[]" value="1|4" />
<input type="submit">
</form>
谢谢!