PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : User bestätigt mehr Mails als verschickt wurden!?



Siggi84
27.12.2010, 17:36
Hallo VMS'ler,

ich habe wieder mal ein Problemchen, mal kurz ausgeholt...

Letzte Woche haben mich 2 Mitglieder angeschrieben das seit 1 Woche ein User immer eine Mail mehr in der Mailrally hat als sie, obwohl Sie immer alle bestätigt haben.

Ist natürlich unfair, somit ist ihm immer der erste Platz sicher.

Nachdem ich unzähliche Backups durchsucht habe und Mail für Mail zusammen gerechnet habe, habe ich bei dem User die Mailanzahl um 1 veringert wie bei den anderen, somit war wieder "Gleichstand".

Da ich über die Feiertage keine verschickt habe, hab ich heute umso genauer hingeschaut, siehe da, der User hat wieder 1 mehr.

Habe 8 Stück verschickt und er hat heute 9 in den Buchungen drin stehen!

Wo kann hier der Fehler liegen bzw. wird hier vielleicht manipulliert ?

Es kann sich auch nicht um eine "alte" Mail handeln, da ich gestern die Datenbank "gesäubert" habe und alles Leer war, die Mails haben eh nur eine Gültigkeit von 2 Tagen, wäre somit auch vorbei.

Ich hoffe das Ihr mir helfen könnt und bedanke mich im vorraus für eure Hilfe.

Gruß

Falk alias Siggi84

jpwfour
27.12.2010, 20:11
Hm, wegen 1er Mail :biggrin1:

Mail is ja immer bei jedem anders, daher wäre noch wichtig:
Welche Mailrallye?
Wie werden Mails verschickt?


Habe 8 Stück verschickt und er hat heute 9 in den Buchungen drin stehen!Wie genau stehen die in den Buchungen drin? (TANs, ...)

Evtl. an der Stelle der Rallyefunktion die Daten für den entsprechenden User mitloggen lassen (da er das ja vermutlich weiterhin so macht):


if($mail['uid']==123456){
file_put_contents("adminforce/log.txt", date('d.m. H:i:s')." - ".$_GET['tan']." - ".$mail['verdienst']."\r\n", FILE_APPEND);
}

Bspw. für den normalen Mailversand und Bestätigung in der pcheck.php

Siggi84
27.12.2010, 21:29
Hm, wegen 1er Mail :biggrin1:

Je nur wegen einer, aber meine User passen da recht gut auf, vorallem wenn es um Platz 1 geht :yes: Sie haben aber ja auch recht!


Mail is ja immer bei jedem anders, daher wäre noch wichtig:
Welche Mailrallye?

