我一直在关注$_POST
与SO相关的问题几天,仍然没有解决我的问题(而且肯定有很多人对$_POST
有问题)但是,跟进我的问题(PHP arrays, iterating form input values)并提供一些新信息:
所以...我有一个表单(input.php),其中包含大约十几个$_POST
没有问题的字段(对于process.php),但是在这个表单中是一个表项,用于行项目,到用户可以根据需要动态添加行(标记是单个表行,硬编码;使用jQuery添加添加行)。
因此,虽然所有其他输入的值都是$_POST
,但此表中的值不是。如果在我的流程页面中我将$_POST
替换为$_REQUEST
表的值,则会检索它们,即:
来自表单页的相关摘录:
<form id="invoiceData" name="invoiceData" method="POST" action="/html/process.php">
<!-- SNIP (invNum input, etc.) -->
<td class="date"><input type="text" class="datepicker" name="date[]" value="" /></td>
<td class="hours"><input type="text" class="hours" name="hours[]" value="" /></td>
<td class="rate"><input type="text" class="rate" name="rate[]" value="" /></td>
<td class="date-total"><input type="text" class="date-total" name="dateTotal[]" value="" /></td>
<td class="add-delete-row">
<a href="#" class="delete-row" title="Delete row">Delete</a>
<a href="#" class="add-row" title="Add a row">Add Row</a>
</td>
process.php 的相关摘录:
<?php
if (isset($_POST['submit'])) {
// GET $_POST VALUES FROM input.php
$invNum = $_POST['invNum'];
$invDate = $_POST['invDate'];
$projNum = $_POST['projNum'];
// etc., a bunch more, getting them all ...
// ... but these, from the dynamic table within the form; $_REQUEST works but not $_POST
for ($i = 0; $i<count($_REQUEST['date']); $i++) {
$date = $_REQUEST['date'][$i];
$hours = $_REQUEST['hours'][$i];
$rate = $_REQUEST['rate'][$i];
$dateTotal = $_REQUEST['dateTotal'][$i];
echo "<div class=\"debug\">
<p>" . $i .". " . $date . ", " . $hours . ", " . $rate . ", " . $dateTotal . "</p>
</div>";
}
}
?>
...返回:
那么,为什么$_REQUEST
检索这些值而不是$_POST
?无论如何,有没有理由不使用$_REQUEST
(例如,安全性)继续前进?我最终追求的是完成这类任务的最佳实践,我愿意接受建议(但特别是对本周混乱的解决方案)。我知道我有很多功课要做:php数组。
非常感谢提前
答案 0 :(得分:0)
前段时间我发现了这一点,并将其理解为全局排除SQL注入的策略:
// prevent SQL Injection in $_POST variables:
foreach ($_POST as $key => $value) {
$_POST[$key] = mysql_real_escape_string($value);
}
它似乎也在干扰$ _POST数组,所以它必须去。我现在将阅读sql注入预防,但与此同时,如果有人可以建议对此进行修改以使其不会破坏我的阵列,请发出声明。
谢谢大家。
答案 1 :(得分:0)
它似乎也在干扰$ _POST数组,所以它必须去。我将会 现在阅读sql注射预防,但在此期间,如果 任何人都可以建议对此进行修改,以免它破坏我的 请插入。
谢谢大家。
在使用mysql_escape_string之前,您可以尝试检查$ _POST是否为数组:
// prevent SQL Injection in $_POST variables:
foreach ($_POST as $key => $value) {
if(!is_array($_POST[$key])){
$_POST[$key] = mysql_real_escape_string($value);
}
}