Door
Frits van Leeuwen
op 09-06-2018 21:54
gewijzigd op 10-06-2018 18:36
2.768 views
Hallo allemaal,
Wie kan me helpen. Wanneer ik de gegevens in de code plaats, krijg ik perfect een grafiek. Maar wanneer ik de gegevens genereer, krijg ik geen grafiek.
Ik gebruik deze code om de string te maken, en dat ziet er ook goed uit.
Thomas van den Heuvel, bedankt voor de snelle reactie.
Dat had ik ook gehoopt, ik vond dat al wel ergens, maar helaas, ik krijg dan geen grafiek in beeld.
Ik vul het volgende in:
var line1 = json_encode($journaalposten);
var line1 = [json_encode($journaalposten)];
var line1 = <?php json_encode($journaalposten); ?>;
var line1 = [<?php json_encode($journaalposten); ?>];
maar geen van deze varianten geeft een grafiek.
Ik denk dat we in de buurt komen. Ik krijg nu wel de layout van de grafiek, maar niet de punten.
Als ik de string in beeld zet krijg ik dit
[[""2018-05-02",10.00"],[""2018-05-03",165.00"],[""2018-05-05",10.00"]]
De quotjes die ik om de datum heen heb geplaatst, worden nu vergezeld door quotjes om het record.
// ******** Hier volgt de query voor de grafiek **********
$query_journaalposten_debet = "SELECT journaalposten_datum, sum(journaalposten_bedrag) as totaal_debet_bedrag FROM tabel_journaalposten
WHERE journaalposten_administratie=?
AND journaalposten_inkomsten=TRUE
AND journaalposten_datum>=?
AND journaalposten_datum<=?
GROUP BY journaalposten_datum";
if ($stmt_journaalposten_debet = $dbh->prepare($query_journaalposten_debet)){
/*
Binds variables to prepared statement
i corresponding variable has type integer
d corresponding variable has type double
s corresponding variable has type string
b corresponding variable is a blob and will be sent in packets
*/
$stmt_journaalposten_debet->bind_param("iss", $adm_id, $datum1, $datum2);
/* execute query */
$stmt_journaalposten_debet->execute();
/* Store the result (to get properties) */
$stmt_journaalposten_debet->store_result();
/* Get the number of rows */
$num_of_rows = $stmt_journaalposten_debet->num_rows;
//$result_journaalposten_debet = $stmt_journaalposten_debet->get_result();
/* Bind the result to variables */
$stmt_journaalposten_debet->bind_result($journaalposten_datum, $totaal_debet_bedrag);
while ($line = $stmt_journaalposten_debet->fetch()) {
$journaalposten[] = array( """ . date('Y-m-d',strtotime($journaalposten_datum)) . ""," . $totaal_debet_bedrag);
}
/* free results */
$stmt_journaalposten_debet->free_result();
/* close statement */
$stmt_journaalposten_debet->close();
} else {
echo "Prepare failed: (" . $dbh->errno . ") " . $dbh->error;
}
Uhm, hoe ziet $journaalposten er dan uit? Probeer het vooral simpel te houden. Er zijn functies die je het een stuk eenvoudiger maken, tenzij je hele slimme dingen probeert te doen die minder handig uitpakken. Voeg je ergens quotes toe?
[size=xsmall]Toevoeging op 10/06/2018 11:39:01:[/size]
Dit:
<?php
// ******** Hier volgt de query voor de grafiek **********
$query_journaalposten_debet = "SELECT journaalposten_datum, sum(journaalposten_bedrag) as totaal_debet_bedrag FROM tabel_journaalposten
WHERE journaalposten_administratie=?
AND journaalposten_inkomsten=TRUE
AND journaalposten_datum>=?
AND journaalposten_datum<=?
GROUP BY journaalposten_datum";
if ($stmt_journaalposten_debet = $dbh->prepare($query_journaalposten_debet)){
/*
Binds variables to prepared statement
i corresponding variable has type integer
d corresponding variable has type double
s corresponding variable has type string
b corresponding variable is a blob and will be sent in packets
*/
$stmt_journaalposten_debet->bind_param("iss", $adm_id, $datum1, $datum2);
/* execute query */
$stmt_journaalposten_debet->execute();
/* Store the result (to get properties) */
$stmt_journaalposten_debet->store_result();
/* Get the number of rows */
$num_of_rows = $stmt_journaalposten_debet->num_rows;
//$result_journaalposten_debet = $stmt_journaalposten_debet->get_result();
/* Bind the result to variables */
$stmt_journaalposten_debet->bind_result($journaalposten_datum, $totaal_debet_bedrag);
while ($line = $stmt_journaalposten_debet->fetch()) {
$journaalposten[] = array( """ . date('Y-m-d',strtotime($journaalposten_datum)) . ""," . $totaal_debet_bedrag);
}
/* free results */
$stmt_journaalposten_debet->free_result();
/* close statement */
$stmt_journaalposten_debet->close();
} else {
echo "Prepare failed: (" . $dbh->errno . ") " . $dbh->error;
}
?>
Kan gereduceerd worden tot dit:
<?php
// @todo controleer hier of $adm_id, $datum1 en $datum2 het goede formaat hebben
$res = $dbh->query(
"SELECT journaalposten_datum, SUM(journaalposten_bedrag) AS totaal_debet_bedrag
FROM tabel_journaalposten
WHERE journaalposten_administratie = '".$db->real_escape_string($adm_id)."'
AND journaalposten_inkomsten=TRUE
AND journaalposten_datum >= '".$db->real_escape_string($datum1)."'
AND journaalposten_datum <= '".$db->real_escape_string($datum2)."'
GROUP BY journaalposten_datum"
);
// NB mogelijk werkt BETWEEN hier ook voor de datums
$journaalposten = [];
while ($row = $res->fetch_assoc()) {
$journaalposten[] = [
date('Y-m-d', strtotime($row['journaalposten_datum'])),
$row['totaal_debet_bedrag']
];
}
$res->free_result();
// doe hier je ding met $journaalposten
?>
De string die ik dan krijg is:
[["2018-05-02","10.00"],["2018-05-03","165.00"],["2018-05-05","10.00"]]
Om de datum heen is dat goed, maar om het bedrag heen niet.
Maar het werkt wel.
De reductie van de code heeft toch geen invloed op het resultaat?
BETWEEN werkt inderdaad ook. Ik kende deze mogelijkheid niet.