Ankündigung

Einklappen
Keine Ankündigung bisher.

JpGraph läd Daten aus MySql Query nicht um eine Graphik zu erstellen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • JpGraph läd Daten aus MySql Query nicht um eine Graphik zu erstellen

    Ich habe ein Problem beim erstellen ein einfachen Graphik mit JpGraph. Wenn ich Testdaten verwende läuft alles wunderbar:

    graph.png

    Wenn ich allerdings den Array fpr JpGraph mit einer MySql-Abfrage fülle bekomme ich diesen Fehler:

    error.png


    Beide Arrays enthalten Daten, wenn ich sie mittel print_r ausgebe:

    output array data.png

    Das ist der PHP Code, welcher zum Fehler führt:

    PHP-Code:
    include ('../include/dbconfig.php');
    require_once (
    'jpgraph/jpgraph.php');
    require_once (
    'jpgraph/jpgraph_line.php');
    require_once (
    'jpgraph/jpgraph_error.php');

    $id $_GET['id'];
    $sql "SELECT ph FROM `fishtank_monitoring` WHERE rackid = '$id' ORDER BY monitored ASC ";
    $result mysqli_query($link$sql) OR die(mysqli_error());

    $i=0;
    while (
    $row=mysqli_fetch_array($result)) {
       
    $ph[$i]=$row[0];
       
    $i++;
    }
    mysqli_close();
    // CREATE SOME DATA
    #$ph_test = array(7.4,6.8,7,6.9,4,6);

    // CREATE THE GRAPH.
    $graph = new Graph(279,200);
    $graph->SetScale('textlin');

    // CREATE THE LINEAR PLOT.
    $lineplot=new LinePlot($ph);
    $lineplot->SetColor('blue');

    // ADD THE PLOT TO THE GRAPH AND DISPLAY IT.
    $graph->Add($lineplot);
    $graph->Stroke(); 
    Habe schon alles mögliche probiert und komme nicht weiter. Hat jemand eine Idee? ....würde mich über Tips freuen!!!

  • #2
    Mal mal var_dump() anstelle von print_r().

    Könnte sein, dass Deine Abfrage aus der Datenbank Strings ergibt und jpgraph damit nichts anfangen kann. Oder damit was falsch macht. Oder was auch immer.

    Übrigens hast du eine SQL-Injection-Lücke. Niemals GET oder POST Parameter direkt in eine Abfrage einfügen, verwende Prepared Statements.

    Kommentar


    • #3
      Zitat von ctroidl Beitrag anzeigen
      Ich habe ein Problem (...)

      Habe schon alles mögliche probiert und komme nicht weiter. Hat jemand eine Idee? ....würde mich über Tips freuen!!!
      Bitte lese doch das forgeschritteten announce - bevor du in dem unterforum postet

      Kommentar


      • #4
        Könnte sein, dass Deine Abfrage aus der Datenbank Strings ergibt
        Danke jonas3344 !!!!, var_dump() "did the trick":

        var_dump_output.png

        Weiß zwar noch nicht genau wieso, da die Werte als floats in der Datenbank hinterlegt sind, aber das bringt mich auf jeden Fall weiter.


        Kommentar


        • #5
          Zitat von tomBuilder Beitrag anzeigen

          Bitte lese doch das forgeschritteten announce - bevor du in dem unterforum postet
          Werde mich in Zukunft dran halten....

          Kleine Anmerkung :

          Bitte lese doch das Fortgeschrittenen-Announcement - bevor du in dem Unterforum postest

          Kommentar


          • #6
            Zitat von ctroidl Beitrag anzeigen

            Werde mich in Zukunft dran halten....

            Kleine Anmerkung :

            Bitte lese doch das Fortgeschrittenen-Announcement - bevor du in dem Unterforum postest
            danke - ich finde es immer wieder nett aus meine sehschwäche und legastrenie hingewiesen zu werden ^^

            Kommentar


            • #7
              Zitat von ctroidl Beitrag anzeigen

              Danke jonas3344 !!!!, var_dump() "did the trick":

              var_dump_output.png

              Weiß zwar noch nicht genau wieso, da die Werte als floats in der Datenbank hinterlegt sind, aber das bringt mich auf jeden Fall weiter.
              https://www.php.net/manual/de/mysqli...etch-array.php

              Zitat: "Returns an array of strings"

              Verwende prepared Statements.

              PHP-Code:
              $sql "SELECT ph FROM `fishtank_monitoring` WHERE rackid = ? ORDER BY monitored ASC ";  
              $stmt $db->prepare($sql);
              stmt->bind_param('i'$_GET['id']);
              $stmt->execute();
              $result $stmt->get_result();  
              while (
              $row $result->fetch_assoc()) {    
                  
              $ph[]=$row['ph'];
              }
              var_dump($ph); 
              Im Browser getippt, ohne Garantie auf vollständige Korrektheit.

              Kommentar


              • #8
                Zu früh gefreut

                habe mit float die array elemente umgewndelt:

                PHP-Code:
                $i=0;
                while (
                $row=mysqli_fetch_array($result)) {
                        
                $ph[$i]=(float)$row[0];
                        
                $i++;





                in_float.png

                Werte im array $ph sind zwar jetzt vom Typ float, bekomme aber immer noch diese Fehlermeldung von JpGraph



                error.png


                mit $ph_test funktioniert es

                PHP-Code:
                $ph_test = array(7.4,6.8,7,6.9,4.5,6); 

                Kommentar


                • #9
                  Zitat von jonas3344 Beitrag anzeigen

                  https://www.php.net/manual/de/mysqli...etch-array.php

                  Zitat: "Returns an array of strings"

                  Verwende prepared Statements.

                  PHP-Code:
                  $sql "SELECT ph FROM `fishtank_monitoring` WHERE rackid = ? ORDER BY monitored ASC ";
                  $stmt $db->prepare($sql);
                  stmt->bind_param('i'$_GET['id']);
                  $stmt->execute();
                  $result $stmt->get_result();
                  while (
                  $row $result->fetch_assoc()) {
                  $ph[]=$row['ph'];
                  }
                  var_dump($ph); 
                  Im Browser getippt, ohne Garantie auf vollständige Korrektheit.
                  Hab es gleich eingebaut: fehlte nur ein $ in Zeile 3 und bei mir ist $db --> $link

                  Danke für's schnelle tippen.

                  Kommentar


                  • #10
                    Wie sieht denn jetzt Dein Code aus?

                    Kommentar


                    • #11
                      PHP-Code:
                      <?php
                      include ('../include/session.php');
                      include (
                      '../include/dbconfig.php');
                      require_once (
                      'jpgraph/jpgraph.php');
                      require_once (
                      'jpgraph/jpgraph_line.php');
                      require_once (
                      'jpgraph/jpgraph_error.php');
                      $id $_GET['id'];

                      $sql "SELECT ph FROM `fishtank_monitoring` WHERE rackid = ? ORDER BY monitored ASC ";
                      $stmt $link->prepare($sql);
                      $stmt->bind_param('i'$_GET['id']);
                      $stmt->execute();
                      $result $stmt->get_result();
                      while (
                      $row $result->fetch_assoc()) {
                          
                      $ph[]=$row['ph'];
                      }

                      // CREATE SOME DATA.
                      #$ydata = array(11.9,3.1,8,42.4,5);
                      $ph_test = array(7.4,6.8,7,6.9,4.5,6);

                      // echo "var_dump output \$ph:<br>";
                      // var_dump($ph);
                      // echo "<br><br>";
                      // echo "var_dump output \$ph_test:<br>";
                      // var_dump($ph_test);
                      // exit;

                      // CREATE THE GRAPH.
                      $graph = new Graph(279,200);
                      $graph->SetScale('textlin');


                      // CREATE THE LINEAR PLOT.
                      $lineplot=new LinePlot($ph);
                      $lineplot->SetColor('blue');
                      // ADD THE PLOT TO THE GRAPH AND DISPLAY IT.
                      $graph->Add($lineplot);

                      $graph->Stroke();
                      ?>

                      Kommentar


                      • #12
                        Bei mir tut dieser Code. Eine andere Abfrage, welche aber auch einen Array mit Float-Werten zurückgibt. Ich kann Dir so nicht beantworten, was du da falsch machst.

                        Kommentar


                        • #13
                          hier die mysql tabelle. Ist da was nicht korrekt?

                          mysql_table.png

                          Danke trotzdem, dass du dich rein gehängt hast.... werd weiter probieren!

                          Kommentar


                          • #14
                            Die Ursache das es mit der DB-Abfrage nicht funktioniert kann auch eine Kleinigkeit sein. Gib doch mal mit
                            PHP-Code:
                            echo '<pre>';
                            var_export($ph); 
                            deine Werte aus. Diese kannst du kopieren und bei $ph_test dann einfügen, nachdem du dich von der Funktion mit obigen $ph_test Werten nochmal überzeugt hast.
                            So kannst du feststellen ob es an den Werten liegt.
                            Tipp: Nicht mit unterschiedlichen Variablennamen arbeiten. Du kannst z.B. immer mit $ph arbeiten und die Zeilen auskommentieren welche du nicht brauchst.

                            Kommentar


                            • #15
                              Ich habe noch etwas heraus gefunden. Wenn ich die Datei aquarium_graph.php direkt im Browser über

                              Code:
                              http://"myhost"/aquareg/graph/aquarium_graph.php?id=1
                              dann klappt es!!!

                              Wenn ich die Graphik allerdings so wie in den diversen JP-Graph-Foren beschrieben in eine andere Datei mittels

                              Code:
                              echo "<img src='../graph/aquarium_graph.php'>";

                              einbinden will, dann poppt der Fehler von JpGraph auf?

                              Kommentar

                              Lädt...
                              X