通过PHP拦截多个字段的最佳方法是什么?目前我有一个非常简单的login.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'];
这个问题是我会有相当数量的字段,并且每个字段都会分配一个提交按钮。然后我需要一个if条件用于每个可用的字段名称,这是我不想要的。处理这个问题的最佳方法是什么?
由于
答案 0 :(得分:1)
只需使用一个提交按钮即可。这里没有理由不止一个。
如果您有多个相关字段,则可以使用数组命名:
Primary email: <input type="text" name="email[]" >
Additional email: <input type="text" name="email[]">
使用
从php访问$emails = $_REQUEST['email'];
然而,您不应该因为懒得使用多个字段名称而将这样的数组用于不相关的参数。如果你这样做,你只是编写可怕的,不可维护的代码。
答案 1 :(得分:0)
你的HTML存在问题。 在HTML中,您不需要多个提交按钮。
提交不会提交字段,而是提交整个表单。 您甚至不需要,因为如果您在文本字段上按Enter键,大多数用户代理都会提交表单。
无论如何,您的字段将具有 name 属性,在表单中是唯一的,并且在文档中应具有唯一的 id 属性。
发送它们时,所有数据都可以作为数组在PHP中访问。 您的案例中的超全局 $ _ POST ,或者 $ _ GET (如果该方法用于提交)。 在那里,你做你的魔法。
答案 2 :(得分:0)
有几种方法可以简化这个问题。 这是一种方法:
$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数组并将每个数组键分配给一个局部变量 - 这样做会让你对黑客大开眼界。