2017-11-10 3 views
0

私は、変数を変更するときにグラフを動的に表示できるレポートを作成しています。私は以下のステップに従います: 1.変数dateをindex.htmlフォームに入力し、開始日と終了日をget_data.php 2. get_data.phpはpost変数の日付を基にしてsqlを実行し、配列を取得します。 3. get_data.phpの配列のベースはindex.htmlに戻り、グラフとして表示されます。 これはすべてindex.htmlでのみ発生し、get_data.phpには行かないフォームから変数を入力して別のPHPからチャートを更新するには?

私が直面しているエラーは、get_data.phpを正しく実行できても、結果がインデックスに返されないことです.htmlと正しく表示されます。以下のように私のコード:

index.htmlを

<script type="text/javascript" src="https://canvasjs.com/assets/script/jquery-1.11.1.min.js"></script> 
 
<script type="text/javascript" src="https://canvasjs.com/assets/script/canvasjs.min.js"></script> 
 
<script type="text/javascript"> 
 
window.onload = function() { 
 
\t var chart = new CanvasJS.Chart("chartContainer", { 
 
\t \t theme: "theme2", 
 
\t \t title: { 
 
\t \t \t text: "User" 
 
\t \t }, 
 
\t \t data: [ 
 
\t \t { 
 
\t \t \t type: "column", 
 
\t \t \t dataPoints: [ 
 
\t \t \t \t <?php require('last_month_report.php'); echo str_replace("}{", "},{", $dataset);?> 
 
\t \t \t \t \t 
 
\t \t \t ] 
 
\t \t } 
 
\t \t ] 
 
\t }); 
 
\t chart.render(); 
 

 
\t $("#apply").click(function() { 
 
\t var data = $("#report :input").serializeArray(); 
 
\t $.post($("#report").attr("action"), data, function(updatedata) { 
 
      dataPoints.push(updatedata); 
 
     chart.render(); 
 
     updateChart(); 
 
    }); 
 
\t }); 
 

 
\t $("#report").submit(function() { 
 
\t \t return false; 
 
\t }); \t 
 
}; 
 
</script>
<!DOCTYPE html> 
 
<html> 
 
<body> 
 
    <form action="get_data.php" method="post" id="report"> 
 
     <input type="date" name="start_date" id="start_date"> 
 
     <input type="date" name="end_date" id="end_date"> 
 
     <button id="apply" type="submit">Apply</button> 
 
    </form> 
 
    <div id="chartContainer"></div> 
 
</body> 
 
</html>

get_data.php

<?php 
 
$start_date = $_POST[start_date]; 
 
\t \t \t \t $end_date = $_POST[end_date]; 
 
\t \t \t \t $link=mysql_connect('localhost','root','123'); 
 
\t \t \t \t mysql_set_charset('utf8', $link); 
 
\t \t \t \t $selectdb=mysql_select_db('test',$link); 
 
\t \t \t \t $sql="SELECT date, \t user FROM `report` WHERE date >= '$start_date' and date <= '$end_date'"; 
 
\t \t \t \t $result = mysql_query($sql, $link); 
 

 
\t \t \t \t $init=0; 
 
\t \t \t \t $num=mysql_num_rows($result); 
 
\t \t \t \t while ($init < $num) { 
 
\t \t \t \t \t $row=mysql_fetch_array($result); 
 
\t \t \t \t \t $dataset = $dataset . '{label: "' . $row[date] . '",y: ' . $row[date] . '}'; 
 
\t \t \t \t \t $init++; 
 
\t \t \t \t } 
 
?>

+1

1. '$ _POST [インデックス]'は動作しませんが、 '$ _POST [ "インデックス"]'意志でなければなりません。 ** **廃止予定の 'mysql_ *' APIを使用して**停止してください。 'mysqli_ *'やPDO –

+0

を使う 'mysql_ *'関数を使わないでください。それらはv5.5(2013年6月)から廃止され、v7.0(2015年12月)以降削除されました。代わりに[** mysqli _ ***](https://secure.php.net/manual/en/book.mysqli.php)または[** PDO **](https://secure.php.net/** ** prepared statements **](https://secure.php.net/manual/en/pdo.prepare.php)と[**バインドされたパラメータ** ](https://secure.php.net/manual/en/pdostatement.bindparam.php)。 –

+0

あなたのコードは[** SQLインジェクション**](https://en.wikipedia.org/wiki/SQL_injection)攻撃に対して脆弱です。あなたは[** mysqli **](https://secure.php.net/manual/en/mysqli.prepare.php)または[** PDO **](https ://secure.php.net/manual/en/pdo.prepared-statements.php)ドライバ。 [**この記事**](https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)には、いくつかの良い例があります。 –

答えて

0

これらの文句を言わない仕事

 $start_date = $_POST[start_date]; 
    $end_date = $_POST[end_date]; 

" "を逃すことは

 $start_date = $_POST["start_date"]; 
    $end_date = $_POST["end_date"]; 
関連する問題