2017-05-22 8 views
0

PHPの関数をonchangeのhtmlのselectで呼び出したいのですが、どうすればできますか?JavaScriptのOnchangeでPHP関数を呼び出す

htmlコード

<div class="col-sm-4 form-group"> 
    <label for="c_city">City</label> 
    <select class="form-control" id="c_city" onchange="<?php getArea(); ?>"> 
     <option value="">Select City Name</option> 
     <!--populate value using php--> 
     <?php 
      $stmt ="SELECT * FROM Cities"; 
      foreach ($con->query($stmt) as $row) { 
     ?> 
     <option value="<?php echo $row['City_ID'];?>"><?php echo $row['City_Name'];?></option> 
     <?php 
      } 
     ?> 
    </select> 
</div> 

PHP関数ページ

function getArea() 
{ 
    if(isset($_GET['c_city'])) 
    { 
     $c_city = $_GET['c_city']; 
     echo $c_city; 
    } 
} 
+3

ここでjquery 'ajax()'を使用してください –

+0

あなたはこのようにすることはできません、PHPはJSクライアント側で実行されるので、あなたのJSはサーバにリクエストを送信する必要がありますあなたのJSに答えを返す、AJAXはあなたの友人です、http://api.jquery.com/jquery.ajax/ jqueryを使用する場合 – Bast

+0

まず、サーバー側とクライアントの違いについて知る必要があります-side:https://teamtreehouse.com/library/build-a-simple-php-application/getting-started-with-php/serverside-versus-clientside-2 –

答えて

0

ajaxを使用してPHPスクリプトを呼び出して、JavaScript結果を受け取ることができます。 HTMLページの例については

<div class="col-sm-4 form-group"> 
    <label for="c_city">City</label> 
    <select class="form-control" id="c_city" onchange="getArea()"> 
     <option value="">Select City Name</option> 
     <!--populate value using php--> 
     <?php 
      $stmt ="SELECT * FROM Cities"; 
      foreach ($con->query($stmt) as $row) { 
     ?> 
     <option value="<?php echo $row['City_ID'];?>"><?php echo $row['City_Name'];?></option> 
     <?php 
      } 
     ?> 
    </select> 
</div> 

<script> 
function getArea(){ 
    var c_city = $('#c_city').val(); 
    $.ajax({ 
      type: 'POST', 
      url: "get_area.php", 
      data: {c_city:c_city}, 
      success: function(result){ 
       //do something here with return value like alert 
       alert(result) 
      } 
    }) 
} 
</script> 

その後、あなたのPHPスクリプトにあなたはそれができますかあなたが見つけた場合なら、私を知ってみましょうあなたはjavascriptを

if(isset($_POST['c_city'])) 
    { 
     $c_city = $_POST['c_city']; 
     echo $c_city; 
    } 

から受け取る値を操作することができます問題

+0

ありがとう!それは働いた:) – NewDeveloper

+0

私は2つのコンボボックス(都市とエリア)は、登録フォームで、彼らはデータベースから読んでいる、彼らはお互いに依存している、特定の都市が選択されている場合、他のコンボボックスは、 、私のコードは大丈夫ですか良い方法がありますか? – NewDeveloper

+0

@NewDeveloper、これは動作可能です。データがphpまたはmysqlデータベースから来ている場合、2番目のコンボボックスにデータを入れるにはajaxが必要です –

0

これは、その方法によって行うことができない、あなたはそれにAJAXを必要としています。 onchangeはphpではなくjavascriptのための予約された関数であるため、あなたの考えはうまくいかない。コードを実行して選択が変更された場合、getArea()エコーがjavascriptにのみ実行され、期待どおりに表示されません。私がここで行ったことは、あなたの望むようにあなたの地域を検索するのを助けるPHPコードへのajax呼び出しでjs関数を入れました。明らかに、私のコメントは以下のように、HTMLコードにバインドする良い方法ではありません。コードが大きくなってメンテナンスが非常にコストがかかるので、私はon jquery functionを使用してリスナーをオブジェクトにバインドしました。 changeも使用してください。

本当にjavascriptが必要かどうかを分析することは重要です。コードが示唆しているように1つの価値を得るだけであれば、提出されたフォームはよりシンプルです。

<div class="col-sm-4 form-group"> 
    <label for="c_city">City</label> 
    <select class="form-control" id="c_city" onchange="getArea()"> //onchange is not a good practice in the html 
     <option value="">Select City Name</option> 
     <!--populate value using php--> 
     <?php 
      $stmt ="SELECT * FROM Cities"; 
      foreach ($con->query($stmt) as $row) { 
     ?> 
     <option value="<?php echo $row['City_ID'];?>"><?php echo $row['City_Name'];?></option> 
     <?php 
      } 
     ?> 
    </select> 
</div> 

<script> 
    //that way with onchange in HTML 
    function getArea(){ 
    var city = $('#c_city option:selected').val(); 
    $.get("yourphpcode.php?action=getArea&c_city=" + city, function(data) { 

    alert(data); 
}); 
    } 
    //or THAT WAY 
    $('#c_city').on('change', function(){ 
     var city = $(this).find('option:selected').val(); 
    $.get("yourphpcode.php?action=getArea&c_city=" + city, function(data) { 

    alert(data); 
}); 

    }); 
</script> 


    //yourphpcode.php 
    function getArea() 
{ 
    if(isset($_GET['c_city'])) 
    { 
     $c_city = $_GET['c_city']; 
     echo json_encode($c_city); 
    } 
} 
    if (isset($_GET['action']) && $_GET['action'] == 'getArea'){ 
      getArea(); 
    } 
+1

Doかdo not。 「試行」はありません。 ***良い答え***は、何が行われたのか、それがなぜOPのためだけでなく、将来の訪問者のためにそうした方法で行われたのかについての説明を常に持っています。 –

+0

さて、ジェイ、私は、おかげです。 – calexandre

関連する問題