Это моя БД:
[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 неделю, но никто не работал, может быть, я не знаю, как, поэтому я не могу проследить, почему это происходит.
Кто-нибудь может мне помочь? Любая помощь будет оценена. Спасибо!
Взгляните на AJAX (асинхронный JavaScript и XML). Это поможет вам решить автоматически изменить второе выпадающее меню с соответствующим уровнем года проблема у вас есть
AJAX — это группа методов веб-разработки, используемых на стороне клиента для создания асинхронных веб-приложений. Короче говоря, вы сможете отправлять и извлекать данные с сервера асинхронно, другими словами, вы можете только перезагрузить (и, следовательно, изменить содержимое) один (или более) выпадающий список на основе предыдущего ввода пользователя (без перезагрузки всей страницы). Который, насколько я понимаю, это то, что вы хотите.
В противном случае вы также можете реализовать это без использования AJAX, но для этого потребуется перезагрузить всю страницу.
Вы должны использовать Javascript, чтобы изменить содержимое страницы после загрузки DOM. Вы мог обновлять страницу всякий раз, когда выбор изменился, но на вашем месте я бы либо
Ваш случай довольно прост, поэтому, по моему скромному мнению, последний может вызвать довольно ненужные накладные расходы; Если у вас нет более 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);
});
Используя структуру базы данных, которую вы указали в своем вопросе, вы можете достичь результата с помощью 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->
к тому, что вы в настоящее время используете.
Удачного кодирования!
Сначала сделайте резервную копию вашего кода. И используйте мой код. Я уверен на 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>
Ура! Наслаждайтесь кодированием 🙂 🙂