Php 我无法从代码中获得所需的结果
我需要使用google Visualization api从mysql数据库创建dataTable。所以我这样做:Php 我无法从代码中获得所需的结果,php,mysql,sql,datatable,Php,Mysql,Sql,Datatable,我需要使用google Visualization api从mysql数据库创建dataTable。所以我这样做: try { $rez = $db->prepare("SELECT naziv FROM track_aktivnosti WHERE id_akt = :id_akt AND prvi=1 AND user_id=:user_id"); $rez->execute(array(':id_akt' => $_POST['id_akt'], ':user_
try {
$rez = $db->prepare("SELECT naziv FROM track_aktivnosti WHERE id_akt = :id_akt AND prvi=1 AND user_id=:user_id");
$rez->execute(array(':id_akt' => $_POST['id_akt'], ':user_id' => $user_id));
$kol = $rez->fetchAll();
$rows = array();
$rows1 = array();
$table = array();
$table = array();
$rows[] = array('label' => 'Datum', 'type' => 'string');
foreach ($kol as $r) {
$rows[] = array('label' => (string) $r['naziv'], 'type' => 'string');
}
$table['cols'] = $rows;
// convert data into JSON format
$result = $db->prepare("SELECT datum FROM track_aktivnosti
WHERE id_akt = :id_akt
AND user_id=:user_id
GROUP BY datum ORDER BY datum");
$result->execute(array(':id_akt' => $_POST['id_akt'], ':user_id' => $user_id));
$dates = $result->fetchAll();
$final_result = array();
$rows1 = array();
foreach ($dates as $date) {
$result = $db->prepare("SELECT vrednost, naziv
FROM track_aktivnosti
WHERE id_akt = :id_akt
AND datum = :datum
AND user_id= :user_id");
$result->execute(array(':id_akt' => $_POST['id_akt'],
':datum' => $date['datum'],
':user_id' => $user_id));
$m = array(array('v' => $date['datum']));
foreach ($result as $r) {
$m[] = array('v' => (int) $r['vrednost']);
}
$rows1[] = array('c' => $m);
$table['rows'] = $rows1;
}
} catch (PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
echo json_encode($table);
所以一切都很好,但这段代码会更改行值。。。从mysql数据库和前端dataTable中可以看到:所以dataTable是:(对于id_akt=82)
mysql数据库是:
所以,正如您在datatable中看到的,我得到的是fdfdfd
值56,而不是76和类似值。。。我怎样才能解决这个问题
使用JS代码更新:
function drawTroskovnik() {
var cssClassNames = {
'headerRow': 'zaglavlje',
'tableRow': 'red',
'oddTableRow': 'red',
'selectedTableRow': 'orange-background large-font',
'hoverTableRow': 'prekoreda',
'headerCell': 'gold-border',
'tableCell': 'cell',
'rowNumberCell': 'underline-blue-font'
};
// Create and populate the data table.
var JSONObject = $.ajax({
url: 'getTroskovnik.php', // make this url point to the data file
dataType: 'json',
data: {id_akt: ajdi},
async: false,
type: 'POST',
}).responseText;
var data = new google.visualization.DataTable(JSONObject, 0.5);
for (var y = 0, maxrows = data.getNumberOfRows(); y < maxrows; y++) {
for (var x = 1, maxcols = data.getNumberOfColumns(); x < maxcols; x++) {
data.setValue(y, x, '<input vr="' + data.getValue(y, 0) + '" kol="' + data.getColumnLabel(x) + '" class="form-control costRedovi" value="' + data.getValue(y, x) + '">');
}
}
for (var y = 0, maxrows = data.getNumberOfRows(); y < maxrows; y++) {
data.setValue(y, 0, '<input class="span2 form-control" id="pocetak1" size="16" type="text" value="' + data.getValue(y, 0) + '" readonly>');
}
data.addColumn('string', '');
for (var y = 0, maxrows = data.getNumberOfRows(); y < maxrows; y++) {
var mc = data.getNumberOfColumns() - 1;
data.setValue(y, mc, '<div data-toggle="tooltip" data-placement="top" title="Delete this day data"><i class="fa fa-trash-o" ></i></div>');
}
var table = new google.visualization.Table(document.getElementById('tpltroskovnik'));
new google.visualization.events.addListener(table, 'ready', function() {
$(".costRedovi").focusout(function() {
var vrednost = $(this).val();
var datum = $(this).attr('vr');
var tabela = $(this).attr('kol');
console.log(datum + " " + tabela + " " + vrednost);
$.ajax({
url: "updateCost.php",
type: "POST",
async: true,
data: {ajdi: ajdi, datum: datum, tabela: tabela, vrednost: vrednost}, //your form data to post goes here as a json object
dataType: "html",
success: function(data) {
console.log(data);
},
});
});
});
table.draw(data, {'allowHtml': true, cssClassNames: {
'headerRow': 'zaglavlje',
'tableRow': 'red',
'oddTableRow': 'red',
'selectedTableRow': 'orange-background large-font',
'hoverTableRow': 'prekoreda',
'headerCell': 'gold-border',
'tableCell': 'cell',
'rowNumberCell': 'underline-blue-font'}
});
};
函数drawTroskovnik(){
变量cssClassNames={
“headerRow”:“zaglavlje”,
“tableRow”:“红色”,
“oddTableRow”:“红色”,
“selectedTableRow”:“橙色背景大字体”,
“hoverTableRow”:“prekoreda”,
“headerCell”:“黄金边界”,
“tableCell”:“cell”,
“rowNumberCell”:“下划线蓝色字体”
};
//创建并填充数据表。
var JSONObject=$.ajax({
url:'getroskovnik.php',//使此url指向数据文件
数据类型:“json”,
数据:{id_akt:ajdi},
async:false,
键入:“POST”,
}).responseText;
var data=新的google.visualization.DataTable(JSONObject,0.5);
对于(变量y=0,maxrows=data.getNumberOfRows();y$rez = $db->prepare("SELECT naziv FROM track_aktivnosti WHERE id_akt = :id_akt AND prvi=1 AND user_id=:user_id");
...
$result = $db->prepare("SELECT vrednost, naziv FROM track_aktivnosti WHERE id_akt = :id_akt AND datum = :datum AND user_id= :user_id");
将ORDER BY naziv
添加到每个结果的末尾,以将结果排序为可预测的对齐方式,然后将其正确加载到关联数组中,后面是JSON对象
下面是您的代码的一个调整版本,它解决了一些其他非关键问题:
<?php
try {
$res = $db->prepare('SELECT naziv FROM track_aktivnosti WHERE id_akt = :id_akt AND user_id = :user_id AND prvi = 1 ORDER BY naziv');
$res->execute(array(':id_akt' => $_POST['id_akt'], ':user_id' => $user_id));
$kol = $res->fetchAll();
$rows = array();
$table = array();
$rows[] = array('label' => 'Datum', 'type' => 'string');
foreach ($kol as $r) {
$rows[] = array('label' => (string) $r['naziv'], 'type' => 'string');
}
$table['cols'] = $rows;
$res = $db->prepare('SELECT datum FROM track_aktivnosti WHERE id_akt = :id_akt AND user_id = :user_id GROUP BY datum ORDER BY datum');
$res->execute(array(':id_akt' => $_POST['id_akt'], ':user_id' => $user_id));
$dates = $res->fetchAll();
$rows = array();
foreach($dates as $date){
$res = $db->prepare('SELECT vrednost FROM track_aktivnosti WHERE id_akt = :id_akt AND user_id = :user_id AND datum = :datum ORDER BY naziv');
$res->execute(array(':id_akt' => $_POST['id_akt'], ':user_id' => $user_id, ':datum' => $date['datum']));
$vals = $res->fetchAll();
$m = array( array( 'v' => $date['datum'] ) );
foreach($vals as $r) {
$m[] = array('v' => (int) $r['vrednost']);
}
$rows[] = array('c' => $m);
$table['rows'] = $rows;
}
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
echo json_encode($table);
?>
检查生成的数组,然后检查代码逻辑代码逻辑是否正常,但我在前端得到了不同的结果…您能检查json是否如下所示吗<代码>{“cols”:[{“label”:“Datum”,“type”:“string”},{“label”:“fdfdfd”,“type”:“string”},{“label”:“IMT 510 td”,“type”:“string”},,“rows”:[{“c”:[{“v”:“2013-04-01”},{“v”:1},{“v”:5},{“c”:[{“v”:“2014-04-16},{“v”:76},{“v”:56},{“c”:“v”:“v”:“v”:“2013-04-04-01”},{“v”:1},{“v”:1},{“v”:5},{“v”:5},},{“v”:4},{。我尝试重新创建一切,得到了json数据并将这些数据转储到Google的DataTable中,它显示了我认为正确的表。也许你应该发布你的javascript代码?我用JS代码更新了这个问题,请用一个描述性的标题重命名这个标题,比如“使用google Visualization api从mysql数据库创建dataTable”,这样会更好地吸引那些能提供帮助的人。没错,anser,但是为什么你要使用$\u GET,我使用$\u POST我认为使用POST更好?我临时更改了它以便于故障排除(这样我就可以在URL中使用必要的变量自行加载页面),但在这里发布时忘记将其更改回POST。我修复了它。它容易受到sql注入的攻击吗?不,检查这个:“准备好的语句的参数不需要被引用;驱动程序会自动处理它。”太棒了!