Ankündigung

Einklappen
Keine Ankündigung bisher.

Counter ID Problem

Einklappen

Neue Werbung 2019

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

  • Counter ID Problem

    Hallo ihr Lieben,

    ich brauche dringend eure Hilfe.
    Bisher habe ich mit php noch nichts gemacht, nur HTML CSS und etwas Java.
    Nun habe ich versucht einen Besucherzähler zu erstellen.
    Der Zähler funktioniert auch schon fast gut. Ich hätte gerne das der Zähler jede IP bei mehreren Aufrufen nur alle 4 Stunden einmal zählt.
    Bekomme es aber leider nicht hin.
    Wäre super wenn mir jemand helfen könnte.

    Hier mein Code:

    PHP-Code:

    $ip 
    $_SERVER["REMOTE_ADDR"];

    $time_t date("d.m.Y"time());

    $sql mysql_query("SELECT * FROM counter ORDER BY ip DESC");

    $row mysql_fetch_object($sql);

    if(
    $ip == $row->ip)
    {
    $timestamp date("d.m.Y"$row->time);

    if(
    $time_t == $timestamp){}
    else{
    $import mysql_query("INSERT INTO counter SET ip='$ip', time='".date("d.m.Y"time())."'");}
    }
    else{
    $import mysql_query("INSERT INTO counter SET ip='$ip', time='".date("d.m.Y"time())."'");}

    $heute mysql_query("SELECT * FROM counter WHERE time = '".$time_t."' ORDER BY ip DESC");
    $gesamt mysql_query("SELECT * FROM counter");


    echo
    "


    <table style='font-size:12px; font-family:arial; color:#666;'>
    <tr>
    <td>
    Heute:</td><td>"
    .mysql_num_rows($heute)."</td>
    <td><b>&nbsp;|&nbsp;</b></td>
    <td>
    Gesamt:</td><td>"
    .mysql_num_rows($gesamt)."</td></tr>

    "



  • #2
    Dann poste ich mal hier:

    Formatieren kannst du den Code trotzdem mal, der ist so einfach nur unlesbar mit dem gequetschen Code hinter den else's.

    Du rufst immer alle Einträge ab sortiert per IP DESC, ziehst dir dann den ersten raus und vergleichst die IP's. Das Kann so nicht klappen, ruf gleich nur die IP aus der Datenbank ab. Optimal wäre es, wenn du gleich die Datenbank prüfen lässt ob die Zeit abgelaufen ist.

    Danach vergleichst du "$time_t == $timestamp". Das ist auch Falsch, das ist ein String bestehend aus Tag, Monat und Jahr, daraus kannst du nicht "4 Stunden" ablesen. Du musst schon die Komplette Zeit mitspeichern und mitvergleichen, Optimalerweise mit einem DATETIME (in der Datenbank) oder einem Unix_Timestamp, wobei DATETIME zu bevorzugen ist.

    Danach rufst du wiederum aus 2 Tabellen ALLE Datensätze ab nur um die Menge zu erfahren. Dass das sehr unperformat ist kannst du dir denken, lass die Datenbank die Arbeit machen und die Datensätze zählen.
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Ich danke dir sehr das du versuchst mir zu helfen, aber ich versteh leider garnichts von dem was du sagst. Ich habe zuvor noch nie etwas mit PHP gemacht


      PHP-Code:

      $ip 
      $_SERVER["REMOTE_ADDR"];

      $time_t date("d.m.Y"time());

      $sql mysql_query("SELECT * FROM counter ORDER BY ip DESC");

      $row mysql_fetch_object($sql);

      if(
      $ip == $row->ip)
      {
      $timestamp date("d.m.Y"$row->time);

      if(
      $time_t == $timestamp)
      {
      }
      else
      {
      $import mysql_query("INSERT INTO counter SET ip='$ip', time='".date("d.m.Y"time())."'");}
      }

      else
      {
      $import mysql_query("INSERT INTO counter SET ip='$ip', time='".date("d.m.Y"time())."'");
      }

      $heute mysql_query("SELECT * FROM counter WHERE time = '".$time_t."' ORDER BY ip DESC");
      $gesamt mysql_query("SELECT * FROM counter");


      echo
      "


      <table style='font-size:12px; font-family:arial; color:#666;'>
      <tr>
      <td>
      Heute:</td><td>"
      .mysql_num_rows($heute)."</td>
      <td><b>&nbsp;|&nbsp;</b></td>
      <td>
      Gesamt:</td><td>"
      .mysql_num_rows($gesamt)."</td></tr>

      "

      Kommentar


      • #4
        Dann solltest du dich erstmal ne Zeit lang mit den Grundlagen beschäftigen.

        Der Code ist übrigens immer noch nicht korrekt Formatiert und Eingerückt.
        Zitat von nikosch
        Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

        Kommentar


        • #5
          Danke, das hatte ich auch vor sobald der Zähler fertig ist. Denn der muss dringend für meinen Kunden fertig werden und danach habe ich genügend Zeit mit mit den Grundlagen mehr zu beschäftigen.

          Kommentar


          • #6
            Zitat von male Beitrag anzeigen
            Denn der muss dringend für meinen Kunden fertig werden und danach habe ich genügend Zeit mit mit den Grundlagen mehr zu beschäftigen.

            Erst lernen, dann Dienste anbieten und nicht andersrum.
            Zitat von nikosch
            Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

            Kommentar


            • #7
              Oh man, Prioritäten falsch gesetzt
              Relax, you're doing fine.
              RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

              Kommentar


              • #8
                Zitat von tkausl Beitrag anzeigen

                Erst lernen, dann Dienste anbieten und nicht andersrum.
                Die Dienste die ich anbiete beherrsche ich auch.
                Der Zähler ist nur eine Bitte vom Kunden ob der noch dazu kommen könnte!

                Kommentar


                • #9
                  Zitat von male Beitrag anzeigen
                  Der Zähler ist nur eine Bitte vom Kunden ob der noch dazu kommen könnte!
                  In dem Fall hättest du mit "nein" Antworten sollen da du es anscheinend nicht kannst und wir hier keine Hausaufgaben machen und erst recht übernehmen wir nicht die Arbeit von anderen.
                  Zitat von nikosch
                  Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                  Kommentar


                  • #10
                    Wenn hier noch jemand anderes eine hilfreiche Antwort und nicht nur sinnlose Kommentare schreiben kann,
                    wäre ich sehr dankbar.

                    Kommentar


                    • #11
                      Das sind keine sinnlosen Kommentare! Du nimmst einen Auftrag an, den du nicht bewältigen kannst. Jetzt versuchst du mit kostenloser Hilfe deinen Auftrag zu retten, um Geld damit zu verdienen. Findest du das fair?

                      Stelle die Datumsspate auf datetime um, dann könnte das Script ungefähr so aussehen:
                      PHP-Code:
                      <?php
                        $ip 
                      $_SERVER["REMOTE_ADDR"];

                        
                      $query "Select
                                    `ip`,
                                    `datum`
                                   from
                                    `counter`
                                   where
                                    `ip`= '
                      $ip'
                                   and
                                    TIMESTAMPDIFF(HOUR, `datum`, now()) < 4"
                      ;
                                    
                        
                      $result mysql_query($query)
                           or die (
                      "MySQL-Error: " mysql_error());
                        
                        if (
                      mysql_num_rows($result) == 0)
                        {
                           
                      // Eintragen
                        
                      }
                        else
                        {
                           
                      // Nicht eintragen
                        
                      }
                      ?>
                      Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                      Kommentar


                      • #12
                        Zitat von male Beitrag anzeigen
                        Wenn hier noch jemand anderes eine hilfreiche Antwort und nicht nur sinnlose Kommentare schreiben kann,
                        wäre ich sehr dankbar.
                        PHP-Code:
                        $import mysql_query("INSERT INTO counter SET ip='$ip', time='".date("d.m.Y"time())."'"); 
                        überleg doch mal logisch, alle 4 stunden soll eine ip eingetragen werden können du hast aber garkeine zeitangabe da stehen.

                        du musst die time splate auch als DATETIME typ definieren außerdem fehlt dir ein zähler für die IP adresse.

                        PHP-Code:
                        CREATE TABLE IF NOT EXISTS `counter` (
                          `
                        idint(11NOT NULL AUTO_INCREMENT,
                          `
                        ipvarchar(15NOT NULL,
                          `
                        counterint(10NOT NULL DEFAULT '1',
                          `
                        lastvisitdatetime NOT NULL,
                          
                        PRIMARY KEY (`id`),
                          
                        UNIQUE KEY `ip` (`ip`)
                        ENGINE=InnoDB 
                        du könntest dann
                        PHP-Code:
                        INSERT INTO counter(`ip`,`counter`,`lastvisit`) 
                        VALUES('$ip',1,NOW()) 
                        ON DUPLICATE KEY 
                        UPDATE counter 
                        `counter` = `counter` + 1, `lastvisit` = NOW() 
                        immer wieder den counter pro ip erhöhen

                        PHP-Code:
                        INSERT INTO counter(`ip`,`counter`,`lastvisit`) 
                        VALUES('$ip',1,NOW()) 
                        ON DUPLICATE KEY 
                        UPDATE counter 
                        `counter` = `counter` + 1, `lastvisit` = NOW() 
                        WHERE  NOW() > `lastvisit`+ INTERVAL 4 hour 
                        das hier funktioniert irgendwie nicht auf die schnelle
                        apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

                        Kommentar


                        • #13
                          Zitat von male Beitrag anzeigen
                          danach habe ich genügend Zeit mit mit den Grundlagen mehr zu beschäftigen.
                          Wie oft habe ich das schon gelesen und es wurde dann doch nichts draus
                          Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                          Kommentar


                          • #14
                            mysql_ ist übrigens veraltet und wird bald nicht mehr funktionieren.

                            http://php.net/manual/en/migration55.deprecated.php

                            Alternative: mysqli_ oder PDO (google)
                            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                            PHP.de Wissenssammlung | Kein Support per PN

                            Kommentar


                            • #15
                              Wollen wir darauf hinweisen, dass es hier (viel mächtigere) fertige Scripts gibt und eine Identifikation anhand der IP-Adresse sinnfrei ist (denken wir an Firmennetze)?
                              GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

                              Kommentar

                              Lädt...
                              X