我有几个输入字段,我希望它在只有一个字段输入值而其他字段为空(更新用户数据)时提交。我现在使用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}
我的想法是否正常或是否有更简单的方法来解决这个问题?
答案 0 :(得分:1)
第一个 if 声明与您的要求相冲突;您需要使用 AND 操作填写所有字段 - 使用 OR ,它将适用于任何单个字段值。
应该/也可以使用jt作为Matt推荐的页面本身进行验证。
要确保只设置一个字段,请执行以下操作,以计算_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'])
))
无论哪种方式,这都不是一种非常优雅的方式 - 但它会起作用。
答案 1 :(得分:0)
除了服务器端检查之外,还有一个建议是在表单上使用javascript
和onSubmit
函数。使用它,您可以检查所有字段,并提醒用户在提交到服务器之前填写一些字段。
在javascript函数中检查所有输入以获得正确的输入,如果数据全部正确填充,则允许将数据发送到服务器,或者弹出警报,说明还需要做什么之后才能进行提交。
严格执行此检查服务器端将需要服务器请求每次检查输入,而不是让客户端检查它,并且只有在一切正确时才提交它。
答案 2 :(得分:0)
如果至少有一个字段已填满,假设您要发送表单,可以使用以下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))
答案 3 :(得分:0)
如果您只想要一个设置为必需字段的值(如果可能,请使用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
}
?>