【发布时间】:2019-02-26 18:23:59
【问题描述】:
在我的代码中,我有两个表单供用户选择选项。第一个变量将保存,但一旦用户提交第二个表单,第一个表单中的变量将不再保存。
<div class = "school">
<h3>Please select the university you previously attended</h3>
<form action = "" method = "post" name = "school_form">
<select name="school" size ="10">
<?php
//shows options for $selected_school
$sql = "SELECT DISTINCT school FROM data;";
$result = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result);
if ($resultCheck > 0){
while($row = mysqli_fetch_assoc($result)){
// inserts all data as array
echo "<option>". $row['school'] ."</option>";
}
}
?>
</select>
<br>
<input type ="submit" name = "submit_school" value = "Enter">
</form>
<?php
//saves selected option as $selected_school
if(isset($_POST['submit_school'])){
$selected_school = mysqli_real_escape_string($conn, $_POST['school']);
echo "You have selected: " .$selected_school;
}
?>
</div>
<div class ="courses">
<h3>Please select the courses you took</h3>
<form action = "" method ="post" name ="course_form">
<?php
//user shown options for courses
$sql2 = "SELECT transfer_course, transfer_title FROM data WHERE school = ? ORDER BY transfer_course ASC";
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql2)) {
echo "SQL statement failed";
} else {
mysqli_stmt_bind_param($stmt, "s", $selected_school);
mysqli_stmt_execute($stmt);
$result2 = mysqli_stmt_get_result($stmt);
while($row2 = mysqli_fetch_assoc($result2)){
echo "<input type='checkbox' name ='boxes[]' value = '" . $row2['transfer_course'] . "' >" . $row2['transfer_course'] . "<br>";
}
}
?>
<br>
<input type ="submit" name = "submit_courses" value = "Enter">
</form>
<br>
<?php
//saved selected option(s) as $selected_course
if(isset($_POST['submit_courses'])){//to run PHP script on submit
if(!empty($_POST['boxes'])){
foreach($_POST['boxes'] as $selected_course){
echo "You have selected: " . $selected_course . "</br>";
}
}
}
?>
</div>
<div class = "output">
<h3>Course Equivalency</h3>
<?php
$sql3 = "SELECT arcadia_course, arcadia_title FROM data WHERE school = " . $selected_school . " AND transfer_course = " . $selected_course . "";
$result3 = mysqli_query($conn, $sql3);
if($result3)
{
while($row3 = mysqli_fetch_assoc($result3)){
echo $row3['arcadia_course'] . " " . $row3['arcadia_title'] . "<br>";
}
} else {
echo "failed";
echo $sql3;
}
?>
所以当我进入下一条 sql 语句时
$sql3 = "SELECT arcadia_course, arcadia_title FROM data WHERE school = " . $selected_school . " AND transfer_course = " . $selected_course . "";
选择学校时会保存变量,但选择课程后$selected_school又变成空白了。
我已经在页面顶部设置了 session_start()。
【问题讨论】:
-
您的表单代码在哪里?
-
@Swati 它的 html 代码我省略了以使其更易于阅读。我在php代码周围有“
-
您的第二个表单也需要在它的帖子中传递
selected_school变量(可能在隐藏的表单字段中)。此处的客户端在提交第二个表单时刷新页面,并且在刷新时它必须携带该值,否则它会丢失。 -
@JNevill 我该怎么做?
-
这完全是老派,也许现在有更好的方法可以做到这一点,但您可以使用
<input type="hidden">来保存该值,这样您就可以在它命中时从$_POST[]中获取它你的服务器。本质上,您正在创建发送给客户端的 HTML,客户端正在使用第二种形式,并且所有这些都通过回发提交到您的服务器。如果它不在那个帖子中或隐藏在会话变量中(我认为),那么它就会丢失。向表单添加一个隐藏的输入以保存该值,使其返回POST应该在这里工作。 (除非我误解了这个问题)。