Как связать выпадающие списки с помощью PHP и MYSQL?

Это моя БД:

          [tblset]              |     [tblyear]    |    [tbl_coursetype]
ID, setname, setyear, setcours  |   ID, YearName   | course_no, course_desc
------------------------------  | ---------------- | -----------------------
1      A        1         1     |   1   1st Year   |     1          BSIT
2      B        3         2     |   2   2nd Year   |     2          BSED
|   3   3rd Year   |
|   4   4th Year   |
|   5   5th Year   |
  • И это мой код:

        <form role="form" action="save_stud.php" method="post">
    <div class="form-group">
    <label>First Name</label>
    <input type="text" name="studfname" class="form-control" required>
    </div>
    <div class="form-group">
    <label>Last Name</label>
    <input type="text" name="studlname" class="form-control" required>
    </div>
    
    
    <div class="form-group">
    <label>Student Course</label>
    <select name="studcourse" class="form-control">
    <?php
    
    // Five steps to PHP database connections:
    
    // 1. Create a database connection
    //      (Use your own servername, username and password if they are different.)
    //      $connection allows us to keep refering to this connection after it is established
    $connection = mysql_connect("localhost","root","");
    if (!$connection) {
    die("Database connection failed: " . mysql_error());
    }
    
    // 2. Select a database to use
    $db_select = mysql_select_db("studsystem",$connection);
    if (!$db_select) {
    die("Database selection failed: " . mysql_error());
    }
    
    ?>
    
    <?php
    $result = mysql_query("Select setcours, course_desc
    from tblset, tbl_coursetype
    where tbl_coursetype.course_no=tblset.setcours
    group by setcours", $connection);
    
    if (!$result) {
    die("Database query failed: " . mysql_error());
    }
    
    
    // 4. Use returned data
    while ($row = mysql_fetch_array($result)) {
    echo "<option value=\"{$row[0]}\">{$row[1]}</option>";
    
    }
    
    ?>
    
    </select>
    </div>
    
    
    <div class="form-group">
    <label>Student Year</label>
    <select name="studyear" class="form-control">
    
    <?php
    // Five steps to PHP database connections:
    
    // 1. Create a database connection
    //      (Use your own servername, username and password if they are different.)
    //      $connection allows us to keep refering to this connection after it is established
    $connection = mysql_connect("localhost","root","");
    if (!$connection) {
    die("Database connection failed: " . mysql_error());
    }
    
    // 2. Select a database to use
    $db_select = mysql_select_db("studsystem",$connection);
    if (!$db_select) {
    die("Database selection failed: " . mysql_error());
    }
    
    ?>
    
    <?php
    $result = mysql_query("Select setyear, YearName
    from tblset, tblyear
    where tblyear.ID=tblset.setyear
    group by setyear", $connection);
    
    if (!$result) {
    die("Database query failed: " . mysql_error());
    }
    // 4. Use returned data
    while ($row = mysql_fetch_array($result)) {
    echo "<option value=\"{$row[0]}\">{$row[1]}</option>";
    
    }
    
    ?>
    
    
    </select>
    </div>
    
    <div class="form-group">
    <label>Section</label>
    <select name="studset" class="form-control">
    
    <?php
    // Five steps to PHP database connections:
    
    // 1. Create a database connection
    //      (Use your own servername, username and password if they are different.)
    //      $connection allows us to keep refering to this connection after it is established
    $connection = mysql_connect("localhost","root","");
    if (!$connection) {
    die("Database connection failed: " . mysql_error());
    }
    
    // 2. Select a database to use
    $db_select = mysql_select_db("studsystem",$connection);
    if (!$db_select) {
    die("Database selection failed: " . mysql_error());
    }
    
    ?>
    
    <?php
    $result = mysql_query("SELECT * FROM tblset t LIMIT 0,1000", $connection);
    if (!$result) {
    die("Database query failed: " . mysql_error());
    }
    
    // 4. Use returned data
    while ($row = mysql_fetch_array($result)) {
    echo "<option value=\"{$row[0]}\">{$row[1]}</option>";
    
    }
    
    ?>
    
    
    </select>
    </div>
    

-Вот несколько скриншотов.
Выбор курса
Выбор уровня года

Теперь я смущен, потому что BSIT имеет только 1st year но когда я каждый раз выбираю BSIT, второй выпадающий также появится 3rd year, который на самом деле, 3rd year предназначен только для BSED,

Короче говоря, я хочу, чтобы каждый раз, когда я выбираю курс, он автоматически изменял второе раскрывающееся меню с соответствующими уровнями года.

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

Кто-нибудь может мне помочь? Любая помощь будет оценена. Спасибо!

-5

Решение

Взгляните на AJAX (асинхронный JavaScript и XML). Это поможет вам решить автоматически изменить второе выпадающее меню с соответствующим уровнем года проблема у вас есть

AJAX — это группа методов веб-разработки, используемых на стороне клиента для создания асинхронных веб-приложений. Короче говоря, вы сможете отправлять и извлекать данные с сервера асинхронно, другими словами, вы можете только перезагрузить (и, следовательно, изменить содержимое) один (или более) выпадающий список на основе предыдущего ввода пользователя (без перезагрузки всей страницы). Который, насколько я понимаю, это то, что вы хотите.

В противном случае вы также можете реализовать это без использования AJAX, но для этого потребуется перезагрузить всю страницу.

0

Другие решения

Вы должны использовать Javascript, чтобы изменить содержимое страницы после загрузки DOM. Вы мог обновлять страницу всякий раз, когда выбор изменился, но на вашем месте я бы либо

  1. Загрузите комбинации в объект JS
  2. Используйте ajax, чтобы получить их асинхронно.

Ваш случай довольно прост, поэтому, по моему скромному мнению, последний может вызвать довольно ненужные накладные расходы; Если у вас нет более 50 курсов с большим количеством комбинаций года, я бы подошел к этому в первую очередь. Вот ОЧЕНЬ простая версия того, о чем я говорю, для простоты использую jQuery: http://jsfiddle.net/eng2e9fu/

var courses = {
1:{years:2},
2:{ years:3},
};

$("#course").change(function(){
var course = $(this).val();
var options = [];
for(var i = 1; i <= courses[course].years; i++)
{
options.push($("<option/>").attr("value",i).html("Year "+i));
}

$("#year").html(options);
});
0

Используя структуру базы данных, которую вы указали в своем вопросе, вы можете достичь результата с помощью AJAX.

1) Начните с запроса, чтобы получить ваши курсы …

<?php
require'connections/conn.php';

$sql = "SELECT * FROM tbl_coursetype";
$query = $conn->prepare($sql);
$query->execute();
$results = $query->fetchAll();
$totalRows = $query->rowCount();
?>

2) Включите функцию в свой <head> теги

