我正在从数据库中填充一个组合框,问题是当我从组合框中选择一个项目并尝试保存到数据库中的另一个表时,它会选择记录ID列而不是项目本身。 这就是填充组合框的方式。
<label>State</label>
<select name="state" class="state" onChange="display(this.value)" width="142" style="width: 142px">
<option value="" selected="selected">-- Select State --</option>
<?php
$query="select * from tbl_state";
$query_result=mysql_query($query)or mysql_error();
while($row=mysql_fetch_array($query_result))
{
?>
<option value="<?php echo $row['id']; ?>"><?php echo $row['state_name']; ?></option>
<?php
}
?>
</select>
<div id="show_city" style="position: relative" height:5px;>
<label>LGA</label>
<select name="city" class="lga" width="142" style="width: 142px">
<option value="" selected="selected">-- Select LGA --</option>
</select>
</div>
</p>
数据库连接
$state = $_POST['state'];
$city = $_POST['city'];
$sql="INSERT INTO members (state, city)
VALUES ('$state', '$city')";
NB。我正在使用javascript来填充组合框。
答案 0 :(得分:1)
提交表单时,只会发送字段名称及其值。在您的情况下,当用户选择状态并按提交时,将在您在选项值标记处指定行ID时发送行ID。
您可以使用<option value="<?= $row['state_name'] ?>"> ... </option>"
然后直接获取状态名称ini php:
$state = $_POST['state'];
或保留现有的填充代码,并通过使用记录ID查询数据库来获取州名。
$state_id = intval($_POST['state']);
$city_id = intval($_POST['city']);
$sql = "SELECT `state_name` FROM tbl_state WHERE id=$state_id";
$query_result = mysql_query($sql) or mysql_error();
$state = mysql_result($query_result, 0);
echo $state;
getcity.php
<?php
$con=mysql_connect('localhost','root','') or die('Mysql not connected');
mysql_select_db('thriftdb',$con) or die('DataBase not connected');
$state_id=$_REQUEST['state_id'];
$query="select * from lga where state_id='$state_id'";
?>
<label>LGA</label>
<select name="city" width="142" style="width: 142px">
<option value="" selected="selected">-- Select LGA --</option>
<?php
$query_result=mysql_query($query)or mysql_error();
while($row=mysql_fetch_array($query_result))
{
?>
<option value="<?php echo $row['id']; ?>"><?php echo $row['lga_name']; ?></option>
<?php
}
?>
</select>
数据库结构如下 'lga'表有......
lga_id --- state_id --- lga_name
'州'表有
state_id --- state_name
答案 1 :(得分:0)
当表单发送组合的所选项时,它会发送所选选项的值,而不是文本。如果要发送文本,请为每个组合添加隐藏输入,然后在组合的onclick事件中,调用将文本填充到隐藏输入的函数。
selectState = function() {
$('#hiddenInputField').val($("select[name='state'] option:selected").text());
}
然后在服务器端,您必须获取输入隐藏字段的值,而不是选择字段。