[opgelost] Hoe krijg ik een dinamic-grafiek?
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.
Code (php)
De reeks die ik krijg is: [["2018-05-02", 10.00], ["2018-05-03", 165.00], ["2018-05-05", 10.00]];
Maar als ik mijn grafiek wil zien, gebruik ik:
Code (php)
1
2
3
4
2
3
4
<script type="text/javascript">
$(document).ready(function(){
var line1 = [["2018-05-02",10.00], ["2018-05-03",165.00], ["2018-05-05",10.00]];
...
$(document).ready(function(){
var line1 = [["2018-05-02",10.00], ["2018-05-03",165.00], ["2018-05-05",10.00]];
...
Hoe krijg ik de eerste code in de code voor de grafiek?
Hoe krijg ik een dinamic-grafiek?
met vriendelijke groet,
Frits van Leeuwen
Gewijzigd op 10/06/2018 18:36:39 door Frits van Leeuwen
Als $journaalposten een array van arrays is kun je toch ook gewoon json_encode($journaalposten); gebruiken?
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 = ;
var line1 = [];
maar geen van deze varianten geeft een grafiek.
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// ******** 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;
}
$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;
}
Gewijzigd op 10/06/2018 00:16:40 door Frits van Leeuwen
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?
Ja, in regel 36 van de code die ik zojuist plaatste. Want de string moet quots hebben om de datum heen. Niet om de records.
Prepared statements in mysqli is trouwens ontzettend omslachtig. Bovenstaande code kan korter en eenvoudiger.
En als je enkele quotes om de datum zet ipv dubbele quotes?
Code (php)
1
$journaalposten[] = array(date('Y-m-d',strtotime($journaalposten_datum)), $totaal_debet_bedrag);
json_encode() regelt de rest.
Keep it simple.
Toevoeging op 10/06/2018 11:39:01:
Dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?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;
}
?>
// ******** 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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?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
?>
// @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
?>
prepare()
bind_param()
store_result()
get_result()
bind_result()
close()
... aint nobody got time for that
Gewijzigd op 10/06/2018 11:52:24 door Thomas van den Heuvel
[["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.
Bedankt om mij aan een oplossing te helpen.
Gewijzigd op 10/06/2018 12:50:36 door Frits van Leeuwen
Frits van Leeuwen op 10/06/2018 11:57:05:
De reductie van de code heeft toch geen invloed op het resultaat?
Nee, maar het maakt je code wel een stuk beter leesbaar en hanteerbaar.
Frits van Leeuwen op 10/06/2018 11:57:05:
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.
[["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.
Dit komt (nog steeds) omdat MySQL alles als string teruggeeft.
Als je wilt dat json_encode() numerieke waarden niet voorziet van quotes, voeg dan de flag JSON_NUMERIC_CHECK toe: json_encode($vars, JSON_NUMERIC_CHECK).
Gewijzigd op 10/06/2018 13:36:43 door Thomas van den Heuvel