【问题标题】:Making checkbox checked by exploding value通过爆炸值检查复选框
【发布时间】:2013-10-22 18:31:07
【问题描述】:

伙计,这毫无意义,我花了几个小时试图弄清楚这一点,并在整个网站上进行了搜索。在数据库中,user_level 是 1,2,3 作为我内爆的值。我正在显示复选框,我希望在值与数据库中的值匹配时检查它们。当数据库中只有一个值(例如 user_level 的 1 或 2)时,这非常有效。现在使用 1,2,3,我简单地分解了该值,然后使用 in_array() 来生成结果,如果是,则添加复选框。由于某种原因,这不起作用,随机框似乎被选中。代码如下:

$sql = "SELECT user_level FROM table";
$result = query_db($sql);
$row = mysql_fetch_array($result);


$field_names =  array(MEMBER    => 'Member', 
              VISITOR => 'Visitor');


foreach ( $field_names as $key => $value )
{

    $thePostIdArray = explode(',', $key);

    //print_r($thePostIdArray); // testing output


    $selected = ( in_array($row['user_level'], $thePostIdArray) ) ? 'checked="checked"' : '';


    $options .= '<input type="checkbox" name="'.$perm_type.'[]" '.$selected.' value="'.$key.'"> '.$value. ' ';

}

$selected 值应该在正确的复选框上输出“选中”值,但事实并非如此。

【问题讨论】:

  • 您应该在 foreach 之前转储 $row 以确保它包含您要查找的内容。 $field_names 的值似乎没有意义......实际上,不要介意$row,因为它实际上并没有在任何地方使用。这是整个代码部分还是你编辑了一些东西?另外..如果您应该使用$row并且有几行...您需要为您期望返回的每一行执行while($row = mysql_fetch_array($result)) { .... }...(并且您应该使用msqli_或pdo bc更安全,哈哈...我现在将停止更新,对不起!)
  • $row 正在显示数据库中的 user_level 值。当 user_level 中只有 1 位数字时,这非常有效。只有在添加逗号时才会搞砸。我认为 in_array() 无法正常工作。
  • 您能否发布一个示例,说明 $row 中返回的内容? MEMBERVISITOR$fieldnames 中的常量吗?如果不是,那到底发生了什么?我不知道你想做什么....有多少复选框?两个?
  • $row 结果值内爆到数据库中,如“1,2,3”和“1,2”。当我不使用 implode 并导致像 $row = 1 和 $row = 2 这样的单个值时,这非常有效。我改变的只是内爆,现在它不起作用。
  • 是的,当你让我解释它是如何工作的时,它让我意识到我做错了什么谢谢 :) 我昨晚只睡了两个小时,也许这就是让我的思绪变得糊涂的原因。

标签: php explode implode


【解决方案1】:

多个问题:

array(MEMBER ... 不正确。 MEMBERVISITOR 之类的都是未定义的常量(除非您没有在其他地方显示 define() 调用)。 PHP 会“礼貌地”将它们更正为字符串,但会发出警告。

你的 foreach() 循环然后获取这个新数组并循环其内容:

foreach ( $field_names as $key => $value ) {
    $thePostIdArray = explode(',', $key);

但此时 $key 只是一个字符串,例如“会员”或“访客”。它不是数组,所以没有什么可以爆炸的。

$foo = explode(',', 'member');

将产生一个包含0 =&gt; 'member' 的单元素数组,所以现在你有了一个数组。而且,这纯粹是偶然的,会让您的in_array 电话正常工作。但这整个序列是毫无意义的,完全是多余的。

请注意,in_array 会进行区分大小写的比较:

$arr = array('FOO');
var_dump('foo', $arr);

将返回一个布尔值 false,因为在这种情况下是 FOO != foo

【讨论】:

  • 是的,常量是在其他地方定义的。
【解决方案2】:
<?php

$db = mysql_connect('localhost', 'root', 'password')
         or die('Could not connect: ' . mysql_error());

$query  = "select user_level from test.my_table";
$result = mysql_query($query,$db); 

/*
mysql> select user_level from my_table;
+------------+
| user_level |
+------------+
| 1,2,3      |
| 4          |
| 5,6        |
+------------+
3 rows in set (0.00 sec)

*/

/*

$rows = array();  
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{
   $rows[] = $row;
}

print "<pre>".print_r($rows,true)."</pre>"; 


Array
(
    [0] => Array
        (
            [user_level] => 1,2,3
        )

    [1] => Array
        (
            [user_level] => 4
        )

    [2] => Array
        (
            [user_level] => 5,6
        )

)
*/

$my_checkboxes = array('one','two','three','four','five','six','seven'); 
$group = 0; 

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{ 
   $row_values = explode(',',$row['user_level']); 

   /*
   print "<pre>".print_r($row_values,true)."</pre>"; 

   Array
   (
       [0] => 1
       [1] => 2
       [2] => 3
   )
   Array
   (
       [0] => 4
   )
   Array
   (
       [0] => 5
       [1] => 6
   ) 
   */

   print "<div style='border:1px solid black;display:inline-block'>";

   foreach ($my_checkboxes as $value => $label)
   {
      $selected = (in_array(($value+1), $row_values)) ? "checked='checked'" : ''; 

      print "<input type='checkbox' name='group$group' value='$value' $selected/>$label<br/>";  
   } 

   print "</div><br/><br/>";
   $group++; 
}


?> 

以及 PHP 输出的 HTML(查看源代码):

<div style='border:1px solid black;display:inline-block'><input type='checkbox' name='group0' value='0' checked='checked'/>one<br/>
<input type='checkbox' name='group0' value='1' checked='checked'/>two<br/>
<input type='checkbox' name='group0' value='2' checked='checked'/>three<br/>
<input type='checkbox' name='group0' value='3' />four<br/>
<input type='checkbox' name='group0' value='4' />five<br/>
<input type='checkbox' name='group0' value='5' />six<br/>
<input type='checkbox' name='group0' value='6' />seven<br/>
</div><br/><br/>

<div style='border:1px solid black;display:inline-block'><input type='checkbox' name='group1' value='0' />one<br/>
<input type='checkbox' name='group1' value='1' />two<br/>
<input type='checkbox' name='group1' value='2' />three<br/>
<input type='checkbox' name='group1' value='3' checked='checked'/>four<br/>
<input type='checkbox' name='group1' value='4' />five<br/>
<input type='checkbox' name='group1' value='5' />six<br/>
<input type='checkbox' name='group1' value='6' />seven<br/>
</div><br/><br/>

<div style='border:1px solid black;display:inline-block'><input type='checkbox' name='group2' value='0' />one<br/>
<input type='checkbox' name='group2' value='1' />two<br/>
<input type='checkbox' name='group2' value='2' />three<br/>
<input type='checkbox' name='group2' value='3' />four<br/>
<input type='checkbox' name='group2' value='4' checked='checked'/>five<br/>
<input type='checkbox' name='group2' value='5' checked='checked'/>six<br/>
<input type='checkbox' name='group2' value='6' />seven<br/>
</div><br/><br/>

【讨论】:

    猜你喜欢
    • 2015-05-09
    • 2015-08-23
    • 2014-05-15
    • 2016-03-23
    • 2012-10-17
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多