Php 提交后如何重新填充动态生成的表单选择字段?

Php 提交后如何重新填充动态生成的表单选择字段?,php,html,mysql,forms,select,Php,Html,Mysql,Forms,Select,因此,我有如下代码片段所示的表单 tl;dr-form有一个select字段,该字段使用不同的sql查询从数据库表中动态获取其选项,并在提交时向表中插入新行,然后返回表单 问题-提交和插入后,下拉选择字段不会显示最新添加的选项,即使该行已添加到表中。我必须手动刷新页面,以获得下拉列表,使最新的选项可用 请帮助我解决这个问题,因为我不想每次添加新数据项时都加载此页面 如何在每次成功提交后强制表单重新填充select字段 <form method="POST" action=""> &l

因此,我有如下代码片段所示的表单

tl;dr-form有一个select字段,该字段使用不同的sql查询从数据库表中动态获取其选项,并在提交时向表中插入新行,然后返回表单

问题-提交和插入后,下拉选择字段不会显示最新添加的选项,即使该行已添加到表中。我必须手动刷新页面,以获得下拉列表,使最新的选项可用

请帮助我解决这个问题,因为我不想每次添加新数据项时都加载此页面

如何在每次成功提交后强制表单重新填充select字段

<form method="POST" action="">
<?php 
 $lsql = 'SELECT distinct(location) FROM some_table';
 $result = mysql_query($lsql);
?>
 <select class="field" name="locations" onchange="showfield(this.options[this.selectedIndex].value)">

 <?php while($row = mysql_fetch_array($result)) { 
 $key = str_replace(',', '', $row['location']);
 $key = str_replace(' ', '', $key);
 $loc = $row['location'];
 $locations[$key] = $loc;
 echo '<option value="'.$key.'">'.$loc.'</option>';
 }
 ?>
 <option value="other">Other</option>
 </select>
 <div id="otherloc"></div>

<?php 
if (isset($_POST['newjob'])) {
// getting form data
$location = $_POST['location'];
$other = $_POST['other'];
$jlocation = ($locations[$jlocation])? $locations[$jlocation] : $jother;

// Then, get all the fields data and insert into a database table

header('Location: ' . $_SERVER['PHP_SELF']);

}
?>

其他

showfield()是一个javascript函数,当在下拉列表中选择“Other”选项时,它会在“otherloc”div中添加一个输入文本字段。insert更改了相同的表,因此每次重新加载表单时,我都需要获得新的不同位置。

检查错误日志,看看是否一切正常。我怀疑
标题(…)
不起作用。在创建SELECT../P>< P>之前,您可以考虑将位置插入到数据库中。



我想它会帮助你

hmmm我想这已经发生了,在插入后执行
header('Location:…
),你的
header(“…
work?另一种方法是在select之前执行insert,但由于各种原因,标头的内容更好。uuups标头无法工作,因为在发送标头之前执行了一些输出。执行
if(isset($\u POST['newjob')){…
在您的输出之前。@steven-标题工作正常,我在目录结构中尝试了各种页面,它重定向正确。我将isset部分放在顶部,因为@nothing提醒了我,它现在工作正常。谢谢大家。我知道我一直这样做是有原因的,但无论出于什么原因,我将它放在下面一次,并且可以没有看到明显的缺陷。是的,你是对的。他在发送标题之前做了一些输出。这是我要求的类似urs的东西。它有效,但我在会话开始后将该部分放在顶部。我也喜欢这种方式,因为我不喜欢把它放在正文中的某个地方。它会弄乱格式,并使滚动到html的其他部分变得烦人。不过,谢谢。如果我清楚,那么你可以将If语句放在表单之前,在表单之前显示错误。而且你可以将它放在正文中的任何地方,它不会对你造成任何伤害或者,若你们把标题放进去,那个么它可能会分散你们的设计