2

私は、コードイグナイター、phpとMySQLのGoogleグラフを使ってグラフを表示しています。それは固定クエリを使用して動作します。私は、選択(SQL列の "ステータス")を選択したチャートを表示するためにドロップダウンを追加しようとしています これまでのところ私が持っているものです。ドロップダウン値を受け入れるようにこれを変更するにはどうすればよいですか?事前にCodeIgniterとGoogleのグラフ - mysqlの値に基づいたドロップダウン

model.php

public function get_chart_data() 
{ 
    $query = $this->db->get($this->db_mgmt); 
    $this->db->select('rating, COUNT(rating) AS Count'); 
    $this->db->from('db_mgmt'); 
    $this->db->where('status =', $status); 
    $this->db->group_by('rating'); 
    $query = $this->db->get(); 
    $results['chart'] = $query->result(); 
} 

controller.php

$this->load->model('model', 'chart'); 
public function index() { 
     $results = $this->chart->get_chart_data(); 
     $data['chart'] = $results['chart']; 
     $this->load->view('index.php', $data); 
} 

view.php

<?php 
foreach ($chart as $object) { 
$open_all[] = "['".$object->rating."', ".$object->Count."]"; 
} 
?> 

    google.load("visualization", "1", {packages:["corechart"]}); 
    google.setOnLoadCallback(drawChart_open); 

    function drawChart_open() { 
    // Create the data table. 
    var data = new google.visualization.DataTable(); 
    data.addColumn('string', 'Rating'); 
    data.addColumn('number', 'Count'); 
    data.addRows([ 
    <?php echo implode(",", $open_all);?> 
    ]); 

    var options = { 
     pieSliceText: 'value-and-percentage', 
    }; 

    var chart = new google.visualization.PieChart(document.getElementById('open_div')); 
    chart.draw(data, options); 

    } 

    <div id="open_div" class="chart"></div> 

ありがとう!

UPDATE:

私は、Ajaxを使用して以下にしようとしているが、動作するようには思えません。私はここで何か間違っていると確信していますが、どこにいないのかはわかりません。 chromeでInspectを使用してもエラーは発生しません。事前に

model.php

public function fetch_result($status) 
    { 
    $query = $this->db->get($this->db_mgmt); 
    $this->db->select('rating, COUNT(status) AS Status_Count'); 
    $this->db->from('db__mgmt'); 
    $this->db->where('status =', $status); 
    $this->db->group_by('rating'); 
    $query = $this->db->get(); 
    return $query; 
    } 

controller.php

$this->load->model('model', 'chart'); 
public function mychart() { 

if(!empty($_POST["val"])) { 
    $val=$_POST["val"]; 
    $result_new=$this->chart->fetch_result($val); 

    $array = array(); 
    $cols = array(); 
    $rows = array(); 
    $cols[] = array("id"=>"","label"=>" Rating","pattern"=>"","type"=>"string"); 
    $cols[] = array("id"=>"","label"=>"Count","pattern"=>"","type"=>"number"); 

    foreach ($result_new as $object) { 
     $rows[] = array("c"=>array(array("v"=>$object->risk_rating,"f"=>null),array("v"=>(int)$object->Status_Count,"f"=>null))); 
    } 

    $array = array("cols"=>$cols,"rows"=>$rows); 
    echo json_encode($array); 

    } 

} 

view.php

function drawChart_open_all(num) {   
    var PieChartData = $.ajax({ 
    type: "POST", 
    url: "<?php echo base_url(); ?>" + "dashboard/chart/mychart", 
    data:'val='+num, 
    dataType:"json" 
    }).responseText; 

    alert(PieChartData); 


    // Create the data table. 
    var data = new google.visualization.DataTable(PieChartData); 
    var options = { 
       pieSliceText: 'value-and-percentage',  
    }; 

    var chart = new google.visualization.PieChart(document.getElementById('open_new')); 
    chart.draw(data, options); 

    } 

<div><span> <b>Pie Chart<br /><br /></span></div> 
<form> 
    <select name="status" onchange="drawChart_open_all(this.value)"> 
<option value="WIP">WIP</option> 
<option value="Close">Close</option> 
    </select> 
</form> 
<div id="open_new" class="chart"></div> 

感謝!!

+0

