我创建了一个下拉列表,该列表由来自mysql db的数据填充,我试图将所选值保存在会话变量中,但我不知道如何写这个(***在哪里)?是否需要将其发布到服务器端,尽管它全部都在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'];}
?>
谢谢:)
答案 0 :(得分:0)
首先,我建议您缩进代码,以提高可读性!
HTML属性&#34;值&#34;在您的代码中没有用处,您可以删除它。
然后,使用isset()控制会话字段没有用,因为您正在上面设置它。
我认为您只需控制帖子字段中的给定值是否正确。
您要寻找的是:
$_SESSION['selected'] = $_POST['doctor'];
答案 1 :(得分:0)
首先启用错误报告:
<?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)找出发生了什么。