使用$ _REQUEST而不是$ _POST检索数组

时间:2014-02-24 17:59:54

标签: php arrays post

我一直在关注$_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>";
        }
    }
?>

...返回:

  1. 2014-02-23,1,100.00,100.00
  2. 2014-02-24,2,100.00,200.00
  3. 2014-02-25,3,100.00,300.00
  4. 那么,为什么$_REQUEST检索这些值而不是$_POST?无论如何,有没有理由不使用$_REQUEST(例如,安全性)继续前进?我最终追求的是完成这类任务的最佳实践,我愿意接受建议(但特别是对本周混乱的解决方案)。我知道我有很多功课要做:php数组。

    非常感谢提前

2 个答案:

答案 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);
      }
    }