为何无法将表单输入存储到Session中?
嘿,我瞅了下你这段想把表单输入存到Session里的代码,先帮你整理成清晰的格式,再给你揪几个容易踩的坑:
整理后的原代码
<?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> <!-- 原代码截断部分,这里假设包含Streamer #2的输入项 --> </form>
核心问题与修正建议
当前代码的致命问题:你的表单
action指向view.php,但Session赋值的逻辑在index.php里。这意味着表单提交后会直接跳去view.php,根本不会触发index.php里的Session存储逻辑,自然拿不到值!解决办法有两个:- 把表单提交到
index.php,存完Session后再跳转到view.php(推荐,分离逻辑) - 把Session赋值的代码移到
view.php开头
- 把表单提交到
规范细节优化:
- input标签是自闭合标签,不需要写
</input>,改成<input ... />更符合HTML标准 - 直接使用
$_POST会有Undefined Index警告,建议用isset()做存在性检查,还可以用trim()去掉输入的首尾空格 - 在
view.php里必须调用session_start()才能读取Session值,而且要放在任何输出之前
- input标签是自闭合标签,不需要写
修正后的完整示例
index.php(表单页+Session存储)
<?php session_start(); if($_SERVER["REQUEST_METHOD"] == "POST") { // 安全获取POST值,避免警告和多余空格 $_SESSION['str1'] = isset($_POST["streamer1"]) ? trim($_POST["streamer1"]) : ''; $_SESSION['str2'] = isset($_POST["streamer2"]) ? trim($_POST["streamer2"]) : ''; // 存完Session后跳转到查看页,防止表单重复提交 header("Location: view.php"); exit; // 跳转后必须终止脚本执行 } ?> <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="steamerEingabe"> <label class="white-text font-weight-light">Streamer #1</label> <center><input type="text" name="streamer1" class="form-control" /></center><br> <label class="white-text font-weight-light">Streamer #2</label> <center><input type="text" name="streamer2" class="form-control" /></center><br> <center><button type="submit" class="btn btn-primary">提交</button></center> </form>
view.php(查看Session值)
<?php session_start(); // 安全读取Session值,默认显示"未输入" $streamer1 = isset($_SESSION['str1']) ? $_SESSION['str1'] : '未输入'; $streamer2 = isset($_SESSION['str2']) ? $_SESSION['str2'] : '未输入'; ?> <!DOCTYPE html> <html> <head> <title>查看Streamer</title> </head> <body> <h3>你提交的Streamer信息:</h3> <p>Streamer #1: <?php echo htmlspecialchars($streamer1); ?></p> <p>Streamer #2: <?php echo htmlspecialchars($streamer2); ?></p> </body> </html>
注意:用
htmlspecialchars()输出用户输入可以防止XSS攻击,这是前端输出的基本安全规范哦!
内容的提问来源于stack exchange,提问作者Solu
相关产品推荐
相关产品推荐

