PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : plopp Schnippsel Auszahlung Überprüfung



napfkuchen
28.10.2008, 20:45
In der Anleitung steht mann muss die /lib Functions.lib

Bearbeiten und nach
function db_query($sql_tag) {
$sql_return = mysql_query($sql_tag);
return $sql_return;


Suchen dieses ist bei mir nicht vorhanden x.X

Hat jemand ein einfacheres Script?


Ich suche eins wo wenn ein user eine auszahlung tätigt ich die erst im ADminforce sehe und die dann freigebe

Sebmaster
28.10.2008, 20:56
Die Funktion ist im VMS 1.2 um einiges länger (SQL-Injections und so).

=> du darfst nur nach
function db_query($sql_tag) {suchen:yes:

Aber mir ist es gänzlich unverständlich, wazu man das bearbeiten soll?! Erklär mir das bitte mal!

napfkuchen
28.10.2008, 21:23
Also, ich will

Das wenn ein User sicb bei mir was auszahlen läßt das ich das erst im adminforce sehe und dann durch lassen kann



Mit dem Schnippsel von ihm soll das ja so sein x) (Ich hoffe es hält was es verspricht)

Sebmaster
28.10.2008, 21:55
Mit dem Schnippsel von ihm soll das ja so sein x) (Ich hoffe es hält was es verspricht)

Aber wozu soll man da die Funktion ändern?:der:

napfkuchen
28.10.2008, 22:02
Aber wozu soll man da die Funktion ändern?:der:
Steht so in der anleitung :knueppel:


kennste ne andere lösung?

eRaaaa
28.10.2008, 22:26
was sollst du denn da einfügen? wahrscheinlich sollst du nicht die query funktion verändern, sondern eine neue funktion einfügen?!....also kannste das einfach ans ende klatschen ! (natürlich vor ?> )

;D

napfkuchen
28.10.2008, 22:41
was sollst du denn da einfügen? wahrscheinlich sollst du nicht die query funktion verändern, sondern eine neue funktion einfügen?!....also kannste das einfach ans ende klatschen ! (natürlich vor ?> )

;D



Mit diesem Codeschnipsel wird das Guthaben der Seite geschützt ;)
Etwas zum Hintergrund, warum dieses Schnipsel entstand: Mein Hoster hat ein Limit eingesetzt, welches die Datenbankabfragen in der Stunde begrenzt. Ich wurde über diese neue Einstellung nicht informiert, so das vollkommen überraschend massenweise Fehler auftraten. Die Datenbank "machte dicht" und nichts ging mehr.
Dann meldete ein User, dass bei der Auszahlung ein Fehler auftritt, der es ermöglicht, das Konto des Seitenbetreibers abzuräumen ....
Kontrolle ergab, das bei der Auszahlung die Schnittstelle zu Klamm, Cashcrawler etc. bedient wird und danach diese Auszahlung auf dem Userkonto verbucht wird. Wenn die Datenbank nun keine Abfragen mehr annimmt, wird über die Schnittstelle ausgezahlt, aber diese Auszahlung in der Datenbank der Seite nicht festgehalten.
Ein User bekam das auch sehr schnell mit und zahlte eine grosse Summe auf die Seite ein. Zum Glück hatte ich ja eine Info bekommen und habe dadurch verhindern können, dass dieser User mit dieser grösseren Summe noch mehr ergaunern konnte.

Nun habe ich eine Kontrolle eingebaut, welche evtl. Fehlermeldungen bei der Arbeit mit der Datenbank auswertet und entsprechend reagiert. In den letzten Tagen hat mir dieser Schnipsel schon eine Menge Stress erspart. Denn auch wenn der User, der davon betroffen ist, bereit ist zurückzuzahlen, ist es doch eine Unannehmlichkeit, die oft mit Stress verbunden ist.

Hier nun die Anleitung:
Als erstes müssen wir dafür sorgen, dass das Auszahlungsscript überhaupt merkt, das etwas bei der Arbeit mit der Datenbank schief läuft. Das VMS1 ist leider so aufgebaut, das keinerlei Fehlermeldungen an das aufrufende Script durchgegeben wird.
Sämtliche Datenbankabfragen werden in der functions.lib abgearbeitet. Diese befindet sich im Verzeichnis /lib. In der functions.lib ist eine Funktion db_query. Orginal sieht sie wie folgt aus:


