2016-05-02 23 views
0

を移入ありません。だから、最初のドロップダウンの選択に最初のドロップダウンの値は、MySQLのクエリに渡す必要があり、その後、2番目のドロップダウンが、空白が表示さ2番目のドロップダウンを移入します。AJAXドロップダウンは、私はjQueryとPHPを使用しています

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> 
<script> 
    $(document).ready(function() { 
     $("#city").change(function() { 
      var value = $(this).val(); 
      $.ajax({ 
       type : "GET", 
       url : 'abc.php', 
       data : { 
        choice : value 
       }, 
       success : function(data){ 
        $('#123').html(data); 
       } 
      }) 
     }); 
    }); 
</script> 

<form action="" method="post"> 
    <select class="form-control" id="city" action="" name="city" value=""> 
     <option value="">--</option> 
     <option value="1"</option> 
     <option value="2"</option> 
     <option value="3"</option> 
    </select> 
    <br/> 
</div> 
<div class="form-group">   
    <select class="form-control" action="" name="123" id="123""> 
     <option value="--">--</option> 
     <?php 
     $query = "SELECT DISTINCT `Comm` FROM `Comm_New` WHERE `Market`='".$_GET['city']."' ORDER BY `Comm` ASC"; 
     if ($result = mysqli_query($link, $query)) { 
      while ($Comm = mysqli_fetch_assoc($result)) { 
       print_r("<option value='".$Comm['Comm']."'>".$Comm['Comm']."</option>"); 
      } 
     }   
     ?> 
    </select><br/> 
</div> 
+0

これはセキュリティホール(SQLインジェクション)です: ' "'Market' =' Comm_New' FROM DISTINCT 'Comm' SELECT 'を" [都市 '] "ORDER' Comm'のASC BY"' $ _ GET。'。' 。使用されたバインド。 abc.php' '上のエラーの – Rasclatt

+0

電源を入れ、何の応答(' data')を返す(多分エラー)を参照してください。 – Rasclatt

+0

@Rasclatt代わりに私はPOStを使用しますか? – user580950

答えて

1

コメント内の会話から、最初に読み込んでいたのと同じページを呼び出しています。それは技術的に必ずしも問題ではない、ちょうど適切に実装されていない。同じページをロードするには、実行する必要があります。

<?php 
// Make sure your database is initiated above here so this can use it. 
// I am going to demonstrate a basic binding using a super basic PDO 
// connection because procedural mysqli_* with bind is just annoying 
$link = new PDO('mysql:host=localhost;dbname=test', $user, $pass); 
// Notice that you send "choice" as the GET key in your ajax, not "city" 
if(!empty($_GET['choice'])) { 
?> 
    <select class="form-control" action="" name="123" id="123""> 
     <option value="">--</option> 
     <?php 
     // prepare, bind, execute here 
     $query = $link->prepare("SELECT DISTINCT `Comm` FROM `Comm_New` WHERE `Market` = :0 ORDER BY `Comm` ASC"); 
     $query->execute(array(':0'=>$_GET['choice'])); 
     // PDO has a lot of connection settings where you can set the default 
     // return type so you don't need to tell it to fetch assoc here. 
     // Also, you would tell the the connection not to just emulate bind 
     // etc.. I would consider using PDO or the OOP version of mysqli 
     while ($Comm = $query->fetch(PDO::FETCH_ASSOC)) { 
      echo "<option value='".$Comm['Comm']."'>".$Comm['Comm']."</option>"; 
     } 

?> </select> 
<?php 
     // Stop the page from running further 
     die(); 
    } 
?><script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> 
<script> 
    $(document).ready(function() { 
     $("#city").change(function() { 
      var value = $(this).val(); 
      $.ajax({ 
       type : "GET", 
       url : 'abc.php', 
       data : { 
        choice : value 
       }, 
       success : function(data){ 
        // Populate the empty container #new_drop 
        $('#new_drop').html(data); 
       } 
      }) 
     }); 
    }); 
</script> 

<form action="" method="post"> 
    <select class="form-control" id="city" action="" name="city" value=""> 
     <!-- 
      Your options are malformed. Missing close ">" 
      probably just copy error 
     --> 
     <option value="">--</option> 
     <option value="1">1</option> 
     <option value="2">2</option> 
     <option value="3">3</option> 
    </select><br/> 
    </div> 
    <!-- Add id="new_drop" to this div --> 
    <div class="form-group" id="new_drop"> 
    </div> 

理想的には、新しいページの一番上の部分を持って、そしておそらくストレートHTMLとは対照的に、データのセットを返すようにしたい、しかし、AJAXは非常に柔軟です。

関連する問題