2016-05-30 7 views
0

チェックリストでチェックされたオプションを使用して、MYSQLからデータを取得しようとするときに問題があります。チェックボックスの選択を使用してMYSQLの子テーブルからデータを取得するには?

私はMYSQLに2つのテーブルを持ち、degree_namesには1つ - チェックリストとして自動的に出力され、2つの別の学位に関連するコースには2つ目のテーブルがあります。これらのテーブルは両方とも関係性があり、すなわち、「コース」が「degree_names」の子テーブルであるように接続されている。

私のコードを変更して、チェックリストでチェックを入れるオプション(2つ以上)が「degree_names」テーブルに接続し、次に関連するすべてのコースをフェッチするようにするにはどうすればよいですか?それらの学位は "コース"テーブルからですか?ここで

はdegree_name表から直接すべての度のチェックリストを出力し、これまでに私のコードです

 <?php 
       $username = "root"; 
       $password = ""; 
       $hostname = "localhost"; 

       $dbname = "major_degrees"; 
       $str=''; 

       // Create connection 
       $conn = new mysqli($hostname, $username, $password, $dbname); 

       // Check connection 
       if ($conn->connect_error) { 
        die("Connection failed: " . $conn->connect_error); 
       } 

       $sql = "SELECT degree FROM degree_names"; 
       $result = $conn->query($sql); 

       $out = ''; 
       $cnt = 0; 
       if ($result->num_rows > 0) { 

        // output data of each row from degree_names database as a checklist 
        while($row = $result->fetch_assoc()) { 
         $cnt++; 
         $out .= '<input id="cb_' .$cnt. '" class="checkChange" type="checkbox" name="check" value="ch" id="checky" />' .$row['degree']. '<br/>'; 

        } 
        echo $out; 

       } 

     ?> 
    </b> 
    </br> 
    <input class="btn-checkout" type="submit" value="Submit" id="submitBtn" disabled="disabled"/> 
    </div> 
    </div> 


     </form> 
     </body> 
     <script src="https://code.jquery.com/jquery-2.2.4.min.js"></script> 
     <script> 
      $('.checkChange').change(function() { 
       var count = 0; 
       var len = $("[name='check']:checked").length;    

       // keep a counter for how many boxes have been checked 
       $('#checkboxes input:checked').each(function() { 
        count++; 
       }); 

       // if 2 boxes are checked off then disable the rest 
       if (count == 2) { 
        $('#checkboxes input:not(:checked)').each(function() { 
         $(this).attr("disabled", true); 

        }); 

       } 
       // else keep other options enabled 
       else { 
        $('#checkboxes input:not(:checked)').each(function() { 
         $(this).removeAttr('disabled'); 
        });          
       } 

       //if exactly 2 boxes are checked off then enable the submit button, or else keep is disabled 
       if ($(this).is(":checked") && count == 2) { 
         $("#submitBtn").removeAttr("disabled"); 
       } else { 
         $("#submitBtn").attr("disabled", "disabled"); 
       } 

      }); 

     </script> 

    </html> 
+1