function db_query($sql_tag) {
$sql_return = mysql_query($sql_tag);
return $sql_return;
}

Um evtl. Fehlermeldungen durchzureichen, muss diese Funktion so aussehen:


function db_query($sql_tag) {
global $sql_open;
$sql_return = mysql_query($sql_tag);
$fehler = mysql_errno($sql_open);
if($fehler){
$sql_return = $fehler;
}
return $sql_return;
}

Es wird nun geprüft, ob bei der Abarbeitung ein Fehler aufgetreten ist. Wenn ja, wird diese Meldung anstatt der normalen Ergebnismenge zurückgegeben.

Der nächste Punkt ist die auszahlen.php selbst. Diese liegt im Verzeichnis /content/konto
Ich das Orginalstück des Scriptes, der geändert werden muss:


if ($_POST['trans_menge'] <= $kontodaten['kontostand']) {
if ($schnittstelle['anfragen_user'] == 0 or $s_verbrauch < $schnittstelle['anfragen_user']) {
$buchungs_id = create_code(14);
@require_once ("lib/schittstellen/".$schnittstelle['schnittstelle'].".php");
@auszahlen ($schnittstelle['betreiber_id'],$schnittstelle['betreiber_passwort'],$_SESSION['uid'],$_POST['uid_passwort'],$schnittstelle['betreiber_kennung'],$_POST['trans_menge'],$schnittstelle['auszahltext'],'');
if ($schnittstelle['anfragen_user'] != 0) db_query("INSERT INTO ".$db_prefix."_schnittstelle_anfragen (zeit,uid) VALUES ('".$tag."','".$_SESSION['uid']."')");
if ($error) {
$auszahlmeldung = $trans_ausgabe;
} else {
kontobuchung ('-',$_POST['trans_menge'],$_SESSION['uid']);
buchungsliste ($buchungs_id,'-'.$_POST['trans_menge'],$schnittstelle['auszahltext'],$_SESSION['uid']);
$auszahlmeldung = 'Es wurden '.$_POST['trans_menge'].' '.$waehrung.' ausgezahlt';
}
} else {
$auszahlmeldung = 'Deine Schnittstellenanfragen sind verbraucht!!!';
}
} else {
$auszahlmeldung = 'Soviel Guthaben hast Du nicht!!!';
}

Und so sieht dieses Teil nun bei mir aus:


if ($_POST['trans_menge'] <= $kontodaten['kontostand']) {
if ($schnittstelle['anfragen_user'] == 0||(($schnittstelle['anfragen_user'] != 0) && (@$s_verbrauch < $schnittstelle['anfragen_user']))) {
$buchungs_id = create_code(14);
@require_once ("lib/schittstellen/".$schnittstelle['schnittstelle'].".php");
@auszahlen ($schnittstelle['betreiber_id'],$schnittstelle['betreiber_passwort'],$_SESSION['uid'],$_POST['uid_passwort'],$schnittstelle['betreiber_kennung'],$_POST['trans_menge'],$schnittstelle['auszahltext'],'');
if ($schnittstelle['anfragen_user'] != 0) db_query("INSERT INTO ".$db_prefix."_schnittstelle_anfragen (zeit,uid) VALUES ('".$tag."','".$_SESSION['uid']."')");
if ($error) {
$auszahlmeldung = $trans_ausgabe;
} else {
$fehler = db_query("UPDATE ".$db_prefix."_kontodaten SET `kontostand` = `kontostand` - ".$trans_menge." WHERE uid=".$_SESSION['uid']."");
$return=mysql_affected_rows($sql_open);

@mail("deinemail@addy.de","Userauszahlung ".$_SESSION['uid']." ".$_POST['trans_menge'],"Betroffene Datensaetze: ".$return." Fehler: ".$fehler." User: ".$_SESSION['uid']." Buchungsid: ".$buchungs_id." Menge: ".$_POST['trans_menge'], 'FROM: '.$seitenname.' <'.$betreibermail.'>');
if($fehler>1){
//rueckbuchung
@einzahlen ($schnittstelle['betreiber_id'],$schnittstelle['betreiber_passwort'],$_SESSION['uid'],$_POST['uid_passwort'],$schnittstelle['betreiber_kennung'],$_POST['trans_menge'],"Rückbuchung - miles4you.de",'');
$auszahlmeldung = "Bei der Auszahlung ist ein Fehler aufgetreten!";

}else{
buchungsliste ($buchungs_id,'-'.$_POST['trans_menge'],$schnittstelle['auszahltext'],$_SESSION['uid']);
$auszahlmeldung = 'Es wurden '.$_POST['trans_menge'].' '.$waehrung.' ausgezahlt';
}

}
} else {
$auszahlmeldung = 'Deine Schnittstellenanfragen sind verbraucht!';
}
} else {
$auszahlmeldung = 'Soviel Guthaben hast Du nicht!';
}

