【问题标题】:Storing form data in session with php使用php在会话中存储表单数据
【发布时间】:2020-01-07 05:15:45
【问题描述】:

我正在测试一个非常基本的 PHP 表单,表单数据保存在会话中。 稍后,我希望该会话数据成为表单的默认值:

<strong>Test Form</strong>
<form action="" method"post">
<input type="text" name="var" value=<?php $name ?>
<input type="submit" name="Submit" value="Submit!" />
</form>

<?php 

 // starting the session
 session_start();


 if (isset($_POST['Submit'])) { 
 $_SESSION['var'] = $_POST['var'];
 $name = $_SESSION['var'];
 }

 echo $name;
?> 

因此,例如,如果我输入“MyName”,它应该回显“MyName”,并且在表单中应该有值“MyName”。实际代码的问题在于它给出了E_NOTICE : type 8 -- Undefined variable: name -- at line 18 错误。我认为变量没有被存储,有人可以帮我解决这个问题吗?

【问题讨论】:

  • notice !== 错误,它只是意味着它没有设置。将你的回声包裹在 isset 中

标签: php forms session


【解决方案1】:

我注意到的第一个错误是这段代码:

<form action="" method"post">

Where方法不包含导致参数post丢失的符号“=”。 此外,“session_start()”函数必须放在任何其他代码之前。从中派生的代码如下:

<?php
// starting the session
session_start();

if (isset($_POST['Submit'])) { 
    $_SESSION['var'] = $_POST['var'];
    $name = $_SESSION['var'];
} else {
    $name = null;
}
?>

<strong>Test Form</strong>
<form action="" method="post" enctype="multipart/form-data">
    <input type="text" name="var" value="<?= ($name != null) ? $name : ''; ?>">
    <input type="submit" name="Submit" value="Submit!" />
</form>

【讨论】:

    【解决方案2】:

    发现了一些东西:

    1. 我会把 session_start();在输出任何内容之前在页面顶部。
    2. 您的方法写错了,它在指定方法时需要一个“=” - 这就是为什么没有存储任何内容,表单没有正确提交的主要原因。
    3. 与您在名称输入中输入值的方式相同 - 它没有“=”并且您没有正确关闭输入标签 - 我将其留空并添加了一个占位符 - 您可以更改它到你需要的。

    这是我的做法:

    <?php session_start(); ?>
    <strong>Test Form</strong>
    <form action="" method="post">
    <input type="text" name="var" value="" placeholder="enter name">
    <input type="submit" name="Submit" value="Submit!" />
    </form>
    <?php
    if (isset($_POST['Submit'])) {
      $_SESSION['var'] = $_POST['var'];
    }
    // Store the session in a variable after the submit - otherwise it will be forgotten on refresh
    $name = $_SESSION['var'];
    // check if session exists
    if(isset($name)) {
      echo $name;
    }
    else {
      echo 'no name entered...';
    }
    ?>
    

    如果名称已提交等,您可以编辑上述内容以隐藏表单。使用 session_destroy();重置存储的会话。

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 2021-02-01
      • 2013-06-10
      • 2011-07-14
      相关资源
      最近更新 更多