Datensatz einers users nur in 10min schritten in der DB speichern.

genion18

Grünschnabel
Hallo

Und zwar hab ich volgendes problem...

Der user mit der "id=43" geht bei user "id=55" auf sein Profil...

Dieses soll in der DB gespeichert werden mit timestamp.

geht ja volgendermaßen mit

PHP:
$eintrag = "INSERT INTO icc_profilzaehler (wen, idvon, timestamp) VALUES ('$user->id','$usid','$zeit')";
mysql_query($eintrag)or die(mysql_error());

so weit so gut, was er auch macht... jetzt geht der User "id=43" nochmal auf das Profil von user "id=55" und er setzt wieder ein eintag in der DB (ist ja auch logisch)...

jetzt kommt der hacken... wenn der user "id=43" auf das Profil user "id=55" geht soll er es nicht direkt machen, sondern mehr in 10min schritten (sprich, die eintragroutine soll für 10min geperrt bleiben" (dafür das Timestamp).

ich hab hier mal was vorbereitet:

PHP:
$abfrag = "SELECT * FROM icc_profilzaehler WHERE wen = '$user->id'"; 
$abfrage = mysql_query($abfrag); 
while ($row = mysql_fetch_object($abfrage)) {
$von = $row->wen;
IF(empty($von)) {
$zeit = time();
$eintrag = "INSERT INTO icc_profilzaehler (wen, idvon, timestamp) VALUES ('$user->id','$usid','$zeit')";
mysql_query($eintrag)or die(mysql_error());
}ELSE{
$abfrag = "SELECT * FROM icc_profilzaehler WHERE wen = '$user->id'"; 
$abfrage = mysql_query($abfrag); 
while ($row = mysql_fetch_object($abfrage)) {
IF($row->timestamp > time()-600) {
$zeit = time();
$eintrag = "INSERT INTO icc_profilzaehler (wen, idvon, timestamp) VALUES ('$user->id','$usid','$zeit')";
mysql_query($eintrag)or die(mysql_error());
}ELSE{
echo 6;
}}
}}

problem daran ist... das wenn kein Datensatz in der SQl tabelle vorhanden ist er auch nichts macht und das ist das problem an der sache... wenn er was machen würde, dann würde er zum nächsten übergehen, die zeit überprüfen und dann wenn notwendig den eintrag setzen...

vielleicht kennt ihr ein lösungsvorschlag...

Greets
Genion18
 
Also zu nächst ist es unsinig 2 mal den gleichen Sql hintereinander auszuführen.
Siehe Else Zweig.

2 Stimmen die Sql befehle nicht ganz du willst ja das es nur für bestimmte user für 10 min gesperrt ist. Wenn ich Dich richtig verstanden habe und nicht für alle oder?

3. Wenn die erste Abfrage kein Ergebniss auswirft.Dann wird auch nie der andere Teil ausgeführt und somit erfolgt dann nie ein Eintrag!

PHP:
<?PHP
$abfrag = "SELECT wen,idvon,timestamp FROM icc_profilzaehler WHERE wen = '$user->id' AND idvon='$usid' Limit 1";  
$abfrage = mysql_query($abfrag);  

$row = mysql_fetch_object($abfrage) ;
$von = $row->wen; 
$zeit= $row->timestamp;

IF(!isset($von) || empty($von) || !isset($zeit) || $zeit=="") { 
$zeit = time(); 
$eintrag = "INSERT INTO icc_profilzaehler (wen, idvon, timestamp) VALUES ('$user->id','$usid','$zeit')"; 
mysql_query($eintrag)or die(mysql_error()); 
}ELSE{ 

IF($zeit+600 < time()) {  // Wenn 600 Sekunden vergangen sind (10min)
$neue_zeit = time(); 
$eintrag = "INSERT INTO icc_profilzaehler (wen, idvon, timestamp) VALUES ('$user->id','$usid','$neue_zeit')"; 
mysql_query($eintrag)or die(mysql_error()); 
}ELSE{ 
echo 6; 
}}

Mfg Splasch
 
Zuletzt bearbeitet:
hallo...

danke für die schnelle antwort...

soweit funktioniert das script... der User geht auf das Profil und er wird für 10 min gespeert...

dann schreibt er den neuen Eintrag in der DB... das problem ist dann, das der User dann nicht mehr gespeert wird... sprich, er die Eintragspeere dann übergeht...

Punkt 4: nach 10 min darf ein neuer eintrag in der db erfolgen, dies wiederum in 10Min schritten...

Code:
INSERT INTO `icc_profilzaehler` VALUES (2, 15, 41, '1215853147');
INSERT INTO `icc_profilzaehler` VALUES (3, 66, 41, '1215853165');
INSERT INTO `icc_profilzaehler` VALUES (4, 15, 41, '1215853862');
INSERT INTO `icc_profilzaehler` VALUES (5, 23, 41, '1215853574');
INSERT INTO `icc_profilzaehler` VALUES (6, 15, 41, '1215854155');
INSERT INTO `icc_profilzaehler` VALUES (7, 23, 41, '1215854179');
INSERT INTO `icc_profilzaehler` VALUES (8, 23, 41, '1215854183');
INSERT INTO `icc_profilzaehler` VALUES (9, 23, 41, '1215854186');
INSERT INTO `icc_profilzaehler` VALUES (10, 15, 41, '1215854190');
INSERT INTO `icc_profilzaehler` VALUES (11, 23, 41, '1215854222');
INSERT INTO `icc_profilzaehler` VALUES (12, 23, 41, '1215854243');
INSERT INTO `icc_profilzaehler` VALUES (13, 23, 41, '1215854569');
INSERT INTO `icc_profilzaehler` VALUES (14, 23, 41, '1215854602');
INSERT INTO `icc_profilzaehler` VALUES (15, 23, 41, '1215854624');

greets
Toxic
 
Zuletzt bearbeitet:
Das Problem liegt hier
PHP:
IF($zeit+600 < time()) {  // Wenn 600 Sekunden vergangen sind (10min) 
$neue_zeit = time();  
$eintrag = "INSERT INTO icc_profilzaehler (wen, idvon, timestamp) VALUES ('$user->id','$usid','$neue_zeit')";  
mysql_query($eintrag)or die(mysql_error());

hab ich auch bei der schnelle übersehen.

Klar kann das nicht gehen kann ,weil du dann immer ein Insert machst. Richtig were aber Update.
In die Schleife kommt er ja nur rein wenn schon 1 Db eintrag von ihm existiert.Diese muß nur Aktualisiert werden. Anderen falls kommt es zu referenzen.

Mfg Splasch
 
hallo

ein Update soll er nicht machen...

soll schon neue einträge machen.. und diese wiederum mit der speere versehen die neuen einträge...

sprich...

1.wenn in der DB nicht steht, daß Person A die Profilseite von Person B je besucht hat -> eintragen
2.wenn in der DB entsprechende Einträge sind, diese aber älter als 10min sind -> eintragen
3.wenn in der DB ein solcher Eintrag ist, dieser aber jünger ist als 10min -> nicht eintragen

was noch nicht geht ist Punkt 3...

greets
Toxic
 
versuch mal

PHP:
IF(($zeit+600) < time()) {

Ansonsten lass dir die Zeit werte mal per echo ausgeben.

Mfg Splasch
 
hallöchen...

Gemacht, getan und es kommt weiterhin das selbe bei raus...:eek:

INSERT INTO `icc_profilzaehler` VALUES (1, 23, 41, '1215860919');
INSERT INTO `icc_profilzaehler` VALUES (2, 23, 41, '1215861597');
INSERT INTO `icc_profilzaehler` VALUES (3, 23, 41, '1215861599');
INSERT INTO `icc_profilzaehler` VALUES (4, 23, 41, '1215861602');
INSERT INTO `icc_profilzaehler` VALUES (5, 23, 41, '1215861635');

ich denk mal, das problem liegt hier: $zeit= $row->timestamp;, da er nur den ersten wert des user ausließt statt die weiteren die hinzugekommen sind... und wenn der erste schon über der zeit ist macht er weitere einträge ohne zu sehen das es noch weitere gibt...

desweiteren ist mir mit aufgefallen das er bei "$row->timestamp" obwohl ich schon das "Limit 1" weggenommen habe er mir nur den ersten timestamp "1215860919" angiebt...
greets
Genion18
 
Zuletzt bearbeitet:
Ja das ist das Problem weill du alle neu reinschreibst.Darunter leidet dann die referenz.
Bwz verliert der Datensatz seine einziartigkeit.

Nun stehste dann vor dem Problem wie du an den Letzen datensatz des Users rankommst. Alle Datensätze auszulesen were unsin.

Das könnte du mit einen Sql befehl lösen statt:
PHP:
$abfrag = "SELECT wen,idvon,timestamp FROM icc_profilzaehler WHERE wen = '$user->id' AND idvon='$usid' Limit 1";

Schreibste
PHP:
$abfrag = "SELECT wen,idvon,timestamp FROM icc_profilzaehler WHERE wen = '$user->id' AND idvon='$usid' order by timestamp DESC Limit 1";   
$abfrage = mysql_query($abfrag);

Mfg Splasch
 
Zurück