Ankündigung

Einklappen
Keine Ankündigung bisher.

Wie einen Click-Counter programmieren?

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

  • Wie einen Click-Counter programmieren?

    hallo leute,

    ich möchte gerne einen click-counter programmieren, der aber auch das land( inklusive dem click), aus dem dieser click stammt, abspeichert. vorstellung: ich klicke mit einer deutschen ip auf einen link und diese information wird dann entsprechend gespeichert: die spalten germany und gesamtanzahl werden um 1 erhöht.

    das ganze möchte ich mit mysql erledigen:
    (das land bekomme ich dank einer api heraus.)

    ich hätte eine tabelle zb. "clicks".
    in clicks hätte ich dann folgende spalten: click_id, url, gesamtanzahl, germany, land2, land3, land4, land5, ..., land100.


    angenommen es wären tatsächlich mehr als 100 spalten... wäre es ein problem hinsichtlich perfomance? gibt es eine bessere lösung zu der obigen idee?

    ich möchte keine codeschnipsel oder ähnliches, ich möchte nur wissen, ob das obige vorhaben an sich okay ist... falls nicht dann eben eine kurze beschreibung eurer lösung.

    vielen dank im voraus.



  • #2
    Durchnummerierte Spalten deuten auf ein fehlerhaftes Tabellendesign hin. Statt mehrer Spalten solltest du mehrere Zeilen erstellen. Beschäftige dich mal mit Datenbanknormalisierung.

    Und warum machen die Leute immer so einen furchtbaren Englisch/Deutsch-Mischmasch? click, gesamtanzahl, germany, land, wtf??? Ich write ja auch not in different Sprachen in einem sentence. Wie kommt man darauf, dass sowas eine gute Idee wäre? Oder ist das einfach Gedankenlosigkeit? Dann ist das Projekt ja von Anfang an gescheitert, wenn man aufs Denken verzichtet.

    Jetzt nicht gegen dich persönlich, aber das sieht man hier im Forum wirklich dauernd.

    Kommentar


    • #3
      Ein Problem bzgl. Spalten ist es sicherlich nicht, nur ist das kein gutes Datenbankdesign. Du solltest Deine Datenbank normalisieren.

      https://de.wikipedia.org/wiki/Normalisierung_(Datenbank)

      Hat jetzt auch nur bedingt etwas mit PHP zu tun.

      tabelle clicks: id, url, count
      tabelle country: id, country
      tabelle clicks_country: clicks_id, country_id, count

      Kommentar


      • #4
        ja die api gibt die länder halt auf englisch zurück, aber ja du hast recht. sollte ich nicht machen. dann eben alles auf englisch danke.
        Zitat von jonas3344 Beitrag anzeigen
        Ein Problem bzgl. Spalten ist es sicherlich nicht, nur ist das kein gutes Datenbankdesign. Du solltest Deine Datenbank normalisieren.

        https://de.wikipedia.org/wiki/Normalisierung_(Datenbank)

        Hat jetzt auch nur bedingt etwas mit PHP zu tun.

        tabelle clicks: id, url, count
        tabelle country: id, country
        tabelle clicks_country: clicks_id, country_id, count

        datenbanknormalisierung schaue ich mir an.
        danke sehr

        Kommentar


        • #5
          Zitat von glx Beitrag anzeigen
          eine frage, an sich ist es doch keine nummerierung?? deutschland, frankreich, italien, belgien, afghanistan, undwasweißichland...?
          Das ist dann eine Aufzählung. Prinzipiell solltest du Spalten als etwas fixes ansehen. Sie gehören zur Datenstruktur und die Struktur ist unabhängig von der Anzahl der Daten. Wenn du allerdings ein Land hinzufügen willst (also neue Daten einfügen), müsstest du dann eine Spalte hinzufügen, also die Struktur ändern. Dies führt zu deutlich mehr Verwaltungsaufwand. Wenn es also keinen wirklich guten Grund gibt (den kann es auch geben), es so zu machen, sollte man den Mehraufwand vermeiden.

          Kommentar


          • #6
            Zitat von hellbringer Beitrag anzeigen

            Das ist dann eine Aufzählung. Prinzipiell solltest du Spalten als etwas fixes ansehen. Sie gehören zur Datenstruktur und die Struktur ist unabhängig von der Anzahl der Daten. Wenn du allerdings ein Land hinzufügen willst (also neue Daten einfügen), müsstest du dann eine Spalte hinzufügen, also die Struktur ändern. Dies führt zu deutlich mehr Verwaltungsaufwand. Wenn es also keinen wirklich guten Grund gibt (den kann es auch geben), es so zu machen, sollte man den Mehraufwand vermeiden.
            Verstehe... Danke, ich schaue mir einfach mal die Datenbanknormalisierung an. Das sollte sicherlich so einiges erklären.

            Kommentar


            • #7
              Für die Ausgabe des Länderkürzels:
              PHP-Code:
              $location unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip='.$_SERVER['REMOTE_ADDR']));
              echo 
              $location['geoplugin_countryCode']; 
              Das gibt den Countrycode also in meinem Fall DE aus.

              Natürlich ist auch das Land ausgeschrieben möglich:
              PHP-Code:
              echo $location['geoplugin_countryName']; 

              Kommentar


              • #8
                NIEMALS unserialize() auf Daten anwenden, die von einem fremden Server kommen! Dadurch reißt man sich eine der größten Sicherheitslücken auf. Noch dazu per HTTP. Sowas zu posten ist schon sehr fahrlässig und grenzt an mutwilliger Sabotage.

                Kommentar


                • #9
                  Hi, ich danke euch wieder. Dennoch habe ich bereits einen Code zum Ausgeben des Landes:

                  PHP-Code:
                      $ip $_SERVER['REMOTE_ADDR'];

                      
                  $res file_get_contents('https://www.iplocate.io/api/lookup/' $ip);
                      
                  $res json_decode($res);

                      
                  var_dump($res->country); 
                  Wäre ja soweit in Ordnung, oder? Oder sollte ich die Variablen irgendwie auf etwas überprüfen? Ich mein, ich kann ja dem Anbieter vertrauen?

                  Gruß

                  #Ach ja, die Datenbanknormalisierung ist eine sehr interessante Sache. Hat mir weiter geholfen!

                  Kommentar


                  • #10
                    PHP-Code:
                    $requestUrl 'https://www.iplocate.io/api/lookup/' urlencode($_SERVER['REMOTE_ADDR']);
                    $location json_decode(file_get_contents($requestUrl));

                    echo 
                    $location->country

                    Kommentar

                    Lädt...
                    X