if-anweisung und dann erst db-eintrag

XXdynastieXX

Mitglied
Hallo,
hier ein Auszug aus meinem Code :

Code:
/* Ermitteln der IP und zur gehörigen UserID hinzufügen */
$userip = $_SERVER['REMOTE_ADDR'];

$sql="SELECT ip FROM ip_stats WHERE ip LIKE '%$userip%' AND userid LIKE '$userid'";
$result=mysql_query($sql);
$row=mysql_fetch_assoc($result);

$dbip = $row["ip"];



if ($userip != $dbip) {
$dbip = $dbip . " , " . $userip;
$sql="UPDATE ip_stats SET ip='$dbip' WHERE userid='$userid'";
mysql_query($sql);
}
else {
echo "Du wurdest bereits gezählt oder so ähnlich!";
}

/* Ermitteln der IP und zur gehörigen UserID hinzufügen */

Mein Problem nun ist, dass er bei jedem Aufruf der Seite, eine neue IP in die Datenbank
einträgt. Ich möchte aber dass er schaut ob die IP bereits eingetragen ist und wenn NICHT, dann erst eintragen ansonsten nicht.

Wo liegt der Fehler? :-/

LG




P.S.: Ich habe wohl eine Denkblockade gehabt. Wie peinlich die Abfrage sollte wohl eher == anstatt != sein :D

Aber es geht dennoch nicht :-/

Code:
if ($userip == $dbip) {
echo "";
}

else {

$dbip = $dbip . " , " . $userip;
$sql="UPDATE ip_stats SET ip='$dbip' WHERE userid='$userid'";
mysql_query($sql);
}
 
Zuletzt bearbeitet:
Statt den Inhalt auszulesen, empfehle ich dir eher mit [phpf]mysql_num_rows[/phpf] die Anzahl der Spalten auszulesen und anhand dessen zu entscheiden.
 
Ich glaub ich hab da was:
PHP:
$dbip = $dbip . " , " . $userip;
$sql="UPDATE ip_stats SET ip='$dbip' WHERE userid='$userid'";
mysql_query($sql);
Wenn ich das richtig sehe, dann erstellst du die dbip aus einer, evtl vorhandenen dbip und der tatsächlichen userip...
Und da verursachts ich der Fehler...
Ich bin z.B. mit der IP 857.364.299.391 unterwegs im Web...
Dann suchst du nach ähnlichkeiten und nicht nach der exakten Ip...
Im Anschluß setzt du die in der DB gefundene IP mit meiner tatsächlichen zusammen...

So müsste es eher klappen:
PHP:
/* Ermitteln der IP und zur gehörigen UserID hinzufügen */
$userip = $_SERVER['REMOTE_ADDR'];

$sql="SELECT ip FROM ip_stats WHERE ip = '".$userip."' AND userid = '".$userid."'";
$result=mysql_query($sql);
$row=mysql_fetch_assoc($result);

$dbip = $row["ip"];



if ($userip != $dbip) {
$dbip = $userip;
$sql="UPDATE ip_stats SET ip='".$dbip."' WHERE userid='".$userid."'";
mysql_query($sql);
}
else {
echo "Du wurdest bereits gezählt oder so ähnlich!";
}

/* Ermitteln der IP und zur gehörigen UserID hinzufügen */
1. Nicht mit LIKE arbeiten, denn du suchst doch einen bestimmten User, dem diese Daten gehören und nicht nach Usern, die es evtl sein könnten...
2. Die IP so in die DB schreiben, wie sie dir geliefert wird...

Dann dürfte es auch richtig klappen...

PS: Benutzt nen ordentlichen Syntax-Highlighter, damit du Fehler bei Auskommentierungen von Variablen aucb findest ;)
 
versteh ich nicht ganz ^^ ich arbeite im GESAMTEN nur mit einer zeile, darum auch "LIKE", weil ich alle IP's hintereinander schreibe in eine zelle und sie mit einem KOMMA abtrenne.

ich möchte nicht für jede neue IP einen komplett neuen eintrag machen.

darm hab ich mir gedacht

er nimmt die vorhandene zelle und fügt eine IP hinzu und um zu gucken ob bereits eine IP in dieser zelle ist die if-anweisung. wenn diese IP nicht drin ist dann wird sie hinzugefügt.

um es nochmal genauer zu umschreiben, ich versuche einen online-counter zu programmieren, ich hab mehrere tabellen unter anderem die tabelle ip_stats
die folgende spalten hat

Code:
id
userid
datum
visitors
impressions
ip

nun möchte ich in zukunft zu einem bestimmten tag die user zählen und jede neue IP in eine die selbe zelle hinzufügen sozusagen als RELOAD-Sperre

wenn ich für jede IP eine neue zeile machen würde, würde das die datenbank bei paar millionen besucher völlig in die luft sprengen.