Wie funktioniert das nun?
Nachdem das Guthaben über die Schnittstelle ausgezahlt wurde, wird die Buchung auf dem Kundenkonto des Users durchgeführt. Nach dieser Buchung wird geprüft, ob ein Fehler aufgetreten ist. Das der Fehlercode (falls einer auftritt) übergeben wird, haben wir vorhin in der functions.lib eingebaut.
Nach der Abarbeitung wird die Anzahl der betroffenen Datensätze und ein evtl. Fehlercode von mysql ausgewertet.
Bei einer ordnungsgemässen Abarbeitung wird bei dieser Update-Anweisung die Zahl "1" zurückgegeben. Das bedeutet, das eine Zeile bei der Abarbeitung betroffen war. In dem Fall ist alles in Ordnung, es wird ein Eintrag in der Buchungsliste geschrieben, eine Meldung ausgegeben und fertig.
Wenn eine Zahl grösser 1 zurückgegeben wird, ist ein Fehler aufgetreten. In dem Fall wird das Guthaben, das nun schon über die Schnittstelle ausgezahlt wurde, zurückgebucht. Beim User wird eine Fehlermeldung ausgegeben und das Script ist zu Ende.

Der Befehl mysql_affected_rows fragt auch die Anzahl der betroffenen Datensätze ab, allerdings hat mir dieser Wert zur Identifizierung von sql-fehlern nicht ausgereicht ;) Für denjenigen, der sich mit sql etwas auskennt, ist es schon recht hilfreich, den genauen Fehlercode zu haben. Wem diese Information zuviel ist, kann sie auch in der Mailanweisung rausnehmen.

Falls du nur bei einem Fehler eine Mail erhalten möchtest, musst du die Mailanweisung eine Zeile tiefer, nach "if($fehler>1){" setzen.


So eine Mail bekomme ich nun, wenn die Abarbeitung richtig gelaufen ist:
Betroffene Datensaetze: 1 Fehler: 1 User: 12345 Buchungsid: mAUBf955biKEdt Menge: 2929

und so ein Fehler:
Betroffene Datensaetze: -1 Fehler: 1226 User: 12347 Buchungsid: MABxGvmk4bBT4T Menge: 3249

Und das auf dem Konto bei Cashcrawler.de:
25.03 22:39 Auszahlung - miles4you.de 12347 -3249
25.03 22:39 Rückbuchung - miles4you.de 12347 3249

Und mit dieser Rückbuchung ist mein Guthaben gerettet :D

Bei Fragen und Problemen helf ich gern weiter
plopp




*edit by dude32

jpwfour
29.10.2008, 00:22
Nun, 1. ist dieser Codeschnippsel nur fürs VMS Version 1.1 gedacht, daher kann es natürlich Schwierigkeiten beim Einbau geben.
2. Halte ich den Schnippsel nicht mehr für sehr sinnvoll, da er ja aus dem Grund entstand:

Mein Hoster hat ein Limit eingesetzt, welches die Datenbankabfragen in der Stunde begrenzt.Ich würde dir oder jedem Anderen davon betroffenen raten, den Hoster zu wechseln :yes:

