【问题标题】:submit empty form input field提交空表单输入字段
【发布时间】:2013-01-03 16:59:10
【问题描述】:

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

我的想法没问题还是有更简单的方法来解决这个问题?

【问题讨论】:

  • “只有”一个?还是“即使”一个?
  • 你说得对,对不起我糟糕的英语:即使一个!

标签: php input


【解决方案1】:

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

验证应该/也可以按照 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'])
   ))

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

【讨论】:

  • 是的,这是真的,但如果他的要求是“即使一个字段”被填满,它就会起作用,而不是当要求,看起来像“只有一个”被填满时
  • @HankyPanky 刚刚补充说
【解决方案2】:

如果您只需要设置为必需字段的一个值(如果可能,请使用 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
     }
?>

【讨论】:

    【解决方案3】:

    除了服务器端检查外,一个建议是在表单上使用javascriptonSubmit 函数。使用它,您可以检查所有字段,并提醒用户在提交到服务器之前填写一些字段。

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

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

    【讨论】:

    • 它也必须在服务器端。 Javascript 验证只是用户友好的,它不会阻止禁用 javascript 或 javascript 错误。
    • 服务器端验证不是可选的,即使验证客户端以保护您的 system.data 模型
    【解决方案4】:

    假设您想在至少有一个字段已填写的情况下发送表单,您可以使用以下 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))
    

    【讨论】:

    • 一个should not assume 客户端软件不会发布除了表单中指定的字段以外的任何字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 2013-07-25
    • 2021-09-08
    • 2011-03-01
    • 1970-01-01
    相关资源
    最近更新 更多