Tried [ajax](http://api.jquery.com/jquery.ajax/)?なぜデータベースではなくテーブルではないのですか?そして、 'degree_names'と' courses'の構造は何ですか? –

+0

私の悪い、degree_namesとコースは実際にはテーブルです!混乱させて申し訳ありません。構造については、 "degree_names"は学位単位の学位と学位単位の2つの列で構成され、 "コース"はすべてのコース名、コースID、クレジット数などの複数の列で構成されます。@Loganウェイン –

+0

そして、彼らは...を通して関係していますか? 'degree_names degrees = courses。?' –

答えて

1

majorscoursesの間に明確な最初の関係をできるようにしますテーブル:

あなたmajors表が見えますlike:

degree_id | TotalCredits | degree_name 
-----------+--------------+-------------------- 
    1  |  8  |  Computer Science 
    2  |  8.5  |  Mathematics 
    3  |  8  | Music and Culture 

およびcourses表:

id | course_id | degree_id |   course_name    | credits | pre-requisite | last-offered | status | 
----+-----------+-----------+--------------------------------------+---------+---------------+--------------+--------+ 
1 | CSCA08 |  1  | Introduction to Computer Science I | 0.5 |  CSCA48 | Fall 2015 |  | 
2 | CSCA48 |  1  | Introduction to Computer Science II | 0.5 |  CSCB07 | Winter 2015 |  | 
3 | MATA23 |  2  |   Linear Algebra I    | 0.5 |  MATB24 | Fall 2015 |  | 

は、なぜあなたは、各チェックボックスのための単一のvalueを持っていますか?これらのチェックボックスの値をmajorsテーブルのdegree_idに設定します。

<table id="course_table"> 
</table> 
:そして、あなたはデータを表示したい空のテーブルを持っていることができます

$out .= '<input id="cb_' .$cnt. '" class="checkChange" type="checkbox" name="check" value="'.$row['degree_id'].'" id="checky" />' .$row['degree_name']. '<br/>'; 

:へのあなたのチェックボックスの値を設定すると

$sql = "SELECT degree_id, degree_name FROM majors"; 

:に最初のクエリを変更

Ajaxを使用してディスプレイを呼び出します。

$(document).on("change", ".checkChange", function(){ /* WHEN A CHECK BOX HAS BEEN TICKED */ 

    var counter = 0; 

    /* COUNT ALL THE CHECKED CHECK BOXES */ 
    $(".checkChange").each(function(){ 
     if(this.checked){ 
      ++counter; 
     } 
    }); 

    if(counter == 2){ /* IF CHECKED CHECK BOXES REACHED TWO */ 
     /* DISABLE OTHER UNCHECKED CHECK BOXES */ 
     $(".checkChange").each(function(){ 
      if(!this.checked){ 
       $(this).prop("disabled", true); 
      } 
     }); 
    } else { 
     /* ENABLE ALL CHECK BOXES */ 
     $(".checkChange").prop("disabled", false); 
    } 

    $("#course_table").empty(); /* EMPTY THE TABLE */ 

    $('#checkboxes :checked').each(function() { /* CHECK EACH CHECKED CHECK BOXES */ 

     var degid = $(this).val(); /* GET THE VALUE OF THE CHECKED CHECK BOX */ 

     $.ajax({ /* CALL AJAX */ 
      type: 'POST', /* METHOD TO USE TO PASS THE DATA */ 
      url: 'get.php', /* FILE WHERE TO PROCESS THE DATA */ 
      data: { 'degid' : degid }, /* DATA TO BE PASSED */ 
      success: function(result){ /* GET THE RESULT FROM get.php */ 
       $("#course_table").append(result); /* ADD THE COURSES RESULT TO THE HTML TABLE */ 
      } 
     }); /* END OF AJAX */ 

    }); /* END OF CHECKING EACH CHECKED CHECK BOXES */ 

}); /* END OF IF A CHECK BOX HAS BEEN TICKED */ 

値がget.phpに処理されるので、このファイルを作成することができます。使用できるようにするprepared statement

// INCLUDE YOUR DATABASE CONNECTION 
$conn = new mysqli('localhost', 'root', '', 'major_degrees'); 

// CHECK CONNECTION 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

if(!empty($_POST["degid"])){ 

    $stmt = $conn->prepare("SELECT course_name FROM courses WHERE degree_id = ?"); /* PREPARE YOUR QUERY */ 
    $stmt->bind_param("i", $_POST["degid"]); /* BIND THE SUBMITTED DATA TO YOUR QUERY; i STANDS FOR INTEGER */ 
    $stmt->execute(); /* EXECUTE QUERY */ 
    $stmt->bind_result($coursename); /* BIND RESULT TO THIS VARIABLE */ 
    while($stmt->fetch()){ /* FETCH ALL RESULTS */ 
     echo '<tr> 
        <td>'.$coursename.'</td> 
       </tr>'; 
    } 
    $stmt->close(); /* CLOSE PREPARED STATEMENT */ 

} 
/* WHAT YOU ECHO/DISPLAY HERE WILL BE RETURNED TO degree.php */ 
+0

この行は私にエラーを与えています:$ out。= ''。$ row ['degree']。 ''クラス=" checkChange "type ="チェックボックス "name ="チェック "value =" '
'; これはエラーです。定義されていないインデックス:C:\ xampp \ htdocs \ mysql_login \ degree.phpのdegree_id(83行目) 「degree_id」はidsの列がどのように呼び出されるかです。両方ともテーブル –

+0

@MaydhaMn - 'degree_names'テーブルの' id'カラムの名前は何ですか?その後、クエリを 'SELECT degree_id、degrees FROM degree_names'に変更します。 –

関連する問題