Erzeugte PHP-Daten speichern / Referer

Jay Free

Mitglied
Hallo liebe Leute,

bin ein kleiner php anfänger!
Das Script zum auslesen der nötigen Datein habe ich bereits erfolgreich gecodet.

# Neuer User kommt von www.example.com/user/xy

PHP:
<?php
    $_ref = $_SERVER['HTTP_REFERER'];

    if (eregi('example.com', $_ref))
        {
        
        $_ref .= '&';

        
        preg_match('/user\/(.*)&/UiS', $_ref, $_user['USERNICKNAME']);



        $_user['USERNICKNAME'][1] =
                                urldecode($_user['USERNICKNAME'][1]);

        //var_dump($_user);
        }
?>

Die Daten die er nun ausspuckt sind:

Nickname: "XY"


Jetzt zu meinem Problem.

Ich möchte gerne den Nicknamen speichern und die Zugriffszahlen die von diesem Link www.example.com/user/xy (Referer) kommen.


Frage: Wie kann ich die Anzahl der "Klicks" die durch den Link kommen speichern?

und wie kann ich den Benutzter-Namen speichern?


Beispiel:
115 Klicks durch Nickname
20 Klicks durch Nickname2
1 Klick durch XY

Edit: hinzufügen sollte ich das ich pro ausgelesenen Nicknamen einen eigenen Counter haben möchte.

Hat evtl. jemand einen Lösungsansatz bzw. einen Tipp nach was ich googlen kann :(



Liebe Grüße Jay!
 
Zuletzt bearbeitet:
Dazu bietet sich eine Datenbank an.
Meinetwegen Tabellenname: User Spalten: ID,Username,Klicks.

Du prüfst (MYSQL SELECT) ob User XY schon in der DB steht (direckt in der ersten if Abfrage) und wenn nicht trägst du ihn ein(MYSQL INSERT INTO).
Sollte er schon drinnen stehen erhöhst du die Spalte Klicks in deiner Datenbank um +1 (MYSQL UPDATE).
So hast du deine Anzahl(Counter) Klicks und kannst sie entsprechend anzeigen lassen.
 
Hey Joe,

danke für deine schnelle Antwort!
Ich werde mich sofort mal dran machen und alles so schreiben wie du es gesagt hast, falls es widererwarten doch nicht klappen sollte dann meld ich mich nochmal, danke ;)

LG Jay
 
Mach das, bei solchen Fragen kann dir hier immer jemand helfen.
Wegen der Lesebarkeit und Hilfestellung gleich ordentliches Code formatieren benutzen und in
PHP:
 PHP-Tags
schreiben ;)
 
Hallo Joe,

bin von mir selbst überrascht ...
Seit dem ich den Beitrag gepostet habe, arbeite ich daran und siehe da.
Ich habs fast geschafft! :')

Nur noch Schönheitsfehler!

EDIT: Wichtig: Bin so Müde das ich glatt übersehen habe, dass nach jedem Referer-Besucher bei jedem "usernamen" +1 Klick hinzugefügt wird, nicht wie gewollt nur bei
dem user der der Referer-Seite zugeordnet war (example.com/user/xy)

Wenn ich also über Referer "example.com/user/xy" zugreife, setzt er nicht nur bei xy sondern bei allen "usernames" +1 klick ...

hier bei bräuchte ich dann noch einen Tipp :( danke


1.: In der Auflistung (dafür verwende ich:)
PHP:
    $result = mysql_query("SELECT * FROM tabelle ORDER BY name ASC");
 
    while($row = mysql_fetch_row($result))
        echo $row[0].' <br /> '.$row[2].'klicks<br /><br />';

Wird ein leeres Feld bzw. leerer Datensatz sowohl "klicks" als auch "user" angezeigt.
Kann ich mir nicht erklären evtl. weiß ja jemand bescheid!

2.: Der erste Klick wird als "0" gezählt bzw. wird nicht angezeigt. Da steht dann nur USER klicks " "
Erst nach dem 2 Referer-Klick steht dort die "1".
Ich benutze zum Zählen der Klicks:
PHP:
result = mysql_query("UPDATE tabelle SET klicks =klicks+1");

So ich gehe erstmal ins Bettchen! :)

Vielen Dank an Joe! Retter in der Not ?

