为什么我无法在会话中存储表单输入?

时间:2018-03-19 19:51:31

标签: php

我试图在会话中保存表单中的输入。我在index.php中有这段代码:

<?php
session_start();

if($_SERVER["REQUEST_METHOD"] == "POST")
{
    $_SESSION['str1'] = $_POST["streamer1"];
    $_SESSION['str2']   = $_POST["streamer2"];
} 
?>

<form method="post" action="view.php" id="steamerEingabe">      
    <label class="white-text font-weight-light">Streamer #1</label>
    <center><input type="text" name="streamer1" class="form-control"></input></center><br>

    <label class="white-text font-weight-light">Streamer #2</label>
    <center><input type="text" name="streamer2" class="form-control"></input></center><br>

    <button type="submit" class="btn btn-outline-cyan">Watch Now</button>  
</form>

现在我想在我的view.php中使用这个会话:

<?php
session_start();

echo $_SESSION['str1'];
echo $_SESSION['str2'];   
session_destroy();
?>

但这不起作用。我收到这些错误

Notice: Undefined index: str1 in /var/www/vhosts/default/htdocs/multistream/view.php on line 4

Notice: Undefined index: str2 in /var/www/vhosts/default/htdocs/multistream/view.php on line 5

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

看起来问题是:action="view.php"

您的表单直接提交给view.php,但设置会话值的代码与表单位于同一文件中。

相反,您可以将表单提交到同一页面(index.php),并在提交表单后设置会话值后重定向到view.php。

<?php
session_start();

if ($_SERVER["REQUEST_METHOD"] == "POST")
{
    $_SESSION['str1'] = $_POST["streamer1"];
    $_SESSION['str2']   = $_POST["streamer2"];
    header('Location: view.php');                // redirect after setting session values
}
?>

             <!-- submit to self -->
<form method="post" action="" id="steamerEingabe">
    <label class="white-text font-weight-light">Streamer #1</label>
    <center><input type="text" name="streamer1" class="form-control"></input></center><br>

    <label class="white-text font-weight-light">Streamer #2</label>
    <center><input type="text" name="streamer2" class="form-control"></input></center><br>

    <button type="submit" class="btn btn-outline-cyan">Watch Now</button>
</form>

如果进行了这些更改,view.php应该按预期工作。但是在使用它们之前,您仍应检查这些会话值是否已设置。如果你直接去view.php而不在index.php中提交表格,他们可能不会在那里。