0

简而言之,用户将复选框值存储在 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

4 回答 4

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;
    }
    

一些旁注:

  • 我从函数中返回一个假值或真值。这与将返回是或否的命名“is...”一致。然后调用者(echo语句)可以决定如何处理返回的值。

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

于 2013-01-27T05:59:24.507 回答
2

它应该如下所示。

方法一

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

方法二

你可以试试

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

解释

方法一

checked="checked" 

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

方法二

另外添加也checked可以为您解决问题。

建议

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

于 2013-01-27T05:43:59.063 回答
1
echo "<input type='checkbox' name='skills[]' value='$skill_ID'" . isChecked() . ">" . $skillName . "";

尝试使用这个

于 2013-01-27T05:46:23.437 回答
1

我认为,你error(all checked checkboxes)是因为isset

而不是isset($row['Skills_ID'])使用!empty($row['Skills_ID']),或者!is_null($row['Skills_ID'])因为如果该字段为空,那么它也会给你真实的,

见这里链接

于 2013-01-27T05:55:00.393 回答