2015-10-13 5 views
-5

Это мой дб:Как связать выпадающие окна с помощью 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> 
    

-Вот некоторые скриншоты. Choosing course Choosing year level

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

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

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

Может кто-нибудь мне помочь? Любая помощь будет оценена. Благодаря!

+2

Разве вы не задавали этот вопрос вчера? – Qirel

+1

Для этого вам нужно использовать AJAX. Изучите метод jQuery Ajax()] (http://api.jquery.com/jquery.ajax/). Вам нужно связать вызов ajax, который запрашивает db для второго раскрывающегося содержимого для первого выпадающего события 'onChange()'. –

+2

Возможный дубликат [Как передать переменную php из выпадающего списка в другое раскрывающееся меню с использованием php?] (Http://stackoverflow.com/questions/33079923/how-to-pass-a-php-variable-from-a- dropdown-to-another-dropdown-using-php) – DocRattie

ответ

0

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

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

Как это сделать с помощью запроса MYSQL? – RoyalRyt

+0

Вы хотите сосредоточиться на создании объекта «курсы». Здесь вы задаете много вопросов, и вы не получите готовый к копированию-вставить ответ здесь, в stackoverflow. Подсказка: в приведенном выше случае старайтесь сосредоточиться на создании объекта «курсы». Общая идея заключается в том, чтобы манипулировать вашими данными в массив PHP, а затем использовать ['json_encode'] (http://php.net/manual/en/function.json-encode.php), чтобы получить его вывод в действительный JSON (который javascript понимает). 'var courses = ;' – Dencker

+0

Хорошо, спасибо за подсказку. – RoyalRyt

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()); 
} 
?> 

Вашего Модальные Page

<?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

Спасибо, что помогли мне сэр. Я думаю, что это действительно сработает, но одно, есть ли какой-либо сбой в запросе '$ QueryCourses'? Я ничего не получил в первом выпадающем списке. – RoyalRyt

+0

Привет @RoyalRyt. Я не изменил ваш запрос. Но, что я заметил, ваш запрос был неправильным. Начиная с 2 столбцов разных таблиц, которые вы извлекали. Вы должны использовать мой путь. Я отредактировал свой ответ. Проверь это. –

0

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

1) Start, запрашивая, чтобы получить свои курсы ...

<?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->, что бы вы ни использовали в настоящее время.

Счастливое кодирование!