Один выпадающий список в зависимости от другого - PullRequest
0 голосов
/ 22 сентября 2011

Я разрабатываю веб-страницу php, которая содержит два выпадающих списка (выберите теги), так как один из них используется для отображения типов автомобилей, таких как Toyota, Nissan, Chevrolet и т. Д.

Toyota
Nissan
Chevrolet

Другой должен бытьиспользуется для отображения моделей автомобилей, таких как Toyota Camry, Toyota Corrolla, Toyota Cressida, Toyota Eco и сын, при переходе на тип автомобиля, выбранный из первого выпадающего списка.

Я использую PHP в качестве языка разработки плюс Sybase в качестве базы данных иЯ подключаюсь к нему с помощью ODBC.Я использую Windows-1256 в качестве кодировки символов, так как мои отображаемые данные отображаются на арабском языке.

Я пытаюсь использовать Ajax для реализации этого, но я не знаю, как раньше я использовал Ajax, чтобы вернуть только одно значение, но в этом случае янужно ответить с некоторыми записями базы данных в следующем формате: -

15 "Toyota Camry"
16 "Toyota Corrolla"
17 "Toyota Cressida"
18 "Toyota Eco"

плюс, что данные отправляются на арабском языке, а не на английском, как указано выше, поэтому список может быть следующим: -

15 "تويوتا كامري"
16 "تويوتا كرولا"
17 "تويوتا كرسيدا"
18 "تويوتا إيكو"

как я могу это сделать с помощью Ajax и убедиться, что текст на арабском языке будет отображаться хорошо?

Я жду вашего ответа и помощи и заранее Спасибо .....

Мой код написан ниже, чтобы сделать вещи более понятными и быть полезными для других и получить правильный ответ:

Первый файл

showCarData.php File (Saved as ANSI PHP File)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256" />
<script src="js/jquery-1.3.2.min.js" type="text/javascript" /></script>
<script type="text/javascript"> 
$(document).ready(function()
{ 
$('#selectCarType').change(function ()
{ 
$('#selectCarModel option').remove();
$.ajax(
{
url: "getCarModels.php", 
dataType: 'json', 
data: { CarType: $('#selectCarType').val() }, 
async: true,
success: function(result)
{   
//var x = eval(result);
$.each(result, function(key, value) { $('#selectCarModel').append('<option value="' + key + '">' + value + '</option>'); } );
}
});
$('#selectCarModel').show(); 
});
});
</script> 
</head>
<body>
<select id="selectCarType">     
<option value="0" selected="selected">select car type</option>
<?php
//Connecting To The Database and getting $conn Variable       
$conn = odbc_connect("database","username","password");
//Connection Check
if (!$conn)
{
echo "Database Connection Error: " . $conn;
}
$sqlCarTypes = "SELECT DISTINCT CarTypeID AS CarTypeCode, CarTypeDesc AS CarTypeName FROM tableCarTypes ORDER BY CarTypeDesc ASC";
$rsCarTypes = odbc_exec($conn,$sqlCarTypes);
if (!$rsCarTypes)
{
echo "<option class='CarType' value='n' >Not Available</option>";
}                                   
else
{                                   
while ( odbc_fetch_row($rsCarTypes) )
{
//Assigning The Database Result Set Rows To User-Defined Varaiables
$CarTypeCode = odbc_result($rsCarTypes,"CarTypeCode");
$CarTypeName = odbc_result($rsCarTypes,"CarTypeName");
//Creating the options
echo '<option class="CarType" style="color:#060;" value="'. $CarTypeCode . '"';
echo '>' . $CarTypeName . '</option>' . "\n";               
}                                   
}
odbc_close($conn);
?>
</select>
<select id="selectCarModel">        
<option value="0" selected="selected">select car model</option>
</select>
</body>
</html>

и другой файл

getCarModels.php File (Saved as ANSI PHP File)

<?PHP
//determine the Characterset
header('Content-Type: text/html; charset=windows-1256');

//Recieve CarType variable
$CarType =  $_GET['CarType'];
// initialize an array that will hold the rows 
$result = array();

if ($CarType != Null)
{
//Connecting To The Database and getting $conn Variable       
$conn = odbc_connect("database","username","password");
//Connection Check
if (!$conn)
{
echo "Database Connection Error: " . $conn;
}
$sqlCarModels = "SELECT DISTINCT CarModelID AS CarModelCode, CarModelDesc AS CarModelName FROM tableCarTypes WHERE CarTypeID='$CarType' ORDER BY CarModelDesc ASC ";
$rsCarModels  = odbc_exec($conn,$sqlCarModels);
if ( $rsCarModels )
{
while ( odbc_fetch_row($rsCarModels) )
{
$CarModelCode = odbc_result($rsCarModels,"CarModelCode");
$CarModelName = odbc_result($rsCarModels,"CarModelName");
$CarModelName = utf8_encode($CarModelName);
$result [$CarModelCode] = $CarModelName;
}
}
else
{
echo "No Data";
}
odbc_close($conn);
}
//send the result in json encoding
echo json_encode($result);
?>

Я надеюсь, что это ясно, о чем я спрашивал, и что любой мог помочь мне найти, где находитсяошибка или вещь, которую я пропускаю, чтобы получить вывод в правильном формате вместостранных символов и символов, которые не могут быть прочитаны, как показано во втором раскрывающемся списке.

Заранее спасибо

1 Ответ

1 голос
/ 22 сентября 2011

В таком сценарии я делаю следующее:

  1. Я создаю первый выпадающий список на сервере, например, PHP while по категориям автомобилей из базы данных.Я помещаю id категории как value из option.Полученный HTML должен выглядеть примерно так:

    Toyota Nissan Chevrolet ...

  2. Затем на странице с JavaScript я прослушиваю onchange событие выбора и когда происходит отправка категории id насервер

  3. PHP-код на сервере выбирает категорию id и составляет SELECT your_cols FROM product_table WHERE cat_id = $_GET['id'].Отправьте результат как JSON с json_encode

  4. Наконец, проанализируйте возвращенные данные с помощью JavaScritp и заполните выпадающий список модели.

ЗдесьВот как в основном может выглядеть клиентский скрипт:

<script type="text/javascript">
$(document).ready(function() {
    $('#cars-categories').change(function () {
        $('#car-models option').remove();
        $.ajax({
            url: "get_data.php",
            dataType: 'json',
            data: { category: $('#cars-categories').val() },
            async: true,
            success: function(json){
                $.each(json, function(key, value){
                    $('#car-models').append('<option value="' + value.id + '">' + value.name + '</option>');
                });
            }
        });
        $('#car-models').show();
    });
});
</script>

Кодировка не должна быть проблемой.

РЕДАКТИРОВАТЬ: По просьбе автора вопроса,Вот простой способ получить все строки из запроса к БД и отправить их обратно на страницу в виде строки в кодировке JSON.

<?php
// connect to DB
...
// initialize an array that will hold the rows
$rows = array();
// sanitize the category id. since it is an int, it is safest just to cast it to an integer
$cat_id = (int)$_GET['category'];
$result = mysql_query("SELECT id, name FROM `models` WHERE cat_id = $cat_id");
while($row = mysql_fetch_assoc()){
   $rows[] = $row;
}
// do a regular print out. It is not going to the screen but will be returned as JavaScript object
echo json_encode($rows);
// you have to exit the script (or at least should not print anything else)
exit;
?>
...