【问题标题】:php function that checks if checkbox is selected. Field validation issue检查复选框是否被选中的 php 函数。字段验证问题
【发布时间】:2013-09-12 15:07:28
【问题描述】:

请仔细阅读我的问题,有点棘手。

下面的函数用于显示我的“添加”和“编辑”记录页面上的表单中是否已选中复选框。这里没问题。

问题: 假设我有 2 个字段“名称”和“启用”。只有经过验证的字段是“名称”。 当用户编辑现有记录并输入无效的“名称”时,表单将得到验证。如果用户取消选中“启用”复选框(之前的值为 $field_record_value="1",来自数据库的设置),则该复选框的值仍设置为“1”,因为它仍来自数据库。

问题: 当数据库记录 ($field_record_value) 设置为 1 时,如何将值设置为“0”?

我知道问题在于这段代码: $is_checked = isset($field_record_value) ? $field_record_value : '0';

我似乎无法弄清楚,也许是因为我在这上面花了大约 2 个小时,而且我的大脑被炸了..但我离题了 :)

//------------------------------------------------
// Function to check if checkbox is selected
//------------------------------------------------  
function form_checkbox_selected($field_name, $page = 'add', $field_record_value = '0')
{
    if(!empty($_POST[$field_name]) && intval($_POST[$field_name]))
    {
        $is_checked = '1';
    }
    else
    {
        if($page ==' edit')
        {
            $is_checked = isset($field_record_value) ? $field_record_value : '0';
        }
        else
        {
            $is_checked = '0';
        }       
    }   
    return $is_checked;     
}

【问题讨论】:

    标签: php post checkbox


    【解决方案1】:

    问题是您期望复选框的值未选中,浏览器永远不会为未选中的复选框发送值,因此您知道复选框处于未选中状态的唯一方法是假设,您可以仅在表单提交后假设。我会像这样重写你的函数:

    function form_checkbox_selected /// line wrapped for SO read-ability
    ($field_name, $page = 'add', $form_submitted = false, $field_record_value = '0'){
      if ( form_submitted ) {
        $is_checked = !empty($_POST[$field_name]) ? 1 : 0;
      }
      else if ( $page == 'edit' ) {
        /// isset is not required because it will always 
        /// be defined by $field_record_value = '0' in default params.
        $is_checked = $field_record_value ? 1 : 0;
      }
      else {
        $is_checked = 0;
      }
      return $is_checked;     
    }
    

    为了判断表单是否已提交,通常最好有一个您知道将始终发送的隐藏字段,或者您可以为提交按钮定义一个名称。

    <form>
      <input name="sent" type="hidden" value="1" />
    </form>
    
    <form>
      <input name="sent" type="submit" value="Submit Form" />
    </form>
    

    然后在php端你可以调用你的函数:

    form_checkbox_selected(
      'my_field', 'edit', !empty($_POST['sent']), $db['my_field']
    );
    

    现在这意味着您的 php 可以更好地假设实际上没有传入数据时该字段的状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-07
      • 2021-07-16
      • 1970-01-01
      • 2019-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多