LG Jay
 
Zuletzt bearbeitet:
Also ich würde die Abfrage/Anweisung so schreiben:

SQL:
INSERT INTO tabelle (user, klicks) VALUES('username', 1) 
ON DUPLICATE KEY UPDATE klicks = klicks + 1

Dazu muss der Username als eindeutiger Index in der Tabelle angelegt sein.
In diesem Fall wird versucht ein neuer Eintrag für den entsprechenden User anzulegen (der Wert "username" muss natürlich entsprechend gesetzt werden), das Feld "klicks" bekommt in diesem Fall den Wert 1.
Ist für diesen User bereits ein Eintrag vorhanden wird bei diesem der aktuelle Wert des Feldes "klicks" einfach um 1 erhöht.
 
Hallo Jay Free,
Zu 1.
Es ist lebarer wenn du den Spaltennamen angibst. Dann musst du den Arraynamen noch mit einfachen oder doppelten Anführungszeichen versehen Also etwa so:
PHP:
while($row = mysql_fetch_row($result))
        echo $row['SpaltenameUser'].' <br /> '.$row['SpaltennameKlicks'].'klicks<br /><br />';

Zu 2.
Besser als von Tombe beschrieben kann man das nicht machen.
Bei dir hatte WHERE Clausel gefehlt. Mit WHERE hättest du nur den Datensatz ansprechen können welchen du erhöhen möchtest. zb:
SQL:
$result = mysql_query("UPDATE
							tabelle 
						SET 
							klicks =klicks+1
						WHERE
							User='$Username'");

Die Lösung von Tombe ersetzt aber das Insert INTO und das UPDATE und macht aus 2 MYSQL-Abfragen eine. Das sieht nicht nur eleganter aus sondern ist auch wesentlich performanter.
 
Zuletzt bearbeitet von einem Moderator:
Hallo!
Danke Ihr zwei, ich werde das gleich mal ausprobieren und dann hier schreiben ob es funktioniert hat :)
Dann makiere ich auch das Thema als "Erledigt" :)

Lg
 
Thema Erledigt.

Also habe die Codes versucht einzubauen, hat mehr oder weniger geklappt!
Wenn ich thombe's Code:
PHP:
INSERT INTO tabelle (USER, klicks) VALUES('username', 1) 
ON DUPLICATE KEY UPDATE klicks = klicks + 1

Wurden mir die "User" nichtmehr angezeigt und die klicks blieben stehen.
Ich habe Joe's Code benutzt:
PHP:
$Username = $_user['USERNICKNAME'][1]; 
result = mysql_query("UPDATE tabelle SET klicks =klicks+1 WHERE name='$Username'");

Mit diesem wurden die User-Klicks nun einzelnt pro Referer gezählt.

Joe's Vorschlag:
PHP:
while($row = mysql_fetch_row($result))
        echo $row['SpaltenameUser'].' <br /> '.$row['SpaltennameKlicks'].'klicks<br /><br />';

Hat leider bei mir auch nicht funktioniert, er gab mir leider nicht den "User" aus.
Meine row in der tabelle heisst "name" also habe ich :

PHP:
 (...) echo $row['name'].' <br /> (...)
geschrieben, funktionierte nicht. bin bei:
PHP:
echo $row[0].' <br /> '.$row[2].'klicks<br /><br />';
geblieben.
Werde dort noch etwas wegen der "Schönheit" basteln ;)

Ich danke euch beiden!

/Edit:

zu Joe's vorschlag:
PHP:
while($row = mysql_fetch_row($result))
        echo $row['SpaltenameUser'].' <br /> '.$row['SpaltennameKlicks'].'klicks<br /><br />';

funktioniert doch, allerdings sollte man das mysql_fetch_row in mysql_fetch_assoc ändern ^^


Viele Grüße Jayyyyy :)
 
Zuletzt bearbeitet:
Weil ich grad dein Edit sehe,
:) Ja das passiert öfter das man solche kleinen Details übersieht.

Nochmals zu Tombe's guten Lösung:
'username' ist exemplarisch du müsstest auch hier den User in die Variable speichern und den Code entsprechend abändern. '$username' .
Natürlich nicht die Klammern und doppelten Anführungszeichen vergessen (halt wie gewohnt).
 
Zurück