【问题标题】:Automate processing form data自动处理表单数据
【发布时间】:2011-05-12 20:18:29
【问题描述】:

有没有办法自动化(或至少自动化一些过程)从存储在$_POST$_GET 超全局变量中的表单中提取数据?

我知道您可以使用 foreach 循环和其他类型的循环对数组进行迭代,以对每个键/值对执行某些操作,但很多时候我还有其他代码需要这些数据但无法正常工作完全在 foreach 循环中时。

编辑:这是我能想到的一个例子。假设我有一大堆已发布的数据并想将其插入数据库。据我所知,做这样的事情是不可能的,因为我需要在每个循环的不同列中插入一个值:

foreach($array as $key => $value) {
mysql_query(INSERT INTO table (somecolumn) VALUES($value);
}

另外,我真正想做的另一件事是从发布的数据中获取所有值,并以某种方式将它们中的每一个分配给一个变量;有点像extract() 所做的,但没有覆盖其他变量的问题。我能想到的唯一办法就是以某种方式将数据放入一个数组中,但我不确定这是否更有效:

$data = array();
foreach($array as $key => $value) {
$data[$key] = $value;
}

我能想到的最后一种情况是我必须在 foreach 循环之外使用这些数据。如果我修改我的代码以使所有内容都在 foreach 循环内执行,那么我只能将与表单数据有关的所有内容保留在循环内。如果变量和/或常量是在循环内定义的,它们就不能在循环外访问,对吗?我最近一直在使用 Java,并且习惯了更严格的范围和更严格的变量处理方式:)

我已经阅读了一些关于 extract() 方法的文章,但使用它看起来有点危险(覆盖变量、安全漏洞等)。

对于其他处理大量数据(比如说 25 个以上的表单字段)的人,您是如何做到的?我厌倦了一遍又一遍地分配像$data = $_POST['somedata'] 这样的变量以在其他地方使用它们......

谢谢!

【问题讨论】:

  • 详细说明“但很多时候我有其他代码需要这些数据,但在 foreach 循环中根本无法工作。”什么样的代码不能在 foreach 循环中工作??
  • 只是添加了几个我能想到的例子

标签: php arrays forms loops post


【解决方案1】:

我知道你可以遍历 带有 foreach 循环和其他的数组 各种循环做某事 每个键/值对,但有 很多时候我有其他代码 需要这些数据,但不会 在 foreach 循环内工作 全部。

你有这样的例子吗?

我一直在阅读有关 extract() 方法有点,但看起来有点像 使用危险的东西 (覆盖变量,安全 孔等)。

是的,不要使用它。这在以前的 PHP 版本中其实用的比较多,也造成了很多安全问题。

对于其他任何处理大数据的人 数据量(比如说 25+ 表格 领域),你是怎么做到的?我累了 分配变量,如 $data = $_POST['somedata'] 一遍又一遍 在其他地方使用它们...

我通常将许多表单字段分成相似的功能组(名称、数字、日期等)并以这种方式处理它们。老实说,我的数据库中存在未检查数据的问题,然后是检查大量表单字段。

【讨论】:

  • 当你说你拆分数据介绍组时,你的意思是你把相似的数据,把每个组放入一个数组中以备后用?
  • @Aaron 我通常有一个 $_POST 键值数组,我会循环并根据它是什么类型的数据进行操作。例如,当询问出生日期、年份、月份、美国邮政编码、信用卡 cvv2 等数字数据时,我会将其传递给数字验证函数。
  • 我明白了。但是在你运行完这些验证函数之后,你如何使用这些数据呢?我想我的主要问题之一是我只想在循环内处理/验证/准备数据,但实际上在其他地方使用它(不在循环中)
  • @Aaron 您的另一个选择是创建代表数据的对象,并传入 $_POST 数组,让对象进行数据检查并填充成员变量。然后,当您要处理数据时,可以通过使用单个对象而不是一堆临时变量来访问它。
【解决方案2】:

把事情搞定。在您的 html 表单和数据库中,如果您有一个元素“email”,请确保它与您的表匹配,即没有一个名为“user_email”的数据库表。

隔离那些您只需要验证的项目,检查它们,将它们添加回 $_POST 数组 - 或者相应地失败或中止。

$_POST['web'] = {do your cleansing here, add any missing http:// kinda thing}

删除任何可能已进入您的 $_POST 数组的提交按钮。

unset($_POST['submitMe']);

然后做相当于:

$db->saveNew($_POST);

其中 $db 是位于 PDO 之上的一个小层,它自动且不会失败地使用 Prepared Statements 来逃避和保护您的数据库。

您可以让您的 $db 类获取一个 ini 文件,该文件确定您的每个表所期望的变量类型。

【讨论】:

    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 2023-04-07
    • 2012-10-18
    相关资源
    最近更新 更多