<script src="https://code.jquery.com/jquery-2.1.1.min.js" type="text/javascript"></script>
<script>
function getYears(val) {
$.ajax({
type: "POST",
url: "get-year.php",
data:'id='+val,
success: function(data){
$("#year-list").html(data);
}
});
}
</script>

3) Форма

<div>
<label>Student Course</label><br/>
<select name="course" id="course-list" onChange="getYears(this.value);">
<option value="">Select Course</option>
<?php foreach($results as $row) { ?>
<option value="<?php echo $row["course_no"]; ?>"><?php echo     $row["course_desc"]; ?></option>
<?php } ?>
</select>
</div>
<div>
<label>Student Year</label><br/>
<select name="year" id="year-list">
<option value="">Select Year</option>
</select>
</div>

4) sql, чтобы тянуть доступные годы … get-year.php

<?php
require'connections/conn.php';

if(!empty($_POST["id"])) {
$id = $_POST["id"];
$sql = "SELECT * FROM tblyear WHERE ID=:id";
$query = $conn->prepare($sql);
$query->bindValue(':id', $id, PDO::PARAM_INT);
$query->execute();
$results = $query->fetchAll();
$totalRows = $query->rowCount();
?>
<option value="">Select Year</option>
<?php
foreach($results as $row) {
?>
<option value="<?php echo $row["ID"]; ?>"><?php echo $row["YearName"]; ?></option>
<?php
}
}
?>

