2

Grafik görüntülemesi için kod ateşleyicisi, php ile php ve MySQL kullanıyorum. Sabit sorgu kullanarak çalışır. Ben ( seçti) seçeneği (sql sütun "durumu") dayalı grafik görüntülemek için bir açılan eklemek için çalışıyorum Şimdiye kadar var. Açılan değerleri kabul etmek için bunu nasıl değiştirebilirim?CodeIgniter ve Google grafikleri - açılan mysql değerlerine göre

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); 
} 

önceden 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> 

teşekkürler!

GÜNCELLEME:

Ben ajax kullanarak aşağıda denedim ama çalışmak için görünmüyor. Eminim ki burada yanlış bir şey yapıyorum ama emin değilim. Inspect'in kromda kullanılması da herhangi bir hata vermez.

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); 

    } 

} 

önceden 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> 

Teşekkür !!

+0

bir [Gösterge Tablosu] (https://developers.google.com/chart/interactive kullanımı daha kolay olabilir Bir [CategoryFilter] (https://developers.google.com/chart/interactive/docs/gallery/controls#categoryfilter) ile kombinasyon halinde/docs/gallery/controls # dashboard) - google filtrelemeyi yapalım ... – WhiteHat

+0

@WhiteHat Çözümü için çok teşekkürler t harika çalışıyor. Ayrıca, model.php'de farklı bir işlev çalıştırmak ve aynı grafikte görüntülemek için değeri göndermek isteyip istemediğimi sormak istedim. Örneğin, zaman değiştiyse, aynı tablonun farklı bir MySQL sorgusunu, aynı sütunlar için farklı bir değerler kümesini döndürecek şekilde çağırmak istedim. –

+0

php'de değil, javascript'ten ajax kullanacağım - ama bir get isteği gönderebildiğiniz gibi görünüyor - ya da veriler çok büyük değilse, daha fazlasını ekleyin ve bir DateRangeFilter'de atınız ... – WhiteHat

cevap

0

göndermek
ve <input type="submit"> düğme ile bir <form> GET kullanır sonunda ajax. @ WhiteHat çözümü de doğru yönde yol açtı. Bunun için teşekkürler!

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(); 

    $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

Ben kolay şey, <option> değeri

İlk GET isteği göndermek ilk sürüme geri gitmek olurdu düşünüyorum .

Sonraki Modeli

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

Sonra onchange olay değeri göndermek -
get_chart_data()

Birlikte değere erişmek mümkün olmalıdır -
$_GET['option']

Sorgunuzu değiştirmek için bunu kullanın

burada benzer konsepti ile eski cevabı - farkı POST vs ben sorun oldu ve kullanılmış anlamaya başardı isteği
How to pass JavaScript variables to PHP?

+0

umarım bu yardımcı olur, 'ajax' yerine arama yapmak için kullanabilirsiniz 'location = ...' kullanarak - ama bence daha fazla iş gerektirecek ... – WhiteHat

İlgili konular