Geht es dir nur um die Kontrolle der Auszahlungen,
gibt es hier irgendwo einen Codeschnippsel, der die Auszahlungen der letzten X Tage im Adminforce anzeigt,
und es gibt Addons, welche entweder
einzelne User zur Auszahlung freischalten/sperren können oder aber
dass die User Auszahlungen erst beantragen müssen, was aber nicht sehr userfreundlich ist, da sie so ja immer warten müssen, bis du die Auszahlungen genehmigst.

napfkuchen
29.10.2008, 06:14
Nun, 1. ist dieser Codeschnippsel nur fürs VMS Version 1.1 gedacht, daher kann es natürlich Schwierigkeiten beim Einbau geben.
2. Halte ich den Schnippsel nicht mehr für sehr sinnvoll, da er ja aus dem Grund entstand:
Ich würde dir oder jedem Anderen davon betroffenen raten, den Hoster zu wechseln :yes:

Geht es dir nur um die Kontrolle der Auszahlungen,
gibt es hier irgendwo einen Codeschnippsel, der die Auszahlungen der letzten X Tage im Adminforce anzeigt,
und es gibt Addons, welche entweder
einzelne User zur Auszahlung freischalten/sperren können oder aber
dass die User Auszahlungen erst beantragen müssen, was aber nicht sehr userfreundlich ist, da sie so ja immer warten müssen, bis du die Auszahlungen genehmigst.
Es geht umd die Auszahlung freischalten/sperren das die User warten müssen bis ich sie Auszahle, schaue ja täglich nach!!

Nur es gibt User die haben meistens 30 Mio 0 Banner gelickt 0 Bettel Link 0 Eingezahlt deswegen will ich das haben :frusty:

Hardy
29.10.2008, 10:45
Es geht umd die Auszahlung freischalten/sperren das die User warten müssen bis ich sie Auszahle, schaue ja täglich nach!!

Nur es gibt User die haben meistens 30 Mio 0 Banner gelickt 0 Bettel Link 0 Eingezahlt deswegen will ich das haben :frusty:

Vielleicht solltest du dann lieber erstmal schauen warum das so ist...

napfkuchen
01.11.2008, 16:18
Vielleicht solltest du dann lieber erstmal schauen warum das so ist...



Wenn Jemand diese überprüfung hat für den adminforce wäre echt dank bar x3

Laemmi
01.11.2008, 18:42
Hallo,
was willst du mit irgendwelchen Schnipseln oder Überprüfungen? Mit dem Webspace den du derzeit hast wird das doch ohnehin nichts. Erstmal sparen und dir dann was vernünftiges besorgen, dann kannst du das nochmal angehen.

Mit deinem de.pn kommst du nicht weit.

LG Laemmi

napfkuchen
01.11.2008, 18:45
Hallo,
was willst du mit irgendwelchen Schnipseln oder Überprüfungen? Mit dem Webspace den du derzeit hast wird das doch ohnehin nichts. Erstmal sparen und dir dann was vernünftiges besorgen, dann kannst du das nochmal angehen.

Mit deinem de.pn kommst du nicht weit.

LG Laemmi



Das war nicht meine frage ich sage ich benötige den code für die adminforce


was geht dich eigentlich an was ich für einen webspace habe du weißt doch gar nicht was alles bestellt ist x.X

Laemmi
01.11.2008, 20:42
Hallo,
stimmt geht mich reinweg garnichts an *lol*. Aber warum soll jemand seine Zeit opfern und dir Lösungen anbieten für eine Sache die bei dir derzeit ohnehin nicht funzt?

Frag einfach mal wieder nach wenn bei dir auch etwas laufen könnte, momentan erreiche ich ja nichtmal mehr deine Seite *g*.

LG Laemmi

napfkuchen
01.11.2008, 21:00
Hallo,
stimmt geht mich reinweg garnichts an *lol*. Aber warum soll jemand seine Zeit opfern und dir Lösungen anbieten für eine Sache die bei dir derzeit ohnehin nicht funzt?

Frag einfach mal wieder nach wenn bei dir auch etwas laufen könnte, momentan erreiche ich ja nichtmal mehr deine Seite *g*.

LG Laemmi
Ziehe gerade um auf einen Server mit TlD!