Конечно, вы можете изменить линию подключения, чтобы она соответствовала тому, что вы используете & $conn-> к тому, что вы в настоящее время используете.

Удачного кодирования!

0

Сначала сделайте резервную копию вашего кода. И используйте мой код. Я уверен на 100%, это будет работать. Но будьте терпеливы. И используйте этот код в очень спокойной манере. Понять каждую строку.

dbconnect.php
(включите этот файл на каждую страницу, где требуется соединение с базой данных. Зачем писать каждый временной код для соединения с базой данных)

<?php
$connection = mysql_connect("localhost","root","");
if (!$connection) {
die("Database connection failed: " . mysql_error());
}

$db_select = mysql_select_db("studsystem",$connection);
if (!$db_select) {
die("Database selection failed: " . mysql_error());
}
?>

Ваша модальная страница

<?include('dbconnect.php');?>
.
//Your rest of the code
.
<form role="form" action="save_stud.php" method="post">
<div class="form-group">
<label>First Name</label>
<input type="text" name="studfname" class="form-control" required>
</div>
<div class="form-group">
<label>Last Name</label>
<input type="text" name="studlname" class="form-control" required>
</div>
<div class="form-group">
<label>Student Course</label>
<select name="studcourse" class="form-control Courses">
<option value="">Select Courses</option>
<?
$QueryCourses = mysql_query("SELECT tblset.setcours, tbl_coursetype.course_desc
FROM tblset, tbl_coursetype WHERE tbl_coursetype.course_no=tblset.setcours", $connection);
while ($RowCourses = mysql_fetch_array($result))
{?>
<option value="<?echo $RowCourses[0];?>"><?echo $RowCourses[1];?></option>
<?}?>
</select>
</div>
<div class="form-group StudentYearDiv">
<label>Student Year</label>
<select name="studyear" class="form-control">
<option value="">Select Year</option>
</select>
</div>
<div class="form-group">
<label>Section</label>
<select name="studset" class="form-control">
<option value="Select Section"></option>
<?
$QuerySection=mysql_query("SELECT * FROM tblset LIMIT 0,1000", $connection);
while($RowQS=mysql_fetch_array($QuerySection))
{?>
<option value="<?echo $RowQS[0];?>"><?echo $RowQS[1];?></option>
<?}?>
</select>
</div>
.
.
.
//Your rest of the code
</form>

Добавьте этот код в нижний колонтитул.
Если после добавления это не сработало, сохраните этот код только на вашей модальной странице.

<script>
$('.Courses').change(function(){
var CourseNo=$('.Courses').val();
$.ajax({url:"Ajax-ShowStudentYear.php?CourseNo="+CourseNo,cache:false,success:function(result){
$('.StudentYearDiv').html(result);
}});
});
</script>

Создай Ajax-ShowStudentYear.php стр.
(Помните, если вы хотите изменить имя этой страницы. Затем измените <script></script> тег тоже. Оба связаны)

<?
include('dbconnect.php');
extract($_GET);

$QueryYearNo=mysql_query("SELECT setyear FROM tblset WHERE setcours='$CourseNo'",$connection);
while($RowYN=mysql_fetch_array($QueryYearNo))
{
$YearNo=$RowYN['setyear'];
}
?>

<label>Student Year</label>
<select name="studyear" class="form-control">
<?
$QueryYear=mysql_query("SELECT ID, YearName FROM tblyear WHERE ID='$YearNo'",$connection);
while($RowQY=mysql_fetch_array($QueryYear))
{?>
<option value="<?echo $RowQY['ID'];?>"><?echo $RowQY['YearName'];?></option>
<?}?>
</select>

Ура! Наслаждайтесь кодированием 🙂 🙂

0
По вопросам рекламы [email protected]