初学php,遇到checkbox传值丢失的问题,折腾一上午未解决,现将问题简化如下:两个文件test.php语test2.phptest.php<html><head><title>test</title></head><body><?php
$testarr=array(array('A'=>'a','B'=>'b'),array('C'=>'c','D'=>'d'));print_r($testarr);
echo <<<EOT
<form method="post" action="test2.php">
<input type="checkbox" name="check[]" value="{$testarr[0]}" />
<input type="checkbox" name="check[]" value="{$testarr[1]}" />
<input type="submit" value="submit" />
</form>
EOT;?>
</body>
</html>
test2.php<?php
$arr=$_POST['check'];print_r($arr);
test.php中的$testarr二维数组,用checkbox传值之后出现问题:子数组内容丢失。
test2.php输出如下,子数组内容丢失:
Array ( [0] => Array [1] => Array )曾尝试使用序列化,未能解决,好像只能保存序列化之后字符串的前面一部分。求各位大侠帮助。

解决方案 »

  1.   

    其实你在第一个页面直接用firebug就能看值了,html里应该是没法显示数组的吧至于序列化的问题,我觉得也许和单双引号有关,但是不确定,但是要解决这个问题很容易,你可以序列化后再base64_encode,读取后再decode就行了,这样就应该不存在只能保存前一部分的问题了
      

  2.   

    应该这样<html><head><title>test</title></head><body><?php
    $testarr=array(array('A'=>'a','B'=>'b'),array('C'=>'c','D'=>'d'));print_r($_POST['check']);
    ?>
    <form method="post" action="#">
    <?php 
    foreach($testarr as  $value){ 
    foreach($value as $v){
    ?>
    <input type="checkbox" name="check[]" value="<?php echo $v?>" />
    <?php  }
    }
    ?>
    <input type="submit" value="submit" />
    </form>
    </body>
    </html>
      

  3.   

    多谢答复!
    我没用firefox。我觉得这个问题如果再编码的话是不是太复杂了?本来的问题出在哪里呢?
      

  4.   

    多谢回复!
    但是这种方案不就出现四个checkbox了么?
      

  5.   

    总共两个checkbox,一个checkbox传递一个数组。
    整体传递一个二维数组。
      

  6.   

    问题已明了,checkbox传递数组时不是按值传递。问题进一步简化后的两个文件:
    test.php:<html><head><title>test</title></head><body><?php$testarr=array('A'=>'a','B'=>'b','C'=>'c','D'=>'d');echo <<<EOT
    <form method="post" action="test2.php">
    <input type="checkbox" name="checkbox" value="${testarr}" />
    <input type="submit" value="submit" />
    </form>
    EOT;?></body>
    </html>test2.php<?php
    $arr=$_POST['checkbox'];
    print_r($arr);test2.php输出结果为:Array
      

  7.   

    注意checkbox传递过来的也是一个数组,代码修改如下:test.php<html><head><title>test</title></head><body><?php
    $testarr=array(array('A'=>'a','B'=>'b'),array('C'=>'c','D'=>'d'));print_r($testarr);<form method="post" action="test2.php">
    <input type="checkbox" name="check" value="{$testarr[0]}" />
    <input type="checkbox" name="check" value="{$testarr[1]}" />
    <input type="submit" value="submit" />
    </form>
    ?>
    </body>
    </html>
      

  8.   

    test2.php
    <?php
    $arr=$_POST['check'];print_r($arr);注意名称要一致,你给的代码使用的名称是 name="check[]",但是接收的却是checkcheck[]和check是不一样的
      

  9.   

    这么用应该没有问题吧,我就一直是这么用的。
    那应该怎么接收checkbox数组呢?
      

  10.   

    上面说的好像是错的、、、实际上checkbox传值时会自动将数组转换成为字符串"Array",因此刚刚输出时会出现很奇怪的结果,同样,传递对象时也会将其自动转换为字符串"Object"。