将下拉列表值保存到php会话


Save dropdown list value to php session

我创建了一个下拉列表,该列表由mysqldb中的数据填充,我试图将所选值保存在会话变量中,但我不确定如何编写(***在哪里)?它是否需要发布到服务器端eve,尽管它都在php中?

    <?php
$servername1 = "localhost";
$username1 = "root";
$password1 = "";
$dbname1 = "gpdb1";
$conn1 = new mysqli($servername1, $username1, $password1, $dbname1);
if ($conn1->connect_error) {
die("connection failed: " . $conn1->connect_error);
}
$sql2 = "SELECT DoctorID, Title, Surname FROM doctors";
$result2 = $conn1->query($sql2);
echo "<select name='doctor' value=''><option>Select a Doctor</option>";
if ($result2->num_rows > 0) {
foreach($result2 as $row2) 
{echo "<option value=".$row2['DoctorID'].">".$row2['Title']."     ".$row2['Surname']."</option>"; 
}
}echo "</select>";
$_SESSION['selected']=***;
if (isset($_SESSION['selected'])){
echo $SESSION['selected'];}
?>

感谢:)

首先,我建议您缩进代码,以获得更好的可读性!

标签中的HTML属性"value"没有用处,你可以删除它

然后,使用isset()控制会话字段是没有用的,因为您只是在上面设置了它。

我认为您只需要控制post字段中给定的值是否正确。

您要查找的线路是:

$_SESSION['selected'] = $_POST['doctor'];

首先启用错误报告:

<?php
// Turn off error reporting
error_reporting(0);
// Report runtime errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// Report all errors
error_reporting(E_ALL);
// Same as error_reporting(E_ALL);
ini_set("error_reporting", E_ALL);
// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);
?>

然后,您应该在html代码中正确地设置所有相关的标记,但要实现这一点,您需要在select元素上设置"name"标记。然后确保脚本执行时的html代码看起来像这样(

<!DOCTYPE html>
<html>
<body>
<form action="do_stuff.php">
<select name="doctor">
  <!-- your loop generates this part -->
  <option value="doc1">Doctor 1</option>
  <option value="doc2">Doctor 2</option>
  <option value="doc3">Doctor 3</option>
  <option value="doc4">Doctor 4</option>
</select>
<input type="submit">
</form>
</body>
</html>

在您的php文件中,您应该在检查表单是否提交后检查$_POST['doctor']。然后像@Kern一样,用适当的变量设置$_SESSION['selected']

为了更容易调试,请使用var_dump($variable),它将在大多数情况下帮助您查找琐碎的错误。所以var_dump($_POST)在脚本的开头,以了解发生了什么。