PHP - 无法在函数调用之间访问全局数组值

时间:2014-03-18 02:42:01

标签: php html forms

我正在尝试构建一个分布在三个页面上的简单HTML表单。第一页询问用户的名字和姓氏。第二页要求他的国家&他是否愿意收到更多信息。在第三页中,显示用户输入的所有信息

第一页有一个名为“Next”的按钮,用于转到第二页。第二页有两个按钮,名为“完成”以进入最后一页,“后退”按钮返回第一页。

我使用名为“data”的全局数组来保存用户在每个页面上输入的值。

问题是,我无法访问最终页面中的所有数组值。当我尝试访问值时,仅显示在第二页中选择的国家/地区。即使我将这些值存储在数组中,也不会显示在第一页中输入的名字和姓氏。

如何在最终页面上显示所有输入的值?

这是我的代码:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<body>

    <?php
        $data=array();
    ?>

    <?php
        if(!isset($_POST['next1']) && !isset($_POST['next2']) && !isset($_POST['back1']))
            Display1();
        else if(isset($_POST['next1']))
        {   
            global $data;
            array_push($data, $_POST['text1']);
            array_push($data, $_POST['text2']);
            Display2();
        }
        else if(isset($_POST['back1']))
        {
            Display1();
        }
        else if(isset($_POST['next2']))
        {
            global $data;
            $country=$_POST['country'];
            foreach($country as $x)
                array_push($data, $x);
            Display3();
        }
    ?>
    <?php
        function Display1()
        {
    ?>
    <form id="form1" action="Multi.php" method="post">
    <label>Enter First Name: </label>
    <input type="text" name="text1"  />
    <br />
    <br />
    <label>Enter Last Name: </label>
    <input type="text" name="text2"  />
    <br />
    <br />
    <input type="submit" name="next1" value="Next" />
    <?php
    }

    function Display2()
    {
    ?>
        <form id="form2" action="Multi.php" method="post">
        Select Country
        <select name="country[]" multiple="multiple">
        <option value="India">India</option>
        <option value="USA">USA</option>
        <option value="China">China</option>
        </select>
        <br />
        <br />
        <input type="submit" name="next2" value="Finish" />
        <input type="submit" name="back1" value="Back" />
    <?php
    }
    function Display3()
    {
        global $data;
        foreach($data as $x)
            echo $x . "<br>";
    }
    ?>
</body>
</html>

2 个答案:

答案 0 :(得分:2)

请求之间不保留正常变量,请求彼此独立。

使用隐藏的输入字段添加所有内容(您可以通过$_POST然后访问它们)或使用session_start()开始会话并将其保存在$_SESSION中。确保在最顶层开始会话,之前一定不能发送单个字节!

答案 1 :(得分:-1)

对于在所有函数之外声明的任何变量,使用$GLOBALS['data']; 希望这就是你要找的东西。