#php
#php
Вопрос:
Ниже приведен мой полный код для заполнения списка состояний на основе выбранной страны. Когда я выбираю любую страну из выпадающего списка country, он возвращает правильный список состояний в раскрывающемся списке states. Эта часть работает нормально.
Когда я выбираю страну США, выпадающий список штатов заполняется штатами США, а по умолчанию выбрано выбранное состояние Alska
. Теперь, если я изменю значение состояния с Alaska
на «Техас» и отправлю форму, он просто отправит значение 0 на страницу отправки.
Я думаю, что это значение 0 поступает из <option value="0">-- Select State --</option>
in id=before_get_state
. Итак, как я могу решить эту проблему? Пожалуйста, помогите.
Выпадающий список стран
GetRecordSet
используется для извлечения записей из базы данных MySQL
CheckSelected
используется для отображения определенного значения в качестве выбранного значения по умолчанию в выпадающем списке
<form name="frm_shipping_address" id="frm_shipping_address" novalidate>
<div class="control-group form-group">
<div class="controls">
<label>Select Country</label><span class="text-help-form"> * </span>
<?php
$str_query_select="";
$str_query_select="SELECT * FROM " .$STR_DB_TABLE_NAME_COUNTRY. " WHERE visible='YES' ORDER BY title ASC";
$rs_list_country=GetRecordSet($str_query_select);
?>
<select name="cbo_country" id="cbo_country" class="form-control" onChange="get_state(this.value);" required="" data-validation-required-message="Select Country" >
<option value="0">-- Select Country --</option>
<?php
while(!$rs_list_country->EOF()==true) { ?>
<option value="<?php print($rs_list_country->fields("pkid"))?>" <?php print(CheckSelected($rs_list_country->fields("pkid"),$int_user_countrypkid)); ?>><?php print($rs_list_country->fields("title")); ?></option>
<?php $rs_list_country->MoveNext(); } ?>
</select>
</div>
</div>
<button id="btn_continue" class="btn btn-primary btn-lg btn-block"><b>SUBMITamp;nbsp;</b></button>
</form>
Выпадающий список состояний
<div class="control-group form-group">
<div class="controls">
<label>Select State</label><span class="text-help-form"> * </span>
<div id="before_get_state">
<select name="cbo_state" id="cbo_state" class="form-control">
<option value="0">-- Select State --</option>
</select>
</div>
<div id="after_get_state"></div>
</div>
</div>
jQuery / AJAX
jquery.min.js
jqBootstrapValidation.js
файлы включены в страницу
<script>
function get_state(countrypkid) {
var int_countrypkid = countrypkid;
var dataString = "countrypkid=" int_countrypkid;
$.ajax({
type: "POST",
url: "./product_address_get_state_p.php",
data: dataString,
success: function(html)
{
$("#before_get_state").hide();
$("#after_get_state").html(html);
}
});
}
</script>
product_address_get_state_p.php Код страницы
$int_statepkid = 0;
if(isset($_SESSION['userpkid']) amp;amp; $_SESSION['userpkid'] != "")
{
$str_query_select = "SELECT statepkid FROM t_user WHERE pkid=".$_SESSION['userpkid'];
$rs_list_user = GetRecordSet($str_query_select);
$int_statepkid = $rs_list_user->fields("statepkid");
}
$int_countrypkid = 0;
if(isset($_POST["countrypkid"]))
{
$int_countrypkid = trim($_POST["countrypkid"]);
}
$str_query_select = "SELECT * FROM " .$STR_DB_TABLE_NAME_STATE. " WHERE masterpkid=".$int_countrypkid." AND visible='YES' ORDER BY title ASC";
$rs_list_state = GetRecordSet($str_query_select);
echo "<select class='form-control' name='cbo_state' id='cbo_state'>";
while(!$rs_list_state->EOF()==true)
{
echo "<option value='" .$rs_list_state->fields('pkid'). "' ".CheckSelected($rs_list_state->fields('pkid'),$int_statepkid).">".$rs_list_state->fields('title')."</option>";
$rs_list_state->MoveNext();
}
echo "</select>";
Комментарии:
1. Я бы просто сделал
$("#before_get_state").html(html);
и удалил$("#after_get_state").html(html);
and<div id="after_get_state"></div>
. Затем проверьте элементselect
после того, как вы задали страну, и посмотрите, каковы значения состояний.2. Я также должен отметить, что вы не должны помещать значения, представленные пользователем, прямо в sql-запрос. Вы открыты для SQL-инъекций. Посмотрите на параметры / значения привязки.