Ankündigung

Einklappen
Keine Ankündigung bisher.

Mysql Aufrufe pro monat auslesen und in einen Graph eintragen?

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

  • Mysql Aufrufe pro monat auslesen und in einen Graph eintragen?

    ALL-INKL.COM - Webhosting Server Hosting Domain Provider
    Hallo Forum,

    Ich habe eine Frage bezüglich der einlesung von daten in .js datein.

    Ich zähle die aufrufe der Webseite und trage die werte dann mit einem timestamp ein.
    Diese möchte ich nun in form eines Graphen mit hilfe der Chart.js auf der Webseite ausgeben.
    Dafür muss ich aber nun die gesamtanzahl der werte pro monat in data: [0,0,0,0,0,0,0,0,0,0,0,0], (12werte, jeder monat) eintragen.

    Das ganze soll immer aktuell sein, heißt also [aufrufe vom 01.2020, 02.2019, 03.2019, 04.2019 usw.]

    Wie bekomme ich die Daten aus der Datenbank da eingetragen und sortiert sowie dass mit dem sortieren des Monats aus dem letzten Jahr.
    Hoffe dass ganze ist verständlich.

    mfg ThegreenY
    A computer program does what you tell it to do, not what you want it to do.

  • #2
    Daten von php an Javascript übergeben:
    PHP-Code:
    var data = <?php echo $daten?>
    sigpic

    Kommentar


    • #3
      Das ganze habe ich ja auch schon überlegt, nur ist die Tabellen Struktur in einer .js Datei, sollte ich diese dann daraus kopieren und mittels <script>//inhalt der Chart.js</script> an die stelle einfügen, wo die datei abgefragt bzw der inhalt eingefügt wird?
      Wollte das ganze nämlich gerne so "clean" wie möglich aufbauen und strukturieren. Ist es also möglich die werte in die .js datei zu bekommen?
      A computer program does what you tell it to do, not what you want it to do.

      Kommentar


      • #4
        Das ist kein Problem, Du kannst dein Skript ausgelagert lassen und nur das Übertragen deiner Daten nach Javascript, so wie kuckoobrain es gepostet hat, in die PHP-Datei legen. Die betr. Javascript-Variable ist auch dann in deiner JS-Datei verfügbar.

        Kommentar


        • #5
          Ok, danke für die Antwort, jetzt stehe ich aber noch vor dem Problem wie ich die daten so ordentlich und performant wie möglich in einen Array eintragen kann?
          Habe jetzt eine sehr sehr unschöne variante um die auszulesen, kann man dass irgendwie schöner machen?
          Es sollte auch auf das letzte jahr wechseln wenn er keine Daten aus dem aktuellen jahr hat, also wenn der Jan 2020 vorhanden ist, der Feb 2020 aber nicht soll der Feb 2019 genommen werden.
          Wie lässt sich dass umsetzen?

          Hier mal die unschöne variante wo ich das getestet habe:
          PHP-Code:
          <?php
                  $sql 
          "SELECT * FROM visitors";
                  
          $result mysqli_query($conn$sql);

                  
          $thisyear '2019';
                  
          $month 1;

                  while(
          $month <= 12){
                    
          $query "SELECT * FROM visitors WHERE YEAR(visit_date) = '$thisyear' AND MONTH(visit_date) = '$month'";
                    
          $result mysqli_query($conn$query);

                    if(!
          $result){
                      die(
          "Retriving Query Error<br>".$query);
                      break;
                    }

                    
          $total_visitors_pm mysqli_num_rows($result);
                    
          $total_visitors $total_visitors_pm;

                    
          $month++;
                  }

                  echo 
          $total_visitors;

                
          ?>
          Über hilfe würde ich mich freuen.
          A computer program does what you tell it to do, not what you want it to do.

          Kommentar


          • #6
            SQL ist nicht mein Schwerpunkt, daher kenne ich keine Lösung, wie man die Werte eleganter mit einer Abfrage ermitteln kann.
            Die Monate kann man vom aktuellen Zeitpunkt aus rückwärts über das DateTime-Objekt ermitteln:
            PHP-Code:
            $dt = new DateTime(); // Aktuelle Zeit ermitteln
            $intv = new DateInterval('P1M'); // Intervall auf 1 Monat setzen
            $total_visitors 0;
            $total_visitors_pm[];
            for (
            $i 0$i 12$i++) {
                
            $month $dt->format('n');
                
            $year $dt->format('Y');
                
            $query "SELECT * FROM visitors WHERE YEAR(visit_date) = '$year' AND MONTH(visit_date) = '$month'";
                
            $result mysqli_query($conn$query);

                if(!
            $result){
                    die(
            "Retriving Query Error<br>".$query);
                    break;
                }

                
            $total_visitors_pm[] = mysqli_num_rows($result);
                
            $total_visitors += $total_visitors_pm;
                
            $dt->sub($intv); // Intervall von der aktuellen Zeit subtrahieren

            (ungetestet)
            Zuletzt geändert von Sempervivum; 23.12.2019, 11:23.

            Kommentar


            • #7
              PS: Über das Subtrahieren eines Monats bin ich anschließend ins Grübeln gekommen und bin auf dieses gestoßen:
              https://stackoverflow.com/questions/...racting-months
              Ich gehe mal davon aus, dass sub genau so funktioniert wie modify, dann erhält man manchmal nicht das Ergebnis, das Du brauchst.
              Besser diesen Algorithmus verwenden:
              PHP-Code:
              $dt = new DateTime();
              $month intval($dt->format('n'));
              $year intval($dt->format('Y'));
              for (
              $i 0$i 12$i++) {
                  
              var_dump($month);
                  
              var_dump($year);
                  
              $month--;
                  if (
              $month 1) {
                      
              $month 12;
                      
              $year--;
                  }

              Kommentar


              • #8
                Ich würde das direkt in sql machen:

                Code:
                SELECT YEAR(visit_date) AS 'YEAR',
                       MONTH(visit_date) AS 'MONTH',
                       COUNT(1) AS visits
                  FROM `visitors`
                 WHERE YEAR(visit_date) = '2019'
                 GROUP BY YEAR(visit_date),
                          MONTH(visit_date)
                oder gleich die letzten 12 Monate:

                Code:
                SELECT YEAR(visit_date) AS 'YEAR', 
                       MONTH(visit_date) AS 'MONTH', 
                       COUNT(1) AS visits 
                  FROM `visitors` 
                 WHERE visit_date > DATE_SUB(NOW(), INTERVAL 12 MONTH)
                 GROUP BY YEAR(visit_date), 
                          MONTH(visit_date)
                Zuletzt geändert von Testie; 23.12.2019, 11:59.

                Kommentar


                • #9
                  Zitat von Sempervivum Beitrag anzeigen
                  PS: Über das Subtrahieren eines Monats bin ich anschließend ins Grübeln gekommen und bin auf dieses gestoßen:
                  Ich gehe mal davon aus, dass sub genau so funktioniert wie modify, dann erhält man manchmal nicht das Ergebnis, das Du brauchst.:
                  Erstmal danke für die Antwort, der Code scheint zu funktionieren. Besser und leichter hätte ich es nicht lösen können, jetzt habe ich nur noch ein Problem.

                  Und zwar habe ich wie vorgeschlagen den array mit echo in die datei zu bekommen, das funktioniert aber nicht. Ich habe mal die Config des Graphen mit bei gefügt.
                  Code:
                  // Chart.js scripts
                  var myLineChart = new Chart(ctx, {
                    type: 'line',
                    data: {
                      labels: ["Jan", "Feb", "Mar", "Apr", "May", "Jul", "Jun", "Aug", "Sep", "Oct", "Nov", "Dec"],
                      datasets: [{
                        label: "Sessions",
                        lineTension: 0.3,
                        ... // 9 weitere eigenschaften // ...
                        data: [309, 431, 315, 394, 287, 682, 274, 259, 849, 159, 651, 984],
                      }],
                    },
                    options: {
                      scales: {
                        ...
                  });
                  Ich hoffe ihr könnt mir da weiter helfen, der aktuelle Array der auskommt sieht wie folgt aus:
                  PHP-Code:
                  <?php
                    $total_visitors 
                  = array();
                    
                  $dt = new DateTime();
                    
                  $month intval($dt->format('n'));
                    
                  $year intval($dt->format('Y'));

                    for (
                  $i 0$i 12$i++) {
                      
                  var_dump($month);
                      
                  var_dump($year);
                      
                  $month--;
                      if (
                  $month 1) {
                        
                  $month 12;
                        
                  $year--;
                      }
                      
                  $query "SELECT * FROM visitors WHERE YEAR(visit_date) ='" $year "' AND MONTH(visit_date) = '" $month "'";
                      
                  $result mysqli_query($conn$query);

                      if(!
                  $result){
                        die(
                  "Retriving Query Error<br>".$query);
                      }

                      
                  array_push($total_visitorsmysqli_num_rows($result));
                    }

                    
                  print_r($total_visitors);
                  ?>
                  Zuletzt geändert von ThegreenY; 23.12.2019, 14:28.
                  A computer program does what you tell it to do, not what you want it to do.

                  Kommentar


                  • #10
                    Das einfache Verfahren mit echo funktioniert nur, wenn es sich um eine einfache Variable handelt, nicht bei, möglicher Weise mehrdimensionalen, Arrays. In dem Fall verwendest Du am besten eine JSON-Darstellung:
                    Code:
                    <script>var totalVisitors = <?php echo json_encode($total_visitors); ?>;</script>

                    Kommentar


                    • #11
                      Zitat von Sempervivum Beitrag anzeigen
                      Das einfache Verfahren mit echo funktioniert nur, wenn es sich um eine einfache Variable handelt, nicht bei, möglicher Weise mehrdimensionalen, Arrays. In dem Fall verwendest Du am besten eine JSON-Darstellung:
                      Code:
                      &lt;script&gt;var totalVisitors = &lt;?php echo json_encode($total_visitors); ?&gt;;&lt;/script&gt;
                      Leider funktioniert dass auch nicht, habe auch versucht es mal in die "originale" zeichenfolge zu bringen, funktioniert auch nicht.
                      Ergebnis wenn ich es ausgebe:
                      Code:
                      int(12) int(2019) int(11) int(2019) int(10) int(2019) int(9) int(2019) int(8) int(2019) int(7) int(2019) int(6) int(2019) int(5) int(2019) int(4) int(2019) int(3) int(2019) int(2) int(2019) int(1) int(2019) 431,309,0,0,0,0,0,0,0,0,0,0
                      So sieht das ender der Mysql daten abfrage aus und die chart.js habt ihr ja oben noch. Ich bekomme die daten einfach nicht da rein geladen...
                      PHP-Code:
                      if(!$result){
                                  die(
                      "Retriving Query Error<br>".$query);
                                }

                                
                      //array_push($total_visitors, mysqli_num_rows($result));

                                
                      $total_visitors $total_visitors '' mysqli_num_rows($result) . ',';
                              }

                              
                      $total_visitors trim($total_visitors,",");

                              echo(
                      $total_visitors);
                            
                      ?> 
                      A computer program does what you tell it to do, not what you want it to do.

                      Kommentar


                      • #12
                        Hast Du dir die Variable auch angesehen? Versuche dies:
                        Code:
                         <script>
                            var totalVisitors = <?php echo json_encode($total_visitors); ?>;
                            console.log(totalVisitors);
                        </script>
                        und sieh dir an, was in der Console ausgegeben wird.

                        Kommentar


                        • #13
                          Zitat von Sempervivum Beitrag anzeigen
                          Hast Du dir die Variable auch angesehen? Versuche dies:
                          Code:
                          <script>
                          var totalVisitors = <?php echo json_encode($total_visitors); ?>;
                          console.log(totalVisitors);
                          </script>
                          und sieh dir an, was in der Console ausgegeben wird.
                          Ja es wird: 431,309,0,0,0,0,0,0,0,0,0,0 ausgegeben, hatte ausversehen den ganzen string kopiert gehabt.
                          A computer program does what you tell it to do, not what you want it to do.

                          Kommentar


                          • #14
                            Das würde bedeuten, dass nur für Dezember und November Besucher da sind. Kann das hinkommen?

                            Jetzt musst Du diese Daten an chart.js übergeben:
                            Code:
                             // Chart.js scripts
                            var myLineChart = new Chart(ctx, {
                              type: 'line',
                              data: {
                                labels: ["Jan", "Feb", "Mar", "Apr", "May", "Jul", "Jun", "Aug", "Sep", "Oct", "Nov", "Dec"],
                                datasets: [{
                                   label: "Sessions",
                                  lineTension: 0.3,
                                  ... // 9 weitere eigenschaften // ...
                                  data: totalVisitors,
                                }],
                              },
                              options: {     scales: {
                                  ...
                            });
                            Die Labels stimmen jetzt noch nicht, aber das stellen wir erst Mal zurück.

                            Kommentar


                            • #15
                              ALL-INKL.COM - Webhosting Server Hosting Domain Provider
                              Zitat von Sempervivum Beitrag anzeigen
                              Das würde bedeuten, dass nur für Dezember und November Besucher da sind. Kann das hinkommen?

                              Jetzt musst Du diese Daten an chart.js übergeben:
                              Code:
                              // Chart.js scripts
                              var myLineChart = new Chart(ctx, {
                              type: 'line',
                              data: {
                              labels: ["Jan", "Feb", "Mar", "Apr", "May", "Jul", "Jun", "Aug", "Sep", "Oct", "Nov", "Dec"],
                              datasets: [{
                              label: "Sessions",
                              lineTension: 0.3,
                              ... // 9 weitere eigenschaften // ...
                              data: totalVisitors,
                              }],
                              },
                              options: { scales: {
                              ...
                              });
                              Die Labels stimmen jetzt noch nicht, aber das stellen wir erst Mal zurück.
                              So habe ich dass jetzt auch, aber der Graph wird jetzt nicht mehr angezeigt. Die werte habe ich schon in umgekehrter reihenfolge weitergegeben, dass passt soweit und die Konsole sagt auch dass die werte richtig in der datei angekommen sind
                              Zuletzt geändert von ThegreenY; 23.12.2019, 18:29.
                              A computer program does what you tell it to do, not what you want it to do.

                              Kommentar

                              homepage-forum.de - Hilfe für Webmaster! Statistiken

                              Einklappen

                              Themen: 56.568   Beiträge: 427.868   Mitglieder: 28.158   Aktive Mitglieder: 54
                              Willkommen an unser neuestes Mitglied, Arion.

                              Online-Benutzer

                              Einklappen

                              215 Benutzer sind jetzt online. Registrierte Benutzer: 3, Gäste: 212.

                              Mit 3.502 Benutzern waren am 23.01.2020 um 18:20 die meisten Benutzer gleichzeitig online.

                              Die neuesten Themen

                              Einklappen

                              Die neuesten Beiträge

                              Einklappen

                              Lädt...
                              X