【问题标题】:Get boolean value from checkbox从复选框获取布尔值
【发布时间】:2021-11-01 08:11:18
【问题描述】:

我从另一个开发者那里接管了一个项目。

代码允许我从表单的文本输入中获取数据,但不能从复选框输入中获取数据。

最初的开发者编写了这些函数(以及其他):

protected function getObjectString($key,$html=false,$escape=false) 
    {
        $string = isset($this->classData[$key]) ? $this->classData[$key]."" : ""; 
        if($html == true) $string = htmlspecialchars($string);
        if($escape == true) $string = addslashes($string);
        return $string;
    }

protected function getObjectBool($key,$toString=false,$trueVal="yes",$falseVal="no")
    {
        $bool = intval(isset($this->classData[$key]) ? $this->classData[$key] : 0);
        //$bool = intval(isset($this->classData[$key]) ? 1 : 0);
        if($toString == true)
        {
            if($bool > 0) return $trueVal;
            else return $falseVal;
        }
        return $bool > 0;
    }

当我使用时

getObjectString("Email",false,false);

我得到了表单元素的值

<div class="row">
    <div class="col-lg-3 formlabel">E-mail</div>
    <div class="col-lg-9"><input type="text" class="form-control" name="Email" value=""></div>
</div>

但是当我使用时

getObjectBool("EmailMandatory",false,"yes","no");

我应该从

获取值 (checked=1, unchecked=0)
<div class="row">
    <div class="col-lg-3 formlabel">Mandatory</div>
    <div class="col-lg-9">
        <label style="font-weight: normal;">
            <input type="checkbox" name="EmailMandatory" value="1" checked>
            Use of mail address is mandatory
        </label>
    </div>
</div>

但是,值(来自 getObjectBool)始终为空。我做错了什么?

根据 Abronsius 教授的要求添加:

abstract class common_library_dbbase
{
    /** CLASS PROPERTIES **/
    protected $classData = array();

    /** CONSTRUCTOR **/
    function __construct($data,$tableName,$primaryIDName,$accountTable=false,$cacheEnabled = true)
    {
        
        // Set member data
        $this->tableName = $tableName;
        $this->primaryIDName = $primaryIDName;
        $this->cacheEnabled = $cacheEnabled;
        $this->accountTable = $accountTable;
        
        // Is same class        
        if(is_object($data) && get_class($this) == get_class($data))
        {
            $this->classData = $data->toArray;
        }
        
        // Is array data
        else if(is_array($data)) 
        {
            $this->classData = $data;   
        } 
        
        // Is number, load from db
        else if(intval($data) > 0) 
        {
            $this->classData = $this->loadByID($data);
        }
        
    }
}

【问题讨论】:

  • 什么是$this-&gt;classData?一个复选框,如果未选中,将不会出现在 POST 数组中,那么这很重要吗?
  • classData 是 php 类 dbbase 中的受保护数组。我会将整个班级添加到我的问题中。编辑:显然我不能添加整个班级。我会尝试找出最重要的部分。
  • 我相当怀疑,如果你添加所有的类可能太多了 - 但该受保护数组的内容可能有用
  • 我添加了一些类,希望能对主题有所启发:)
  • 由于该方法依赖于$this-&gt;classData[$key],因此在该方法尝试使用$this-&gt;classData[$key]时了解该数组包含的内容更为重要

标签: javascript php forms


【解决方案1】:

当您将 false 作为第二个参数传递时,该函数返回一个布尔值,而不是一个整数。你可以这样做

getObjectBool("EmailMandatory",false,"yes","no") ? 1 : 0

或者

getObjectBool("EmailMandatory",true,1,0)

【讨论】:

  • 谢谢,但它不起作用。虽然我现在得到了一个值,但无论复选框的状态如何,该值始终是“否”。
  • 好的,所以问题不在于该函数,而在于您的对象的初始化方式,您必须更深入地分析代码。您使用的是知名框架吗?
  • 我从另一个开发者那里超越了系统。它不是一个实际的框架,而是一个组织良好的 MVC。我找到了一个我并不引以为豪的方法,但暂时还可以。通过使用 if (intval(IN::PostBool("EmailMandatory"))===1) 我可以获取复选框的当前状态,但是,它不能解决 getObjectBool 不起作用的问题。 PostBool 在类 IN 中定义: public static function PostBool($name) { if(!self::hasPost($name)) return false;返回 in_array($_POST[$name],array(1,true,"on","true","1")); }
  • IN:PostBool 直接读取 $_POST 数组(尽管您没有发布 hasPost 方法)。 getObjectBool 期望在 classData 成员中找到值,但它可以以不同的方式初始化,您必须找到对象实例化的位置才能了解它是如何工作的。您可以在构造函数中抛出异常以获取堆栈跟踪以帮助您找到查看位置。
  • 抱歉回复晚了 :) 我添加了 $MailMandatory=0; if (intval(IN::PostBool("EmailMandatory"))===1) { $MailMandatory=1; } $PhoneMandatory=0; if (intval(IN::PostBool("PhoneMandatory"))===1) { $PhoneMandatory=1; } 并且有效 :) 现在我可以对这两个整数使用 if 语句。
猜你喜欢
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-11
  • 1970-01-01
  • 2012-06-04
相关资源
最近更新 更多