将变量传递到三页

时间:2014-05-19 09:28:57

标签: php html forms session post

我想将变量传递出三页。 我目前使用的方法是:

  1. Fist Page有一个表格,例如input type=”text” name=”username”

  2. 第二页使用$_POST函数从第一页上的表单接收输入 例如$username=$_POST[“username”]

  3. 为了保存第一页的信息,我在第二页上创建了一个会话,并将输入存储在其中,例如如下: $_SESSION[“username”]=$username

  4. 然后我导航到第三页并开始我的会话。如果我回显来自会话的存储输入,则服务器返回“未定义变量username”。我猜是这样的,因为变量$ username是定义$_POST[“username”],在这种情况下,该帖子没有输入(在第三页上)。

  5. 我当然尝试使用$username / print()函数转换字符串和/或文本中的变量print_r()。不会改变任何东西。

    是否有人对此问题有任何解决方案或解决方法?

    我想出了一种解决这个问题的不道德的方法:只需使用value=$_POST[“username”]在第二页的第一页上重新创建表单的副本......但我需要这是一个会话,因为这三页不是线性的(换句话说,不是步骤1,2,3,而是步骤1,2,1,3等)。

    如果有帮助:这是一个有三页的注册表(没有密码)。最后,必须能够导航回页面以检查输入(因此需要将数据存储在某处以便在输入字段中调用它)。

    代码页一(输入在表中,左列指定输入的内容,右列指定输入字段):

    <table>
    <tr>
        <td class="table_column_1"><p>Title </p></td>
        <td>
            <p><select name="title" class="dropdown" style="width:145px">
            <option>Bitte waehlen</option>
            <option value="Frau">Mr</option>
            <option value="Herr">Mrs</option>
            </select></p>
        </td>
    <tr>
        <td class="table_column_1"><p>First name: </p></td>
        <td><p><input type="text" name="firstname"</p>
        </td>
    </tr>
    <tr>
        <td><p>Surname: </p></td>
        <td><p><input type="text" name="surname" /></p></td>
    </tr>   
    <tr>
        <td><p>Email: </p></td>
        <td><p><input type="email" name="email" /></p></td>
    </tr>
    <tr>
        <td><p>Company: </p></td>
        <td><p><input type="text" name="company" /></p></td>
    </tr>
    <tr>
        <td class="table_column_1"><p>Department: </p></td>
        <td><p><input type="text" name="department" /></p></td>
    </tr>
    </table>
    

    第二页代码:

    <?php
    
    //Change variable to text/string
    $title=print_r($_POST["title"]);
    $firstname=print_r($_POST["firstname"]);
    $surname=print_r($_POST["surname"]);
    $email=print_r($_POST["email"]);
    $company=print_r($_POST["company"]);
    $department=print_r($_POST["department"]);
    
    if ($title != "Bitte waehlen" && $firstname != "" && $surname != "" && $email != "" && $company != ""  &&$department != ""){
        session_start(1);
        echo "Session: RUNNING";
    
        //list for registration values
        $_SESSION["registration"]="YES";
        $_SESSION["title"]=$title;
        $_SESSION["firstname"]=$firstname;
        $_SESSION["surname"]=$surname;
        $_SESSION["email"]=$email;
        $_SESSION["company"]=$company;
        $_SESSION["department"]=$department;
        //Test session department and variable firstname validity
        echo $_SESSION["department"];
        echo $firstname;
        }
    else{
        session_start(1);
        $_SESSION["registration"]="NO";
        echo "Session: NO";
        header("location: registration.php");
        };
    
    ?>
    

    第三页代码:

    <?php
    
        session_start(1);
        echo "Session: RUNNING";
    
        //Check if session department data is returnable => no
        echo $_SESSION["department"];
    ?>
    

2 个答案:

答案 0 :(得分:1)

据我所知,你使用的是注册全局变量。

现在这是你的第一个错误。不要使用它。只是不要。

然后,您将用户名存储在会话中,现在您可以使用

访问它
$_SESSION['username']

此外,在会话中存储数据时,还需要调用session_start();在为会话分配任何数据之前。

答案 1 :(得分:1)

你必须展示你的代码,但基本上,这应该有效:

session_start();//before ANY output is sent to the client!
if (isset($_POST['username']))
{
    $_SESSION['username'] = $_POST['username'];
}
if (!isset($_SESSION['username']))
{
    //redirect, or present user with error message
}
$username = $_SESSION['username'];

如果已发送该帖子值,则会将$_SESSION['username']设置为$_POST['username']的值,并在所有情况下将$_SESSION['username']的值分配给$username。如果$_POST$_SESSION都没有设置用户名,则会出现意外问题,您应该重定向或向用户显示错误消息...


发布代码后,一些问题变得明显:

  • session_start期待没有参数,您正在传递1
  • session_start只能在未发送标题时调用(即:无输出),您正在调用print_r,这会创建输出。
  • 如果您的脚本只包含PHP,请不要使用结束?>标记(如果您想了解原因,请参阅php.net)
  • 确保在开始<?php代码
  • 之前没有空格
  • 函数返回值的原因是:如果无法创建会话,则session_start会返回false检查返回值

这意味着你的page2.php脚本应该或多或少看起来像这样:

<?php
if (!session_start())
    exit('Output has already been sent!');//check for whitespace, use output buffering...
if (isset($_POST['title']) && $_POST['title'] !== 'Bitte waehlen')
{
    $_SESSION['title'] = $_POST['title'];
    $_SESSION["registration"]="YES";
    //avoid notices, always use isset:
    $_SESSION['firstname'] = isset($_POST['firstname']) ? $_POST['firstname'] : null;
}
else
{
    //form wasn't submitted, or the title was "Bitte waehlen":
    // show error message, or redirect
}