oder meint ihr es wäre sinnvoller eine neue tabelle mit userid und ip zu machen und dort dann immer und immer wieder eine neue ip einzutragen?
 
Ich empfehle das Handling auf ne ganze tabelle auszuweiten...
Das Konstrukte mit LIKE scheint zwar logisch ist aber unpraktisch...

wenn ich für jede IP eine neue zeile machen würde, würde das die datenbank bei paar millionen besucher völlig in die luft sprengen.
Bist du Web-Entwickler oder Träumer?
ein PAAR MILLIONEN User am TAG...
Damit kann vllt Google.de und andere so große Portale glänzen...

Ohne grad Werbung dafür machen zu wollen... Bei uns in der Gegend ist die Community stayblue.de sehr bekannt...
Und da kommen grade mal fast 1mio User auf, die registriert sind...
Durchschnittlich sind nie mehr als 10000User zugleich online...

Mach dir also wegen der Größe der tabelle keine Sorgen und betrachte den evtuellen Erfolg deiner Site realistisch ;)
 
wieso träumer?
wenn ich einen Counter programmiere, den sich leute kostenlos auf die homepage einfügen können muss ich von deren und deren und deren website alle besucher zählen. somit fallen auf mich paar millionen besucher oder gar mehr...wer weiss ^^
 
Dann unterteile das doch zusätzlich...
Sodass du für jede Site, die den Counter nutzt ne eigene Tabelle angelegst...
Dann kannste flexibler mit den Daten arbeiten...

Wenn es sich letztlich nur um diesen Counter handelt, dann lass die Zählungen komplett in ner eigenen DB machen, damit es noch etwas aufgeräumter ist ^^

wieso träumer?
wenn ich einen Counter programmiere, den sich leute kostenlos auf die homepage einfügen können muss ich von deren und deren und deren website alle besucher zählen. somit fallen auf mich paar millionen besucher oder gar mehr...wer weiss
Unter dem Gesichtspunkt... okay ^^
Ich ging von nem einzelnen Web-Projekt aus ;)
 
Hö? Wie soll das gehen, dass für jede Seite eine eigene Tabelle erstellt wird? Wobei...Ist das überhaupt ratsam? Nach paar Wochen versuch ich dann die DB aufzumachen und auf einmal hab ich xxxxx tausende Tabellen durch die ich scrollen kann.?

ich wüsst auch gar nicht wie ich das realiseren soll. weil meine startseite funktioniert so, dass bei jedem aufruf eine neue user-id generiert wird und wenn jemand en counter code dann einbindet dann werden die user auch gezählt....wie frage ich denn nach tabellen ab und deren werten? nene, ich glaub ich bleib bei meinen 4-5 tables und verwende die irgendwie =)
 
Zuletzt bearbeitet:
Dazu müsstest du ermitteln welche Site den Counter grade aufruft...
Existiert die Tabelle für diese Site, dann wird se benutzt, sonst angelegt...
Vermutlich isses da am übersichtlichsten, wenn du die Tabelle mit der URL der Site benennst...

Klar kommen dadurch einige Tabellen zusammen mit der Zeit...
Aber dafür hast du ne Übersciht welche Sites deinen Counter verwenden und kannst die Daten exakter und Strukturierter verwenden...

Würdest du das alles in einer Tabelle machen, dann gehen wir mal von nen paar Mio Einträgen aus...
Bei der aktuellen Struktur wären dann die Einträge für die IP ziemlich lang...
Dadurch kannst dud ie Anzahl der tatsächlich gezählten User(IPs) nur ermitteln, wenn du deinen riesen String mit php zerlegst...
Wenn du nun die Tabelle komplett nutzt und für jede IP nen eigenen Eintrag verwendst, dann kannst du gant einfach zählen lassen, wieviele IPs (tatsächliche User) erfasst wurden...
Dann hast du aber immer noch x-mio Einträge in einer Tabelle, da ja JEDE Site darin speichert...

Ich denke daraus macht sich die Übersichtlichkeit der "großen" Lösung deutlich ^^

Das zählen der Datensätze kannste dann nämlich ganz easy mit mysql_num_rows() machen...
Und du kannst EINEN Datensatz EXAKT für EINEN User identifizieren...

Das ganze is dadurch auch erweiterbar... Du könntest also auch zu jeder IP weitere informationen speichern ^^

[BRAINSTORM]
Auf dieser Struktur ließen sich zB schreib sperren für Forum, Gästebücher etc mit integrieren... Nur Timestamp speichern und checken ^^
 
Ja aber wie funktioniert das?

Wie ermittele ich z.B. die seite. Mit REFERER?
Wie erstelle ich für jede Seite eine Tabelle also schreibe das in ein PHP Script... ?

Die Ideen sind alle sehr gut nur kann ich sie als Anfänger/Fortgeschrittener nur anfangs schwerlich umsetzen. :-)

LG
 
Zurück