Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 您是否无法在会话变量之间传递数组中的数组?_Php_Arrays - Fatal编程技术网

Php 您是否无法在会话变量之间传递数组中的数组?

Php 您是否无法在会话变量之间传递数组中的数组?,php,arrays,Php,Arrays,我正在将值从表单传递到处理页面。有更多的领域,但值得关注的是: <label><input type="checkbox" name="plans[]" value="1" /> Number 1</label> <label><input type="checkbox" name="plans[]" value="2" /> Number 2</label> <label><input type="che

我正在将值从表单传递到处理页面。有更多的领域,但值得关注的是:

<label><input type="checkbox" name="plans[]" value="1" /> Number 1</label>
<label><input type="checkbox" name="plans[]" value="2" /> Number 2</label>
<label><input type="checkbox" name="plans[]" value="3" /> Number 3</label>
<label><input type="checkbox" name="plans[]" value="4" /> Number 4</label>
如果确实发生错误,“我的实际表单”页面将使用以下代码从会话变量中提取原始字段值:

if(isset($_SESSION['fields'])) {
        $fields = array();
        $fields = $_SESSION['fields'];
        unset($_SESSION['fields']);
}
打印$fields变量时,除原始数组(复选框)外,所有原始post值都会显示。它们根本不出现(但名称、地址等会出现)

您是否无法以这种方式通过引用传递数组中的数组

编辑 流程如下:

  • form.php
  • (所有值都发送到处理页面)processing.php
  • 验证POST值,如果存在任何错误或问题,$\u会话['fields']=$\u POST
  • 重定向回form.php以修复错误,突出显示问题,并将所有原始值显示到字段中

  • 你可以做到这一点——根据你所说的,这应该是可行的

    注意
    $fields=array()行是完全多余的-您将它初始化为一个空数组,然后将它设置为完全不同的值


    当你打印($\u SESSION)
    时,你会得到什么?

    这里似乎还有其他错误。请查看以下内容:

    index.html:

    <form method="post" action="l.php" >
    <label><input type="checkbox" name="plans[]" value="1" /> Number 1</label>
    <label><input type="checkbox" name="plans[]" value="2" /> Number 2</label>
    <label><input type="checkbox" name="plans[]" value="3" /> Number 3</label>
    <label><input type="checkbox" name="plans[]" value="4" /> Number 4</label>
    <input type="submit" />
    </form>
    
    对你有用吗

    另一方面,你可以用不同的方式完成同样的任务。在表单显示和处理中使用相同的文件,这样您就不必从form.php到process.php再回到form.php

    您可以通过检查$\u POST是不是设置()来检测是否应该处理提交的表单


    我不知道这对您是否有意义,但这样可以避免使用会话来完成此操作。

    在将数据传递给会话变量(如array\u pop()或array\u map()之前,请确保未进行任何类型的数据操作。数组映射(strtoupper)破坏数组的原因是strtoupper试图在数组而不是单个元素上执行。要解决此问题,您可以在映射中检查is_数组,然后在其中循环,或者在嵌套数组元素的情况下设置递归函数。

    请参阅我的上一次编辑;打印会话变量会使plans[]数组留空。其他一切都回来了;你怎么说plans数组是空的-它根本不存在,或者它存在但里面没有项目?你能打印一张$的帖子来比较吗?Spoonz-是的,我已经做了。请阅读我的完整编辑上面$_会话返回除plans()之外的所有原始页面变量。如果(在processing.php上)我打印$\u POST,它看起来很好。会话变量被设置为post,所以它不会复制过来,对我来说没有任何意义。对我来说效果很好。您在哪里看到错误发生,或者您在哪里丢失了计划阵列?我自己做了测试,效果很好。但是你不应该使用这个会话,IMO.@iLLin-你建议如何使用PHP将帖子、错误消息等从一个页面传递到另一个页面?你确定会话会在浏览器请求之间保留吗?你在用饼干吗?这完全取决于你的意思?是否存储字段以防出现错误,以便检索值以重新显示?您是否使用多步骤表单,并在最终提交之前分页您的值?请将其静音。只需做一个POST并将其保存到会话并退出即可。然后在页面上打印会话,这样就不会有任何其他内容干扰它。在将数据传递到会话之前,您是否对数据做了任何处理?也许是数组_pop()?谢谢你的建议,这个错误是在别处发现的,我正在等待iLLin给出一个答案来接受,因为他把我的注意力吸引到了我自己的编码问题上(尽管仍然不确定它是为什么引起的)。值得注意的是,有很多很多理由不回发到同一页并将错误验证分开。@JM4很高兴听到您找到了它!然而,你应该说有很多理由不回同一个页面。想提几个吗?因为据我所知,这是一种相当普遍的做法,即使是在常用的框架上也是如此。说实话,几年前,我在一篇解释这个问题的大文章中做了(次要)贡献,但似乎没有遇到它。如果我这样做了,我会花很长时间,但最终:你并没有真正保存任何东西,你仍然在使用同样多的页面重定向,不得不将你发布的变量作为get变量发送到一个定义的标题url。值得注意的是,我不相信Cake或Zend是这样工作的,但我可能是错的。此外,如果在实际处理页面数据时发生错误(超出验证范围),则无论如何都需要将错误抛出到用户的其他地方(无论是在会话变量中还是在其他地方)@JM4如果您在Zend_Form quickstart上签出例如Zend Framework,您将在“组装”部分看到,在控制器页面-登录操作上,它检查是否是POST,验证输入,如果失败,则重新显示表单。对于“您的文档已保存”之类的消息,我倾向于使用会话(Zend Framework中的FlashMessenger)。
    <form method="post" action="l.php" >
    <label><input type="checkbox" name="plans[]" value="1" /> Number 1</label>
    <label><input type="checkbox" name="plans[]" value="2" /> Number 2</label>
    <label><input type="checkbox" name="plans[]" value="3" /> Number 3</label>
    <label><input type="checkbox" name="plans[]" value="4" /> Number 4</label>
    <input type="submit" />
    </form>
    
    <?php
    
    session_start();
    
    $_SESSION['fields'] = $_POST;
    header("Location: o.php");
    
    <?php
    session_start();
    
    var_dump($_SESSION);
    
    array(1) { ["fields"]=> array(1) { ["plans"]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "3" } } }