我有几个输入字段,我希望它提交时只有一个字段输入值和其他是空的(更新用户数据)。我现在使用isset(),但这只发送表单时,每个字段都填写出来:
if (isset
($_POST['submit']) AND
($_POST['firstname']) AND
($_POST['lastname']) AND
($_POST['address']) AND
($_POST['ZIP']) AND
($_POST['phonenumber']) AND
($_POST['mail']) AND
($_POST['group'])
)
之后,我检查邮件模板(另一个文件)是否有一个值,以及是否在邮件中显示它:
{if !empty($firstname)}{translate text='First Name'}: {$firstname|escape} {/if}
我的想法好吗?还是有更简单的方法来解决这个问题?
第一个if语句与您的要求冲突;您要求通过使用和操作填充所有字段-使用或,它将与任何单个字段值一起工作。
验证应该/也可以像Matt建议的那样使用javascript在页面本身执行。
要确保只设置了一个字段,请执行以下操作:您可以计算_POST
中的条目数if(count($_POST) == 1 AND
(isset($_POST['submit']) OR
isset($_POST['firstname']) OR
isset($_POST['lastname']) OR
isset($_POST['address']) OR
isset($_POST['ZIP']) OR
isset($_POST['phonenumber']) OR
isset($_POST['mail']) OR
isset($_POST['group'])
))
不管怎样,这都不是一个很优雅的方式,但它会工作。
如果你想要一个字段的值被设置为必需的(如果可能的话,使用javascript,或者HTML5有一个required
属性),简单地忽略其他字段的其他值:
<?php
if ( isset( $_POST['submit'] ) ) {
$wanted_value = addslashes( strip_tags( $_POST['input_name'] ) );
// preventing from sql injection
// ignore other values
// and start manipulating it
}
?>
一个建议是在表单上使用javascript
和onSubmit
函数,以及服务器端检查。使用它,您可以检查所有字段,并提醒用户在提交给服务器之前填写一些字段。
在javascript函数中检查所有输入是否正确,如果数据全部填写正确,则允许将数据发送到服务器,或者弹出警告,说明在提交之前还需要做什么。
在服务器端严格执行此检查将要求服务器请求每次都检查输入,而不是让客户端检查它,并仅在一切正确时提交。
假设您希望发送至少有一个字段已被填充的表单,您可以使用以下if语句:
if(count($_POST) > 1)
这允许您提交表单并至少填写一个字段,但您也可以填写更多字段。
如果你想只在有一个字段被填满的情况下发送表单,你可以将上面的If语句更改为以下内容:
if(count($_POST) == 2)
这允许您只填充一个字段。我使用"== 2"的原因是因为提交按钮也是将要发送的内容。
如果你想让所有的字段为空,你可以使用下面的If语句:
if(count($_POST) > 0)
这将允许您提交按钮,并保留所有其他字段为空。
之所以这样做是因为$_POST是一个预定义的数组变量。
为了确保用户只使用您希望他们使用的字段,并保持代码整洁,您可以使用数组。
执行以下操作:
$allowed_fields = array('firstname','lastname','address','ZIP','phonenumber','mail','group');
然后在if语句中添加以下内容:
if(count($_POST) == 2 AND in_array($allowed_fields, $_POST))