2015-10-13 28 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/)方法。您需要將查詢db的ajax調用綁定到第二個下拉內容到第一個下拉列表'onChange()'事件。 –

+2

的可能的複製[如何從下拉到使用PHP另一個下拉傳遞PHP變量?](http://stackoverflow.com/questions/33079923/how-to-pass-a-php-variable-from-a-下拉到另一個-下拉-使用的PHP) – DocRattie

回答

0

查看AJAX(異步JavaScript和XML)。它會幫助你解決自動更改第二個下拉菜單及其相應年份級別/ s問題。

AJAX是一組Web開發技術,用於在客戶端創建異步Web應用程序。簡而言之,您將能夠異步發送和檢索服務器中的數據,換句話說,您只能根據以前的用戶輸入(無需重新加載整個頁面)重新加載(並因此更改內容)一個(或多個)下拉列表。據我所知,這是你想要的。

否則,您也可以在不使用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 Query來完成這些操作? – RoyalRyt

+0

你想專注於生成'courses'對象。你在這裏問了很多東西,並且你不會在這裏獲得一個準備好複製粘貼的答案。提示是:在上述情況下,請着重於生成「課程」對象。總的想法是把你的數據處理成一個PHP數組,然後使用['json_encode'](http://php.net/manual/en/function.json-encode.php)將其輸出爲有效的JSON(它javascript理解)。 'var courses = <?= json_encode($ array)?>;' – 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()); 
} 
?> 

你莫代爾頁

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

Hi @RoyalRyt。我沒有改變你的查詢。但是,我觀察到的是您的查詢是錯誤的。由於你提取的兩列不同的表格,你必須用我的方式。我編輯了我的答案。覈實。 –

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->,無論你目前使用的是什麼。

快樂編碼!