如何在数据库的复选框中将默认值设置为“已选中”

时间:2013-01-27 05:34:23

标签: php mysql

简而言之,用户的复选框值存储在MySQL数据库中。我可以遍历数据库以显示每个复选框的VALUES(Skills_ID + Skills_Name),以便用户可以添加他们的技能;但是,我无法使用标记为“已检查”的默认值填充这些复选框,以获取数据库中已有的技能。

一个可以帮助我今晚睡觉的人的一个充满业力的盒子。 :)

这是我的代码:

     function isChecked() {
            $query = "select * FROM individual_skills WHERE Ind_ID = ".$_SESSION['Ind_ID']. "";
            $result = mysql_query($query) or die(mysql_error());        
            while($row = mysql_fetch_array($result))
            {
                // If value exists, set $valueExitsInDB to true
                if (isset($row['Skills_ID'])) {
                    $valueExitsInDB="TRUE";
                } else {
                    $valueExitsInDB="FALSE";
                }
                    // if the value does exist, then we are writing 'checked' in the checkbox       
                    if ($valueExitsInDB) {
                        return "checked";
                    } else {
                        return "";
                    }
            } // END WHILE LOOP
        } // END FUNCTION

而且,我在复选框循环中的代码看起来像这样(不需要为阅读循环负担,因为我可以安全地将复选框值拉到输出 - 只是不是默认值):

  echo "<input type='checkbox' name='skills[]' value='$skill_ID' checked='isChecked()'>". $skillName ."";

所以,你可以看到,我正在调用函数:isChecked()。

任何和所有帮助,非常感谢。

4 个答案:

答案 0 :(得分:3)

您的代码存在一些问题,假设我了解您要执行的操作:

  • 你实际上并没有像你所认为的那样调用函数isChecked();它只是将字符串"isChecked()"添加到输出中。如果您检查了生成的HTML,您会注意到这一点。该行应为:

    echo "<input type='checkbox' name='skills[]' value='$skill_ID'" .
        (isChecked($skill_ID) ? " checked='checked'" : "") . "'> $skillname";
    
  • 如上所述,您应该将技能ID传递给isChecked()功能。然后,您应该在查询中检查此行,而不是*在返回的查询中是否设置了Skills_ID。否则,您正在检查是否为该个人定义了任何技能!所以你的功能现在应该是:

    function isChecked($skill_ID)
    {
        $query = "SELECT 1 FROM individual_skills WHERE Ind_ID = " . 
            $_SESSION['Ind_ID'] . " AND Skills_ID = $skill_ID";
    
        $result = mysql_query($query) or die(mysql_error());
        return mysql_num_rows($result) = 1;
    }
    

几个旁注:

  • 我从函数返回false或true值。这符合命名“is ...”,它将返回yes或no。然后调用者(echo语句)可以决定如何处理返回的值。

  • 您可能不必像现在这样打1000次数据库。如果您更改初始查询以包含isChecked列,则首先不需要该功能和其他查询。

答案 1 :(得分:2)

应该是下面的内容。

方法1

echo "<input type='checkbox' name='skills[]' value='$skill_ID'  checked='".isChecked()."'>". $skillName ."";

方法2

你可以尝试

echo "<input type='checkbox' name='skills[]' value='$skill_ID ".isChecked().">". $skillName ."";

解释

方法1

checked="checked" 

应该是一个不同的属性,而不是将其放入值

方法2

同样添加checked也可以帮到你。

建议

不是为每个复选框进行数据库调用,而是尝试创建一个包含所有数据的数组。尝试多维数组。

答案 2 :(得分:1)

echo "<input type='checkbox' name='skills[]' value='$skill_ID'" . isChecked() . ">" . $skillName . "";

尝试使用此

答案 3 :(得分:1)

我认为,您的error(all checked checkboxes)是因为 isset ,而是{而不是isset($row['Skills_ID'])使用!empty($row['Skills_ID'])或{{1}因为如果该字段为空,那么它也会给你真实的,

link