Diese Hier (http://scripte4webbis.de/?site=list&cat=100), gleich der 2te Artikel (Nr.:197)


Wie werden Mails verschickt?

Manuell direkt über das VMS, also kein Automailer, etc...


Wie genau stehen die in den Buchungen drin? (TANs, ...)

Etwas genaues steht in den Buchungen nicht drin, nur als Verwendungszweck "Paidmailverdienst", kann man hier noch die TAN hinzufügen? Aktuell sieht es so aus:


buchungsliste (create_code(14),$mail['verdienst'],'Paidmailverdienst',$mail['uid']);
Evtl. an der Stelle der Rallyefunktion die Daten für den entsprechenden User mitloggen lassen (da er das ja vermutlich weiterhin so macht):


if($mail['uid']==123456){
file_put_contents("adminforce/log.txt", date('d.m. H:i:s')." - ".$_GET['tan']." - ".$mail['verdienst']."\r\n", FILE_APPEND);
}Bspw. für den normalen Mailversand und Bestätigung in der pcheck.php

Das werde ich morgen gleich mal ausprobieren, wenn ich die nächsten mails verschicke, nur bin ich mir gerade etwas unsicher wo der Code hin muss...

In die pcheck.php unter die ganzen Sachen wie, Rallys, Buchung, APs, Bilanz, etc... ?

Alle außer der eine haben 8 bestätigt, er 9, da ist doch was faul, da es ja bereits letzte Woche genau das gleiche war

Danke wieder im Vorraus !!!

Falk

Siggi84
28.12.2010, 09:27
Also mit der Log habe ich schon mal hinbekommen! DANKE!

Jetzt muss ich erst mal abwarten bis der "Herr" die Mails bestätigt.

Siggi84
30.12.2010, 09:55
Guten Morgen,

so heute hats geklappt...

Hier die Log des Users:



30.12. 09:27:12 - I1svNXXS14kFku - 7000.00
30.12. 09:27:12 - I1svNXXS14kFku - 7000.00
30.12. 09:27:15 - LDWsWKLhBlRa74 - 7000.00
30.12. 09:27:16 - ejzFlQhAyzZPK1 - 7000.00
30.12. 09:27:18 - 5S6Tkn8t96yUZZ - 7000.00
30.12. 09:27:20 - DZuJE1KoSa3327 - 7000.00
30.12. 09:27:22 - vevWBqyKbaTmWk - 7000.00
30.12. 09:27:25 - CXxVsmkuxELtZE - 7000.00
30.12. 09:27:26 - 0RQ3puDlFOPxU8 - 7000.00

Wie man erkennen kann, wurde die erste Mail 2 mal, exakt zur gleichen Zeit bestätigt und auch Gebucht!

Bin jetzt mal so ziemlich alle User durch gegangen die, die Mails bestätigen, das passiert nur bei diesen "Herrn".

Dachte schon es ist vielleicht ein anderer Fehler der Seite, aber da würde es ja nicht nur bei Ihm passieren!?

Jemand eine Idee wie man das unterbinden kann, bzw. wie das eigentlich möglich ist?

Vielen Dank wieder im Vorraus!

jpwfour
30.12.2010, 12:48
Hat der User zu dieser Tan 2 Einträge in der vms_paidmails_empfaenger?
Dann gibts evtl schon beim verschicken ein Problem, dass der User die Mail 2x bekommt.

Welchen Aufenthalt hat die Mail?

Siggi84
30.12.2010, 15:55
Hat der User zu dieser Tan 2 Einträge in der vms_paidmails_empfaenger?
Dann gibts evtl schon beim verschicken ein Problem, dass der User die Mail 2x bekommt.

Welchen Aufenthalt hat die Mail?

Mit der Tan, das weiß ich nicht, muss ich morgen schauen wenn ich wieder verschicke. Sind ja nach der Bestätigung weg.

Kann ich mir nur schlecht vorstellen, ist das überhaupt möglich, 2 mal die gleichen Einträge?

Meine Mails haben immer 50sek Aufenthalt!

jpwfour
30.12.2010, 23:35
Der Vollständigkeithalber:
es besteht theoretisch die Möglichkeit, sofern das PHP Skript mehrmals "gleichzeitig" aufgerufen wird, dass die Vergütung mehrfach erfolgt, sofern in 2 Fällen das Auslesen der Daten aus der db vor dem Update der entsprechenden Einträge (im jeweils anderen Skriptaufruf) erfolgt (und damit die if Abfrage: "Vergüten ja/nein" beide Male positiv ausfällt).

Das ist aber extrem unwahrscheinlich und kann definitiv nicht "gewollt" herbeigeführt werden, insofern würde sowas nur ein gelegenliches Auftreten einer Doppelbestätigung erklären, und da kann man schon Größenordnung von 1er aus 100.000 mind. annehmen :wink:

Sollte tatsächlich ein doppelter Eintrag die Ursache sein, könnte man das denke ich fixen, indem man aus:


db_query("UPDATE ".$db_prefix."_paidmails_empfaenger SET status=1 WHERE tan='".$_GET['tan']."' and uid=".$_GET['uid']." LIMIT 1");
das Limit 1 weglässt, also:

db_query("UPDATE ".$db_prefix."_paidmails_empfaenger SET status=1 WHERE tan='".$_GET['tan']."' and uid=".$_GET['uid']."");

Dann würde bei doppelten TANs jede auf "bestätigt" gesetzt werden (nur für die jewelige UID natürlich), einen Versuch ist es wert (pcheck.php)

Siggi84
31.12.2010, 08:02
Danke für deine Hilfe :thumb:

Da ich jetzt leider auf Arbeit muss, kann ich heute keine Mails verschicken.

Wird also erst im neuen Jahr :biggrin1:

Melde mich morgen wieder!

Einen guten rutsch ins Jahr 2011!!!

Siggi84
01.01.2011, 12:49
Ein gesundes neues Jahr 2011 !!!

Habe soeben wieder Mails verschickt und jeden einzelnen Eintrag in...


vms_paidmails_empfaenger

... Kontrolliert, sind insgesamt 791 Einträge und keiner davon ist doppelt.

Jetzt heißt es abwarten bis die Mails wieder bestätigt werden, melde mich sofort, sobald sich was ergibt.

Die Änderung an der pcheck.php habe ich vorerst noch nicht gemacht, da es ja keinen doppelten Eintrag gibt, aber theoretisch kann sich das nicht negativ auswirken, eher zum vorteil, oder?

Könnte man ja somit generell abändern, oder?

Schönes ausnüchtern noch :biggrin1:

Siggi84
02.01.2011, 12:06
Guten Morgen,

trotz das in der Datenbank kein doppelter Eintrag war, wieder das gleiche!

Log von gestern:


01.01. 19:39:14 - 2aAQRy9RnaqSMK - 7000.00
01.01. 19:39:14 - 2aAQRy9RnaqSMK - 7000.00
01.01. 19:39:16 - xcbnr7kShM93tf - 7000.00
01.01. 19:39:17 - B9bHgP8xhvZsvM - 7000.00
01.01. 19:39:18 - nKY3KVKs4ses0T - 7000.00
01.01. 19:39:21 - N0bkQOM7JPzou0 - 7000.00
01.01. 19:39:23 - GZPIyiL5xp61JB - 7000.00
01.01. 19:39:25 - DLiTmqe7DbO0Kr - 7000.00

Wieder das gleiche, nur bei dem einen User!

didith1207
02.01.2011, 18:16
ich wurde von einem sponsor auf das selbe problem hingewiesen ich hatte das aber auf dem nonlose vms und meine mails verschickt... keine doppelten einträge in der DB und trotzdem hat ein User ständig eine davon 2x bestätigt :(

Siggi84
02.01.2011, 18:53
Und wieder...

Log von heute:


02.01. 12:05:01 - rOKNNI8cOaseWi - 6500.00
02.01. 12:10:39 - sdFcFDQM5asVUk - 6500.00
02.01. 12:33:06 - xhYTpF7PYthQRA - 6500.00
02.01. 16:01:38 - BXetIsYyIw2jAp - 6500.00
02.01. 16:01:40 - PW700O6ELR4rCP - 6500.00
02.01. 16:01:42 - JetvPd0PnFyJAA - 6500.0
02.01. 16:01:46 - nvZNGPaP1AYGTk - 6500.00
02.01. 16:01:46 - 6s0IhCULKFl6rX - 6500.00
02.01. 16:01:46 - 6s0IhCULKFl6rX - 6500.00
02.01. 16:01:47 - sbWPEYrbABr4KQ - 6500.00
02.01. 16:01:49 - SGuMAvxI26Kunl - 6500.00

Trotz das kein Eintrag doppelt ist, habe ich jetzt den Tipp von jpwfour mal gemacht...





db_query("UPDATE ".$db_prefix."_paidmails_empfaenger SET status=1 WHERE tan='".$_GET['tan']."' and uid=".$_GET['uid']." LIMIT 1");das Limit 1 weglässt, also:

db_query("UPDATE ".$db_prefix."_paidmails_empfaenger SET status=1 WHERE tan='".$_GET['tan']."' and uid=".$_GET['uid']."");Dann würde bei doppelten TANs jede auf "bestätigt" gesetzt werden (nur für die jewelige UID natürlich), einen Versuch ist es wert (pcheck.php)

... mal sehen was morgen ist.

Würdet ihr an meiner Stelle den User sperren?

Ist zwar nicht meine Art, aber wohl die letzte Maßnahme!?

Lokutos
02.01.2011, 19:09
Und wieder...

Log von heute:



02.01. 16:01:46 - 6s0IhCULKFl6rX - 6500.00
02.01. 16:01:46 - 6s0IhCULKFl6rX - 6500.00

MFG Lokutos

Siggi84
02.01.2011, 19:11
MFG Lokutos

Ja, nur wie macht er das.

Für jedes Problemchen/Fehler/Bug/etc... muss es ja eine Lösung geben.

hankfromhelvete
03.01.2011, 02:17
Würdet ihr an meiner Stelle den User sperren?

Würde ich nicht machen, solange du nicht weißt ob es ein Fehler oder Absicht des Users ist.

jpwfour
03.01.2011, 12:36
Im Prinzip gibt es ja eine gute Prüfung bei Mailbestätigung, in der ich so erstmal keine groben Fehler erkennen kann. Und wenn die Einträge nicht doppelt vorhanden sind, bleibt noch das mit der race condition, evtl. benutzt er ein Klickprogramm, welches "gleichzeitiges" Aufrufen natürlich besser hinbekommt als ein Mensch.
Wobei er es dann schon absichtlich darauf anlegen müsste, die meisten Fakeskripte geben sich ja mit einer 1x Bestätigung schon zufrieden :biggrin1:

Sehe 2 Möglichkeiten:
- User sperren, da selbst wenn das keine Absicht ist, er sich dessen dennoch bewusst ist (mehr Vergütung, +1 Punkte mehr in Rallye) und das nicht meldet beim Admin, schon ein Grund (ausserdem sind die Ausreden doch immer spannend die dann kommen :wink:)
- pcheck.php noch besser absichern:

Optimal wären Tabellen-/Zeilensperren, aber etwas kompliziert einzubauen, evtl reicht es auch, die Zeile:

db_query("UPDATE ".$db_prefix."_paidmails_empfaenger SET status=1 WHERE tan='".$_GET['tan']."' and uid=".$_GET['uid']." LIMIT 1");die normalerweise erst nach den ganzen Rallyes Bilanzen etc kommt, direkt nach:

if (($mail['start']+$mail['aufendhalt']-1) <= time() AND $mail['status'] == 0) {zu verschieben und noch zu erweitern:

db_query("UPDATE ".$db_prefix."_paidmails_empfaenger SET status=1 WHERE tan='".$_GET['tan']."' and uid=".$_GET['uid']." AND status=0 LIMIT 1");danach kann man dann mit:

if(mysql_affected_rows()==1){
//rallyes etc.
}else{
$headmsg = 'Doppelt bestätigt! Paidmail ungültig!';
db_query("UPDATE ".$db_prefix."_paidmails_empfaenger SET status=2 WHERE tan='".$_GET['tan']."' and uid=".$_GET['uid']." LIMIT 1");
}Das doch schon ganz gut verhindern.

Sieht dann etwa so aus der Abschnitt:


if (($mail['start']+$mail['aufendhalt']-1) <= time() AND $mail['status'] == 0) {
db_query("UPDATE ".$db_prefix."_paidmails_empfaenger SET status=1 WHERE tan='".$_GET['tan']."' and uid=".$_GET['uid']." AND status=0 LIMIT 1");
if(mysql_affected_rows()==1){
//rallyes etc. bis:
$headmsg = $mail['verdienst'].' '.$waehrung.' gutgeschrieben!';
}else{
$headmsg = 'Doppelt bestätigt! Paidmail ungültig!';
db_query("UPDATE ".$db_prefix."_paidmails_empfaenger SET status=2 WHERE tan='".$_GET['tan']."' and uid=".$_GET['uid']." LIMIT 1");
}
} else {
$headmsg = 'Wartezeit umgangen! Paidmail ungültig!';
db_query("UPDATE ".$db_prefix."_paidmails_empfaenger SET status=2 WHERE tan='".$_GET['tan']."' and uid=".$_GET['uid']." LIMIT 1");
}

Siggi84
05.01.2011, 18:09
So, jetzt kann ich euch mal wieder updaten :biggrin1:

Hatte leider bissel streß, musste mit Hundi in die Tierklinik.

Seitdem ich das "Limit 1" herausgenommen habe, ist es nicht wieder passiert.

Läuft jetzt seit 3 Tagen ohne Abweichung!

Nur wie kann das jetzt gehen, wenn doch keine doppelten Einträge drin waren, oder gerade nur Zufall?

Halte euch auf dem laufenden!

Danke nochmal an ALLE!!!

Hardy
05.01.2011, 20:13
Verstehe ich jetzt gerade nicht :suspicious:

Was soll es denn mit den Limit zu tun haben?
Vermutlich hast du noch was anderes verändert was ausschlaggebend war oder doch nur zufall (was ich nicht glaube)

Siggi84
05.01.2011, 20:16
Verstehe ich jetzt gerade nicht :suspicious:

Was soll es denn mit den Limit zu tun haben?
Vermutlich hast du noch was anderes verändert was ausschlaggebend war oder doch nur zufall (was ich nicht glaube)

Nein was anderes habe ich nicht gemacht!

Nur aus...


db_query("UPDATE ".$db_prefix."_paidmails_empfaenger SET status=1 WHERE tan='".$_GET['tan']."' and uid=".$_GET['uid']." LIMIT 1");

... das


db_query("UPDATE ".$db_prefix."_paidmails_empfaenger SET status=1 WHERE tan='".$_GET['tan']."' and uid=".$_GET['uid']."");

So wie es jpwfour Hier (http://www.designerscripte.net/showpost.php?p=94745&postcount=8) beschrieben hat!

jpwfour
05.01.2011, 21:48
Wobei, hab mir grad mal die Tabelle vms_paidmails_empfaenger angeschaut, an sich hat die nen Unique Index auf uid, tan, insofern dürfte das Limit 1 irrelevant sein (da keine doppelten Einträge aus dieser Kombination auftreten können).

Evtl. liest der User ja auch jetzt hier mit und unterlässt es daher :biggrin1: