我找到了一个将表单中的输入字段存储到会话数据的示例,但无法弄清楚如何从表单的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>
任何帮助都会很棒。谢谢!
答案 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()
根据通过GET
或POST
请求传递的会话标识符创建会话或恢复当前会话,或通过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 :(得分: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>