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. '$ _POST [インデックス]'は動作しませんが、 '$ _POST [ "インデックス"]'意志でなければなりません。 ** **廃止予定の 'mysql_ *' APIを使用して**停止してください。 'mysqli_ *'やPDO –
を使う '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)。 –
あなたのコードは[** 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)には、いくつかの良い例があります。 –