[opgelost] Hoe krijg ik een dinamic-grafiek?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Frits van Leeuwen

Frits van Leeuwen

09/06/2018 21:54:57
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
          $i
=0;
          echo "[";
          for ($i=0;$i<($num_of_rows-1);$i++){
            echo implode(" ",$journaalposten[$i]) . ", ";
          }

          echo implode(" ",$journaalposten[$num_of_rows-1]) . "]";
       ?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
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]];
        ...


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
 
PHP hulp

PHP hulp

24/11/2024 14:14:47
 
Thomas van den Heuvel

Thomas van den Heuvel

09/06/2018 21:59:44
Quote Anchor link
Als $journaalposten een array van arrays is kun je toch ook gewoon json_encode($journaalposten); gebruiken?
 
Frits van Leeuwen

Frits van Leeuwen

09/06/2018 23:25:44
Quote Anchor link
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 =
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php json_encode($journaalposten); ?>
;
var line1 = [
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php json_encode($journaalposten); ?>
];
maar geen van deze varianten geeft een grafiek.
 
Ozzie PHP

Ozzie PHP

09/06/2018 23:31:15
Quote Anchor link
Plaats vóór json_encode($journaalposten) eens het woord 'echo', dus:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo json_encode($journaalposten); ?>
 
Frits van Leeuwen

Frits van Leeuwen

10/06/2018 00:11:51
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
// ******** 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( "&#034;" . date('Y-m-d',strtotime($journaalposten_datum)) . "&#034;," . $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
 
Thomas van den Heuvel

Thomas van den Heuvel

10/06/2018 00:18:15
Quote Anchor link
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?
 
Frits van Leeuwen

Frits van Leeuwen

10/06/2018 00:22:15
Quote Anchor link
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

10/06/2018 00:36:44
Quote Anchor link
Dat hebben ze volgens mij al - alles wat uit je database komt zijn sowieso strings.

Prepared statements in mysqli is trouwens ontzettend omslachtig. Bovenstaande code kan korter en eenvoudiger.
 
Ozzie PHP

Ozzie PHP

10/06/2018 00:38:41
Quote Anchor link
En als je enkele quotes om de datum zet ipv dubbele quotes?
 
Thomas van den Heuvel

Thomas van den Heuvel

10/06/2018 00:54:04
Quote Anchor link
Volgens mij niet nodig. Probeer gewoon eens:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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( "&#034;" . date('Y-m-d',strtotime($journaalposten_datum)) . "&#034;," . $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)
PHP script in nieuw venster Selecteer het PHP script
1
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
?>


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
 
Frits van Leeuwen

Frits van Leeuwen

10/06/2018 11:57:05
Quote Anchor link
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.

Bedankt om mij aan een oplossing te helpen.
Gewijzigd op 10/06/2018 12:50:36 door Frits van Leeuwen
 
Thomas van den Heuvel

Thomas van den Heuvel

10/06/2018 13:33:24
Quote Anchor link
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.

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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.