0

我有几个输入字段,我希望它在只有一个字段具有输入值而其他字段为空(更新用户数据)时提交。我现在使用 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}

我的想法可以吗,还是有更简单的方法来解决这个问题?

4

4 回答 4

1

第一个if语句与您的要求相冲突;您要求使用AND操作填写所有字段 - 使用OR,它将适用于任何单个字段值。

正如马特推荐的那样,应该/也可以通过使用 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'])
   ))

无论哪种方式,这都不是一种非常优雅的方式 - 但它会起作用。

于 2013-01-03T08:23:34.753 回答
0

除了服务器端检查之外,一个建议是在表单上使用javascript和您的功能。onSubmit使用它,您可以检查所有字段,并在将其提交到服务器之前提醒用户填写一些字段。

在 javascript 函数中检查所有输入是否正确,如果数据全部正确填写,则允许将数据发送到服务器,或者弹出一个警报,说明在提交之前还需要做什么。

严格执行服务器端检查将需要服务器请求每次都检查输入,而不是让客户端检查它,并且只有在一切正确时才提交。

于 2013-01-03T08:20:24.837 回答
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))
于 2013-01-03T08:24:36.110 回答
0

如果您只需要设置为 required 的字段中的一个值(如果可能,请使用 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
     }
?>
于 2013-01-03T08:24:42.140 回答