【问题标题】:Standard way of retrieving PHP Form Inputs检索 PHP 表单输入的标准方法
【发布时间】:2015-06-09 00:07:15
【问题描述】:

我已经使用 PHP 进行 Web 编程大约 2 个月了,对于表单,我一直在以如下方式检索用户输入:

对于标准<input type="text">

/*input sanitation*/
function testInput($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    $data = mysql_real_escape_string($data);
    return $data;
}

/*just gets the data*/
function getRText($HTMLname) {

if (isset ( $_POST [$HTMLname] ) && ! empty ( $_POST [$HTMLname] )) {
    return testInput(( $_POST [$HTMLname] ));
} else {
    throw new Exception("Input is missing from " + $HTMLname);
}
}

然后,在另一个脚本上,我会做这样的事情:

$userID = getRText('uid');
$company = getRText('company');
$projectNum = getRText('projnum');

$dataArray = array($userID, $company, $projectNum);

这种方法的问题是,当我的表单很大时,它非常耗时。我正在考虑在 Perl(使用 Perl CGI)中,我能够在用户输入字段之间动态循环,并将每个输入动态添加到数组中,但我不确定在 PHP 中是否可以这样做。现在,我目前不得不手动从每个输入中提取每个数据。在线的所有 PHP 表单示例也都采用这种方式。这是从 PHP 表单中提取数据的正确方法吗?

【问题讨论】:

  • 不是所有的输入都已经在一个数组中了吗?如果你要经历所有这些,只需清理 $_POST。
  • 我认为一个简单的初学者表单教程也会有所帮助:tizag.com/phpT/forms.php
  • 另外你不需要做一个isset()和一个empty(),因为empty()意味着一个isset()See the manual
  • @castis 哦,我从来没有意识到 $_POST 是一个数组。谢谢。
  • @RiggsFolly -- 除了 0、false 或空白。在许多情况下,空字符串和数字 0 是来自表单的有效输入。实际上,表单上“empty()”的唯一理想情况是“isset”,在这种情况下,您也可以使用 isset,不带空。

标签: php forms user-input


【解决方案1】:

表单中的所有数据都以 $_POST 或 $_GET 数组的形式传送到您的脚本。

所以你可以简单地做

foreach ($_POST as $key => $val)
{
    $_POST[$key] = testInput($val);
}

这将运行您的清理并将数据放回 $_POST 数组,因此不再需要另一个数组。

我一直不明白为什么人们将数据从 $_POST/$_GET 数组移动到标量变量或其他数组。它是一个非常好的阵列,一旦交付给您,您就可以随心所欲地做任何事情。

【讨论】:

  • “我从来不明白……”——很简单。在您的示例中,什么检查告诉您 POST 实际上已被清理,并且有人没有忘记在某处包含清理代码,或者没有意外禁用它。通过从仅包含已清理数据的源访问它而不是“交叉手指并希望它继续正常工作”的方法,总是更好地知道它已被清理。
【解决方案2】:

您仍然可以在 PHP 中动态循环输入。这会做你想要的:

$input_array = array();
foreach ($_POST as $key => $val)
{
    $input_array[] = getRText($val);
}

【讨论】:

    猜你喜欢
    • 2011-01-01
    • 2010-10-07
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多