a.php中有一个二维数据,传给b.php
a.php
<form name="loadConfirm" method="post" action="b.php?m=1">
<input type="hidden" name="data[]" value="<?php print_r($arr);?>">//此处如处写啊??有何技巧???
<input type="submit" name="submit" value="导入以上数据/Submit" onClick="return confirm('确定提交吗?/Are you sure?');">
</form>b.php
if($_GET['m']){
print_r($_POST['data']);
saveData($_POST['data']);//一个插入数据库函数
}
?>
通过此法,得到的$_POST['data']变成了一个三维数组了,如何办???

解决方案 »

  1.   

    序列化serialize需要注意转义问题
      

  2.   


    壮士,你试试
    $arr = array("'", "\\");
    echo serialize($arr);这个结果是需要转义的,否则html表单传值会出错但是通常php数据提交会转义,这就对期望的字符串转义了2次unserialize的时候,注意去转义,然后复原出数据
      

  3.   

    <input type="hidden" name="data" value="<?php serialize($arr);?>">把序列化的值传到隐藏域中,传给b.php去处理  ,b.php那边,unserialize($_POST['data'])//出来就是一个数组,serialize() 返回字符串 ,具体查下手册
      

  4.   

    session有 action="b.php?m=1
    并没有离开本站,保存在 session 中就可以了
    何必劳烦网络搬来搬去?
      

  5.   

    其实,是在一个页面内
    使用session,我试过未成,我不会存数组?请指教?谢谢了。
    那个序列化,我又修改了,我也未成功。<form name="loadConfirm" method="post" action="insert.php?m=1">
    <input type="hidden" name="data" value="<?php echo serialize($arr);?>">
    <input type="submit" name="submit" value="导入以上数据/Submit" onClick="return confirm('确定提交吗?/Are you sure?');">
    </form>
    if($_GET['m']){
    print_r(unserialize($_POST['data']));
    saveData($_POST['data']);
    }
    ?>
      

  6.   

    if($_GET['m']){
        print_r(unserialize($_POST['data']));//这只是验证一下数据的完整性
        saveData(unserialize($_POST['data']));//这样才能传递数组过去
        }
      

  7.   

    <input type="hidden" name="data" value="<?php echo addslashes(serialize($arr));?>">序列化需要addslashes转义传值的时候,通常默认,或程序统一addslashes,看效果用,服务端根据需要去掉几重转义$arr = array("'", "\\");
    print_r(unserialize(stripslashes(stripslashes(addslashes(addslashes(serialize($arr)))))));
      

  8.   

    写成缓存文件也行的序列化也可以,但是数据会被客户端看到,而且不安全,如果不想让客户端看到的话,用session或者写缓存文件都是不错的选择
      

  9.   

    用序列号也可以,但是感觉不是很安全,如果不涉及到这块,就可以用,不过建议用写缓存文件的方式来读取,或者用session,但是session会消耗一定的内存
      

  10.   

    谢谢你,我还是未成功。二者在一个页面里。
    <form name="loadConfirm" method="post" action="insert.php?m=1">
    <input type="hidden" name="data" value="<?php echo serialize($arr);?>">
    <input type="submit" name="submit" value="导入以上数据/Submit" onClick="return confirm('确定提交吗?/Are you sure?');">
    </form>
    if($_GET['m']){
    saveData(unserialize($_POST['data']));
    }我在savaData中print_r一下,得到 一个不完完整的组列。气死我了。
      

  11.   

    众好汉,已实现。但我不解。为何要这般烦嘛???xuzuning好汉,给洒家的提示极为感谢。
    但是此般没成功
     saveData(unserialize($_POST['data']));最后这般成功了。
     saveData(unserialize(StripSlashes($_POST['data'])));再次谢谢和位。