将数据从表单存储为会话作为变量

时间:2016-10-10 14:37:26

标签: php html

我找到了一个将表单中的输入字段存储到会话数据的示例,但无法弄清楚如何从表单的select / option字段存储选定的字段。我目前有:

<strong>Choose your model:</strong>
   <form action="" method="post">
       <select name="cars">
        <option value="camry" name="camry">Camry</option>
        <option value="corolla" name="corolla">Corolla</option>
        <option value="rav4" name="rav4">RAV4</option>
        <option value="tacoma" name="tacoma">Tacoma</option>
    </select>

    <input type="submit" name="Submit" value="Submit!" />
</form>


<?php 

// starting the session
session_start();

这是我感到困惑的地方:

if (isset($_POST['Submit'])) { 
  $_SESSION['cars'] = $_POST['cars'];
  } 
?> 

<strong><?php echo $_SESSION['cars'];?></strong>

任何帮助都会很棒。谢谢!

3 个答案:

答案 0 :(得分:2)

您的代码不包含任何错误,它将正常工作。

  

您可以在调用代码时使用isset(),从而避免显示在浏览器中的错误。

<强>替换

<strong><?php echo $_SESSION['cars'];?></strong>

。通过

<?php
session_start();
ob_start();
error_reporting(0);// This will depreciate all errors  
if(isset($_SESSION['cars']))
{
echo '<strong>'.$_SESSION['cars'].'</strong>';
}
else
{
// Handle failure over here
}
?>
  

但正如您在you have got confused提到的那样session()解释了会话以及您在下面使用过的表单属性。

说明

将为您提供有关流程发生情况的明确说明。

<强>一:

if (isset($_POST['Submit'])) {}

这将处理表单提交操作。提交表单后,将执行此操作。

如果提交按钮的名称应为name="Submit",则会在提交表单时触发此操作。

<强>两个

<select name="cars"></select>

当您需要在提交表单后提取数据时,您需要提供select标记的名称,然后单独您可以从正在选择的选项中获取数据。

<强>三

<option value="camry" name="camry">Camry</option>

选项不包含HTML中的名称,您必须删除您为选项标记提供的名称。

<强>四

在这一切结束之后,我们现在开始使用PHP中的session_start()

session_start - 开始新会话或恢复现有会话。

session_start()根据通过GETPOST请求传递的会话标识符创建会话或恢复当前会话,或通过cookie传递。

当调用session_start()或会话自动启动时,PHP将调用open和read会话保存处理程序。这些将是默认提供的内置保存处理程序或PHP扩展(如SQLite或Memcached);或者可以是session_set_save_handler()定义的自定义处理程序。读取回调将检索任何现有的会话数据(以特殊的序列化格式存储),并且将被反序列化并用于在读取回调将已保存的会话数据返回到PHP会话处理时自动填充$ _SESSION超全局。

要使用命名会话,请在致电session_name()之前致电session_start()

当启用session.use_trans_sid时,session_start()函数将注册一个内部输出处理程序以进行URL重写。

参考:http://php.net/manual/en/function.session-start.php

  

如何在PHP脚本中使用会话

  1. 开始会话
  2. 存储和访问变量
  3. 结束会话

答案 1 :(得分:0)

提交<form>时,仅发布<select>中的选定值。这是您在$_POST['cars']中获得所选值的方法。

答案 2 :(得分:0)

正如其他人所说,选项不应该有名称。 您的代码按预期工作。按提交后,$_POST数据将写入$_SESSION变量。然后,选择框将重置为 camry ,因为HTML为stateless protocol

如果你想使用会话变量,

session_start()也应该是第一行。

包装起来:

<?php
session_start();
?>

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <strong>Choose your model:</strong>

    <?php
    $cars = ["camry", "corolla", "rav4", "tacoma"];
    ?>        
    <form action="" method="post">
        <?php
        if (isset($_POST['Submit'])) {
            $_SESSION['cars'] = $_POST['cars'];
        }
        ?>
        <select name="cars">
            <?php
            foreach ($cars as $car) {
                $selected = "";
                if (isset($_SESSION['cars']) && $_SESSION['cars'] == $car) {
                    $selected = "selected='selected'";
                }
                // select car based on session variable
                echo "<option value='$car' $selected>$car</option>";
            }
            ?>
        </select>

        <input type="submit" name="Submit" value="Submit!" />
    </form>

    <strong>
        <?php if (isset($_SESSION['cars'])) {
            echo $_SESSION['cars'];
            ?>
        }
    </strong>
</body>