Я изучаю html и php, у меня есть сотрудники mysql DB, где есть таблица под названием Employees_hired, в которой хранятся идентификатор, имя, отдел и тип контракта. Я хочу создать раскрывающийся список сотрудников, которые относятся к типу отдела и конкретному типу контракта. В коде будет что-то вроде:
<html>
<head>
<title>Dynamic Drop Down List</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="<?php $_SERVER['PHP_SELF']?>">
department:
<select id="department" name="department" onchange="run()"> <!--Call run() function-->
<option value="biology">biology</option>
<option value="chemestry">chemestry</option>
<option value="physic">physic</option>
<option value="math">math</option>
</select><br><br>
type_hire:
<select id="type_hire" name="type_hire" onchange="run()"> <!--Call run() function-->
<option value="internal">Intenal</option>
<option value="external">External</option>
</select><br><br>
list of employees:
<select name='employees'>
<option value="">--- Select ---</option>
<?php
mysql_connect("localhost","root","");
mysql_select_db("employees_hired");
$list=mysql_query("SELECT name FROM usuario WHERE (department ='". $value_of_department_list ."') AND (contrasena ='". $value_of_type_hire."')";);
while($row_list=mysql_fetch_assoc($list)){
?>
<option value="<?php echo $row_list['name']; ?>">
<?php if($row_list['name']==$select){ echo $row_list['name']; } ?>
</option>
<?php
}
?>
</select>
</form>
</body>
</html>
У меня есть вопрос: как получить выбранные значения из первых раскрывающихся списков (type_hire и department) для использования в запросе и заполнить выпадающий список сотрудников. Я знаю, как заполнить выпадающий список, запросив БД (что я узнал в онлайн-курсе), но я не знаю, как принимать значения из выпадающих списков и использовать их в своей практике. Я прочитал, что могу использовать "document.getElementById(" id "). Значение", чтобы указать это значение переменной в запросе, но нигде не объяснено подробно. Я новичок в веб-программировании, и мои знания Javascript плохи. Может ли кто-нибудь сказать мне лучший способ сделать это? Можно ли использовать только html и php, или я должен использовать javascript?
Heres измененная версия jQuery вашего кода. (С некоторой очисткой)
<html>
<head>
<title>Dynamic Drop Down List</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="<? $_SERVER['PHP_SELF']?>">
department:
<select id="department" name="department" onchange="run()">
<!--Call run() function-->
<option value="biology">biology</option>
<option value="chemestry">chemestry</option>
<option value="physic">physic</option>
<option value="math">math</option>
</select><br><br>
type_hire:
<select id="type_hire" name="type_hire" onchange="run()">
<!--Call run() function-->
<option value="internal">Intenal</option>
<option value="external">External</option>
</select><br><br>
list of employees:
<select name='employees'>
<option value="">--- Select ---</option>
<?php
mysql_connect("localhost","root","");
mysql_select_db("employees_hired");
$list=mysql_query("SELECT name FROM usuario WHERE (department ='". $value_of_department_list ."') AND (contrasena ='". $value_of_type_hire."')";);
while($row_list=mysql_fetch_assoc($list)){
?>
<option value="<?php echo $row_list['name']; ?>">
<? if($row_list['name']==$select){ echo $row_list['name']; } ?>
</option>
<?php
}
?>
</select>
</form>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<!--[ I'M GOING TO INCLUDE THE SCRIPT PART DOWN BELOW ]-->
</body>
</html>
Теперь я очистил теги и добавил hotlink для jQuery, используя бесплатный cdn googleapis. Далее - фактический javascript. Btw. НЕ ИСПОЛЬЗУЙТЕ MYSQL_ * ФУНКЦИИ В PHP. Они обесцениваются. Ознакомьтесь с http://php.net/manual/en/mysqlinfo.library.choosing.php для получения дополнительной информации об этом. На скрипты...
<script type="text/javascript">
$('#type_hire').change(function() {
var selected = $('#type_hire option:selected'); //This should be the selected object
$.get('DropdownRetrievalScript.php', { 'option': selected.val() }, function(data) {
//Now data is the results from the DropdownRetrievalScript.php
$('select[name="employees"]').html(data);
}
}
</script>
Теперь я просто снял это с рук. Но я попробую и покажу тебе это. Сначала мы захватываем тег "select", который хотим посмотреть (хэштег означает поиск элемента по ID). Затем мы возьмем выбранную опцию. Затем мы запускаем вызов AJAX для создания GET на странице "DropdownRetrievalScript.php", которую вы создадите. То, что должен сделать этот сценарий, это взять параметр GET "option" и запустить его через базу данных. Затем повторите теги "option". Наш материал javascript затем берет эти результаты и подключает их непосредственно к тегу select с атрибутом name для сотрудников.
Помните, что AJAX похож на ввод этого URL-адреса в ваш браузер. Таким образом, переменная данных - это буквально любой код или текст, отображаемый URL-адресом. Это может быть текст, HTML, JSON, XML, что угодно.
Таким образом, у вас есть onchange и это начало. Onchange ссылается на функцию JavaScript, которую вы не показываете. Есть несколько быстрых способов приблизиться к этому:
(оба этих примера не относятся к тому, как вы обращаетесь к базе данных)
1)
Использование функции запуска:
<script type="text/javascript">
function run(){
document.getElementById('form1').submit()
}
</script>
Дополнительный PHP:
<?php
if (isset($_POST['department']) && isset($_POST['type_hire']))
{
$value_of_department_list = $_POST['department'];
$value_of_type_hire = $_POST['type_hire'];
mysql_connect("localhost","root","");
mysql_select_db("employees_hired");
mysql_query("SELECT name FROM usuario WHERE (department ='". $value_of_department_list ."') AND (contrasena ='". $value_of_type_hire."')");
while($row_list=mysql_fetch_assoc($list))
{
echo "<option value=\"{$row_list['name']}\">{$row_list['name']}</option>";
}
}
else
{
echo "<option>Please choose a department and a type of hire</option>";
}
?>
2)
<script type="text/javascript">
function run(){
$.post('get_employees.php',$('form1').serialize(),function(data){
var html = '';
$.each(data.employees,function(k,emp){
$('select[name="employees"]').append($('<option>', {
value: emp.name,
text: emp.name
}));
.html(html);
},"json");
}
</script>
И get_employees.php будет содержать что-то вроде:
<?php
if (isset($_POST['department']) && isset($_POST['type_hire']))
{
$value_of_department_list = $_POST['department'];
$value_of_type_hire = $_POST['type_hire'];
$return = array();
mysql_connect("localhost","root","");
mysql_select_db("employees_hired");
mysql_query("SELECT name FROM usuario WHERE (department ='". $value_of_department_list ."') AND (contrasena ='". $value_of_type_hire."')");
while($row_list=mysql_fetch_assoc($list))
{
$return[]['name'] = $row_list['name'];
}
echo json_encode($return);
}
?>
Заметьте, это просто быстро написанные примеры. Намного больше можно/нужно сделать здесь.
$_GET['option']
чтобы проверить, какая опция была выбрана.