Wie erstelle ich einen Zähler,der die Klicks auf einen Link zählt.

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

  • Wie erstelle ich einen Zähler,der die Klicks auf einen Link zählt.

    Hallo zusammen,

    ich hab ein kleines Problem zum Thema Counter. Die Suche habe ich schon bemüht, aber nicht das gefunden was mir weiterhelfen könnte. Es geht darum, dass das angeführte script einen Datensatz aus der Datenbank holt, wenn der entsprechende Link geklickt wurde. Nun muss ein Zähler um eins erhöht werden und der neue Zählerstand im entsprechenden Datensatz hinterlegt werden.

    <?php
    //Header laden
    require_once ($_SERVER["DOCUMENT_ROOT"] . "/head.php");

    //Datenbank verbinden
    require_once ($_SERVER["DOCUMENT_ROOT"] . "/functions/connect.php");

    //alle Datensätze für das linke Menü im passenden div laden
    echo "<div id='menu'>";
    echo "<ul>";
    $query = "SELECT * FROM daten";
    $result = mysql_query($query);
    if (!$result)
    {
    die('Ungültige Abfrage: ' . mysql_error());
    }
    //Daten ausgeben und Link ermitteln
    while($row = mysql_fetch_array($result))
    {
    echo "<li><a href='datensatz.php?id=" . $row['id'] . "'>" . $row['vorname'] . " " . $row['nachname'] . "</a></li>";
    }

    //angeklickten Datensatz im passenden div laden
    $query = "SELECT * FROM daten WHERE (id = '" . $_GET['id'] . "')";;
    $result = mysql_query($query);
    if (!$result)
    {
    die('Ungültige Abfrage: ' . mysql_error());
    }
    echo "</ul>";
    echo "</div>";
    echo "<div id='contents'>";
    print_r ($result);
    //geladenen Datensatz ausgeben
    while($row = mysql_fetch_array($result))
    {
    echo $row['id'];
    $zahl = $row['counter']; [COLOR=crimson]//Zählerstand in $zahl festhalten[/COLOR]
    echo $row['vorname'];
    echo $row['nachname'];
    echo $row['counter'];
    }
    echo "</div>";
    $zaehler = 1;
    $nzahl = $zahl + $zaehler; [COLOR=crimson]//neuen Zählerstand erstellen[/COLOR]
    //Zähler erhöhen und in Datenbank schreiben

    //$query = "UPDATE daten SET aktiv=1 WHERE email='" . $_POST["username"] . "' && passwort='" . $_POST["passwort"] . "'";
    // $result = mysql_query($query);
    // if(!$result)
    // {
    // die("Datenbank zu Wartungszwecken down !");
    // }

    //Footer anfügen
    require_once ($_SERVER["DOCUMENT_ROOT"] . "/foot.php");
    ?>

    Problem ist nun, das der neue Zählerstand nur einmal neu erstellt wird. Wie muss ich das machen, das jeder klick erkannt wird und $nzahl dabei um eins erhöht wird? Gibts da ne Funktion in php die ich nicht kenne die sowas macht?



    Gruß

    Michael
    Gruß

    Michael

  • #2
    UPDATE counter eben
    Zuletzt geändert von MelloPie; 09.01.2008, 11:16.
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Ähm, dass ist jetzt nicht aufschlussreich für mich. Ich interpretier das mal so, dass ich da in php gar nichts zu machen brauche sondern mit nem update-query einfach den Counter erhöhen kann. Wenn ja wie funktioniert das?

      Das anzeigen des aktuellen Standes ist ja kein Akt, der kommt ja im select-query mit rüber.


      Gruß

      Michael
      Gruß

      Michael

      Kommentar


      • #4
        jap in der datenbank den wert für 'counter' um eins erhöhen mittels UPDATE statement
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          Mach es doch direkt via SQL. Ich würde jetzt für die Klicks eine Tabelle anlegen mit dem Pfad der Datei ausgehend vom DOC ROOT (als UNIQUE) und einer Spalte für die Klicks.
          Zum Eintragen dann einfach
          PHP-Code:
          $sql "INSERT INTO table (pfad,hits) VALUES ('".$_SERVER['PHP_SELF']."',1) ON DUPLICATE KEY UPDATE hits=hits+1"
          Gruss

          tobi
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #6
            Wieso eine neue Tabelle? In der letzten Spalte der Tabelle mit den Datensätzen habe ich den Zählerstand schon vorgesehen. Der muss einfach nur beim Klick auf den Satz, genauer gesagt, wenn der Satz per Select geholt wird einfach um eins erhöht werden.
            Gruß

            Michael

            Kommentar


            • #7
              In der letzten Spalte der Tabelle mit den Datensätzen habe ich den Zählerstand schon vorgesehen.
              Ist das die Tabelle daten wo auch die Userdaten drin stehen? Ich habe dich so verstanden, dass du die Klicks pro Seite willst und nicht pro User. Wenn du die Klicks pro Seite willst würde ich eine neue Tabelle empfehlen, damit diese Daten getrennt sind. Wenn du sie pro User willst, dann kannst du es so lassen... (musst aber ggf den Code anpassen, weil der SELECT nach $_GET['id'] dann mehrere Datensätze liefern kann)
              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

              Kommentar


              • #8
                Und lies mal die Forumsregeln(gilt auch für hwk06). Konkret benutze, auch im eigenen Interesse, PHP-Tags. Die Wahrscheinlichkeit, dass jemand dann deinen Code anschaut ist bedeutend grösser.
                Mindestens ich schau mir solch unformatiertes Zeugs sonst nicht an.
                Gruss
                H2O

                Kommentar


                • #9
                  Original geschrieben von H2O
                  Mindestens ich schau mir solch unformatiertes Zeugs sonst nicht an.
                  OffTopic:
                  Ich auch nicht
                  [FONT="Helvetica"]twitter.com/unset[/FONT]

                  Shitstorm Podcast – Wöchentliches Auskotzen

                  Kommentar


                  • #10
                    Genau, jeder Datensatz entspricht einem User. Jeder Klick darauf muss den Zähler dieses Users um eins erhöhen. Also kann ich das alles zusammen in einer Tabelle lassen. Den select brauche ich eigentlich nicht zu ändern, da per Script sichergestellt ist, das jeder User einen neuen Datensatz erhält. Die Spalte ist eine auto_increment.

                    Aber wie muss der Query dann aussehen? Die Tabelle heissst daten und die Spalte counter.


                    @h2o. Werde dann ab sofort die Tags benutzen.
                    Gruß

                    Michael

                    Kommentar


                    • #11
                      Irgendwie so
                      PHP-Code:
                      $query "UPDATE daten SET aktiv=1, counter=counter+1 WHERE 
                      email='" 
                      $_POST["username"] . "' && passwort='" $_POST["passwort"] . "'"
                      würde ich das mal probieren.
                      Zuletzt geändert von jahlives; 09.01.2008, 13:03.
                      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                      Kommentar


                      • #12
                        PHP-Code:
                        $query "UPDATE daten SET counter=counter+1 WHERE (id = '" $_GET['id'] . "')"
                        Das ist das Statement, mit dem ich pro Datensatz den Zähler um eins hochsetzen kann. Über $_GET['id'] ist auch sichergestellt, das der richtige Datensatz gezählt wird.


                        btw, noch ne weitere Frage. Gesetzt den Fall, es werden per Script mehrere Datensätze importiert. Sagen wir mal fünf Stück. Diese bleiben dann eine gewisse Zeit online und werden dann wieder exportiert. Wie kann ich das jetzt realsieren, dass ich zum Exportzeitpunkt auch genau diese 5 Sätze wieder erwische. Meiner Meinung nach, müsste es dann noch ne Spalte Import geben, in die dann eine Zahl, sprich die Importnummer geschrieben wird. Beim Export müsste ich dem Select doch eigentlich nur mitgeben, das er die Sätze suchen soll, die die passende Importnummer haben. Richtig? Wie würdet ihr das aufziehen?
                        Gruß

                        Michael

                        Kommentar


                        • #13
                          Ich nehme an dass id ein Integer ist und darum weg mit ' und ' um GET
                          Mach dich auch mal über mysql Injections schlau. Und überleg dir mal wie du es anstellen willst, dass dieser counter möglichst nicht gefaked werden kann. Ich kann einfach eine exisitierende id angeben und dein counter legt los.
                          Was genau du mit dem Import/Export meinst erschliesst sich mir momentan nicht ganz.

                          Gruss

                          tobi
                          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                          Kommentar


                          • #14
                            Hab das Script schon korrigiert. Wie kriegt man so einen counter sicher und was sind injections? Habs mal in der Suche der Handbücher con php und mysql eingegeben, aber nichts gefunden (oder falsch eingegeben).

                            Ich importiere per Query Daten aus eine csv-Datei. Diese werden dann dargestellt und die Klicks drauf gezählt. Dann werden sie wieder in eine csv exportiert.

                            Import - Datei
                            PHP-Code:
                            //Datenbank verbinden
                            require_once ($_SERVER["DOCUMENT_ROOT"] . "/functions/connect.php");
                            // einlesen der Datei
                            $datei "input.csv";
                            $csv file($datei);// Liest die Datei zeilenweise in ein Array
                            foreach($csv as $value)
                                {
                                 
                            $parts explode(";"$value);// Zerbrechen der Zeile anhand des Trenners ";"
                                 
                            $partquery implode("','"$parts);
                                 
                            $partquery "'" $partquery "'"// Ergebnis soll 'Hallo', 'Welt', 'Michael' sein
                            // Reinschreiben in die datenbank (spalte1 ist autoincrement PRIMARY KEY) $query = "INSERT INTO testtab (spalte2, spalte3, spalte4) VALUES(" . 
                                 
                            $query "INSERT INTO daten (vorname, nachname, strasse, plz, ort, geburtsdatum) VALUES(" $partquery ")";
                                 
                            $result mysql_query($query);
                                 if (!
                            $result)
                                 {
                                  die(
                            'Ungültige Abfrage: ' mysql_error());
                                 }
                                 } 
                            Hier müsste es dann eben so sein, dass ich immer wieder die Sätze erwische die von einem import in die DB geschriebn wurden. So kann ich immer genau den Zeitraum bestimmen, den der Datensatz online war.
                            Gruß

                            Michael

                            Kommentar


                            • #15
                              Original geschrieben von fritzje610
                              Ich importiere per Query Daten aus eine csv-Datei.
                              Das geht dann auch noch viel einfacher mit fgetvsc().
                              Und für den Import hängst du halt noch ein Attribut für das Importdatum an.
                              Das könnte dann etwa so aussehen:
                              PHP-Code:
                              <?php
                              //Datenbank verbinden
                              require_once ($_SERVER["DOCUMENT_ROOT"] . "/functions/connect.php");
                              // einlesen der Datei
                              $fp fopen('input.csv''r');
                              while(
                              $parts fgetcsv($fp512';')){
                                   
                              $partquery[] = "('" implode("','"$parts) . "', CURDATE())";
                              }
                              $query "INSERT INTO daten (vorname, nachname, strasse, plz, ort, geburtsdatum, importdat) 
                                              VALUES " 
                              implode('\n, '$partquery);
                              echo 
                              "$query<br />";        // Nur zum Testen
                              $result mysql_query($query) || die('Ungültige Abfrage: ' mysql_error());
                              ?>
                              Bist du übrigens sicher, dass das geburtsdatum richtig formatiert in der Datei steht?
                              Zuletzt geändert von H2O; 09.01.2008, 14:33.
                              Gruss
                              H2O

                              Kommentar

                              Lädt...
                              X