PHP表单处理多个字段

问题描述:

什么是通过PHP截取多个字段的最佳方式?目前,我有一个的login.php文件,该文件是非常简单的:PHP表单处理多个字段

<form method="POST" action="auth.php"> 
    Code:<br /> 
    <input type="text" name="code" /> 
<input type="submit" id="submit" value="Submit" /> 
<br /> 
    Pass:<br /> 
    <input type="text" name="pass" /> 
    <input type="submit" id="submit" value="Submit" /> 
    </form> 

然后在auth.php我通过POST获取的价值:

 $value = $_POST['code']; 

这样做的问题是,我会相当数量的字段,每个字段都会有一个提交按钮。那么我会需要一个条件,每个字段的名称avaible,我不想。处理这个问题的最佳方法是什么?

谢谢

+0

究竟是什么问题?正如bemace指出的那样,你不需要很多提交按钮,而且真的,我无法得到问题所在...... – 2010-10-30 23:14:32

有几种方法可以简化这个问题。 这里有一个办法:

$fields = array('field1','field2','field3','field4','field5'); // Add all your field names to an array 
$data = array(); 
foreach ($fields as $field) { 
    if (isset($_POST[$field])) { 
     $data[$field] = $_POST[$field]; 
     // If you wanted it assigned to a local variable instead, 
     // you could do it like this, although this pattern is 
     // generally frowned upon: 
     ${$field} = $_POST[$field]; 
    } 
} 

为局部变量分配给它的危险之处在于它可以覆盖已经存在的变量。它可能会覆盖对应用程序其余部分至关重要的事情。但是,由于字段名称是在数组中明确定义的,因此至少要保持对此的控制权。

你肯定不想遍历$ _POST数组并将每个数组键都分配给一个局部变量 - 这样做会让你为黑客敞开大门。

只需使用一个提交按钮。没有理由在这里有一个以上的人。

如果您有多个相关领域,你可以使用数组命名:

Primary email: <input type="text" name="email[]" > 
Additional email: <input type="text" name="email[]"> 

,并从PHP访问使用

$emails = $_REQUEST['email']; 

但是,你不应该使用数组像这样无关的参数只是因为你懒得使用多个字段名称。如果你这样做,你只是写了糟糕的,不可维护的代码。

+0

这无法解决我的问题。我仍然需要为每个领域提供不同的名称。然后,auth.php文件中的每个字段的条件不同。 – phpdude 2010-10-30 23:12:26

+0

@phpdude - 编辑。但是,您可能只需要克服它并使用多个字段名称。 – 2010-10-30 23:18:51

您对HTML有不好的问题。 在HTML中,您不需要多个提交按钮。

提交不提交字段,但整个表格。 你甚至不需要需要它,因为如果你在文本框上按回车键,大多数用户代理将提交表单。

无论如何,你的领域将有一个属性,表格中是唯一的,并应具有ID文档中特有的属性。

发送它们时,所有数据都可以作为数组在PHP中访问。 超级全球$ _POST您的情况,或$ _GET如果使用该方法提交它。在那里,你做你的魔力。