は、[ダッシュボード]を使用する方が簡単かもしれない(https://developers.google.com/chart/interactive/docs/gallery/controls#ダッシュボード)を[CategoryFilter](https://developers.google.com/chart/interactive/docs/gallery/controls#categoryfilter)と組み合わせて使用​​すると、Googleでフィルタリングを処理できます。 – WhiteHat

+0

@WhiteHatソリューションiのおかげで多くの偉大な作品です。さらに、model.phpで別の関数を実行して同じグラフに表示するために値を送信したいのであれば、私は尋ねたがっています。たとえば、時間が変更された場合、同じテーブルに対して異なる列の値を返す異なるMySQLクエリを呼び出すことにしました。 –

+0

多くのPHPでjavascriptからajaxを使用していますが、リクエストを送ることができるようです - データが大量ではない場合、もっと多くを含み、DateRangeFilterをスローしてください... – WhiteHat

答えて

0

を送信するために<input type="submit">ボタンで<form> POSTを使用しています最後にはアヤックス。 @WhiteHatソリューションは正しい方向にも導いた。ありがとう!

モデルです。PHP

public function fetch_result($status) 
    { 
    $query = $this->db->get($this->db_mgmt); 
    $this->db->select('rating, COUNT(status) AS status_count'); 
    $this->db->from('db_mgmt'); 
    $this->db->where('status =', $status); 
    $this->db->group_by('rating'); 
    $query = $this->db->get(); 

    $results_new = $query->result(); // <-- Forgot to add this! 
    return $results_new; 
    } 

controller.php

$this->load->model('model', 'chart'); 

public function mychart() { 

if(!empty($_POST['option'])) {  

$val = $_POST['option'];    
$result_new=$this->chart->fetch_result($val); 

$array = array(); 
$cols = array(); 
$rows = array(); 
$cols[] = array("id"=>"","label"=>" Rating","pattern"=>"","type"=>"string"); 
$cols[] = array("id"=>"","label"=>"Count","pattern"=>"","type"=>"number"); 

foreach ($result_new as $object) { 
    $rows[] = array("c"=>array(array("v"=>(string)$object->rating),array("v"=>(int)$object->status_count))); 
} 

$array = array("cols"=>$cols,"rows"=>$rows); 
echo json_encode($array); 

} 
} 

view.php

function drawChart_open_all(status) { 

    var PieChartData = $.ajax({ 
    type: 'POST', 
    url: "<?php echo base_url(); ?>" + "dashboard/chart/mychart", 
    data: { 'option':status }, // <-- kept as option instead of val 
    dataType:"json", 
    global: false,    // <-- Added 
    async:false,    // <-- Added 
    success: function(data){ // <-- Added 
    return data;    // <-- Added 
    }, 
    error: function(xhr, textStatus, error){ 
     console.log(xhr.statusText); 
     console.log(textStatus); 
     console.log(error); 
    } 
    }).responseText; 

    // Create the data table. 
    var data = new google.visualization.DataTable(PieChartData); 
    var options = { pieSliceText: 'value-and-percentage', }; 

    var chart = new google.visualization.PieChart(document.getElementById('open_new')); 
    chart.draw(data, options); 
    } 

<div><span> <b>Pie Chart<br /><br /></span></div> 
<form> 
<select name="status" onchange="drawChart_open_all(this.value)"> 
<option value="WIP">WIP</option> 
<option value="Close">Close</option> 
</select> 
</form> 
<div id="open_new" class="chart"></div> 
1

私は最も簡単な方法は、<option>

まず付きGETリクエストを送信し、あなたの最初のバージョンに戻すことであろうを考える

次に、モデルに

function drawChart_open_all(num) { 
    location = "<?php echo base_url(); ?>" + "dashboard/chart/mychart?option=" + num; 
} 

次に、あなたのonchangeイベントに値を送信する -
get_chart_data()

をあなたと値にアクセスすることができるはず -
$_GET['option']

それを使用してクエリを変更する

ここ

は同様のコンセプトを持つ古い答えだ - の違いは、それが対GET
と私は問題は、使用したかを把握するために管理要求
How to pass JavaScript variables to PHP?

+0

これが役立つことを願って、 'ajax'を使って'location = ... 'を使用していますが、もっと多くの作業が必要になると思います。 – WhiteHat