[SQL] denkfehler im code

HoB

HoB
ID: 79596
L
22 April 2006
2.521
74
moin,

ich habe mir mal einen code gebastelt, der 2 felder überprüfen soll, bevor er eine gutschrift rausrückt. nur irgendwie funzt der noch nich richtig.

wo ist das der fehler? wer weiss es? :-?

so hab ichs jetzt...
PHP:
mysql_query("update user set last_credit = '".time()."' where usr = '".$user."'");
                    echo "Gutschrift ist erfolgt...";
mysql_query("update user set start=start+1,startaufruf=startaufruf+1,starttest=starttest+1 where usr = '$user'");
mysql_query("update user set start=start+0.50 where usr='$geworbenvon' AND where usr='$user' AND (($startaufruf=500) && ($starttest == 1))");

..oder ist es so korrekt?
PHP:
mysql_query("update user set last_credit = '".time()."' where usr = '".$user."'");
                    echo "Gutschrift ist erfolgt...";
mysql_query("update user set start=start+1,startaufruf=startaufruf+1,starttest=starttest+1 where usr = '$user'");
mysql_query("update user set start=start+0.50 where usr='$geworbenvon' when '$user' = (($startaufruf=500) && ($starttest == 1))");
 
PHP:
mysql_query("update user set last_credit = '".time()."' where usr = '".$user."'");
                    echo "Gutschrift ist erfolgt...";
mysql_query("update user set start=start+1,startaufruf=startaufruf+1,starttest=starttest+1 where usr = '".$user."'");
mysql_query("update user set start=start+0.50 where usr='$geworbenvon' AND where usr='$user' AND (($startaufruf=500) && ($starttest == 1))");

Probier mal so...!
 
ne.. is schwachsinn, wenn ich beide überprüfungen mache.. hat ja gar keinen sinn! :-? also.. ich lass startaufruf=startaufruf und starttest=starttest mach ich weg. nun habe ich folgenden code..

PHP:
     mysql_query("update user set start=start+1,startaufruf=startaufruf+1 where usr = '".$user."'");
     mysql_query("update user set start=start+0.50 where usr='$geworbenvon' AND where usr='$user' AND '$startaufruf'=500");

...der aber auch nicht zu funzen scheint 8O
 
ne.. is schwachsinn, wenn ich beide überprüfungen mache.. hat ja gar keinen sinn! :-? also.. ich lass startaufruf=startaufruf und starttest=starttest mach ich weg. nun habe ich folgenden code..
...der aber auch nicht zu funzen scheint 8O
Versuchs mal mit sauberem Programmieren ;)
PHP:
     mysql_query("update `user` set `start` = `start`+1, `startaufruf` = `startaufruf`+1 where `usr` = '".$user."';");
     mysql_query("update `user` set `start`=`start`+0.50 where `usr` = '".$geworbenvon."' AND where `usr` = '".$user."' AND `startaufruf` = 500;");

Achja, schau mal deinen letzten Query an ;)
AND where usr='$user' AND '$startaufruf'=500"
 
also.. bei startaufruf wird zwar hoch gezählt, aber die gutschrift bei geworbenvon funzt immer noch nich und ich hab deinen code jetzt 1:1 übernommen.

bei deinem vorgänger hat der code teilweise mal geklappt.
 
Dann existiert wohl kein Eintrag mit den WHERE Bedienungen?!

also.. es gibt die tabelle user und die felder..
start
startaufruf
starttest
und
geworbenvon

und die abfrage mit den 500 gibt es sobald ich zweimal den aufruf mache, denn zum testen stelle ich es immer auf den stand von 498.
 
Wo ist das Problem ?

Code:
SELECT foo FROM bar WHERE field = 'field' AND field2 = 1

Du musst uns schon genaueres sagen / beschreiben, wenn wir dir helfen sollen...

btw: SQL-Injections ...
 
Wo ist das Problem ?

Code:
SELECT foo FROM bar WHERE field = 'field' AND field2 = 1

Du musst uns schon genaueres sagen / beschreiben, wenn wir dir helfen sollen...

btw: SQL-Injections ...

das problem ist, dass die codes, die hier im thread stehen nicht gehen und was ich will, steht im ersten beitrag. ;)
 
also.. der erste teil des codes funktioniert nun.

der zweite teil sieht im moment so aus..

PHP:
mysql_query("update `user` set `start`=`start`+1 where `usr`='".$geworbenvon."' AND WHERE `usr`='".$user."' AND `startaufruf` = 500;");

auf deutsch, was ich will, dass es macht..

schreibe im feld "start" 1 punkt dem "werber" gut, wenn der "user" einen punktestand von "500" im feld "startaufruf" hat.

warum geht das nicht? ich dreh bald durch! :evil:

ich hoffe, dass es nicht damit zusammen hängt, dass ich die beiden querys untereinander habe, oder!?

also so meine ich..
PHP:
mysql_query("update `user` set `start`=`start`+1,`startaufruf`=`startaufruf`+1 where `usr` = '".$user."'");
mysql_query("update `user` set `start`=`start`+1 where `usr`='".$geworbenvon."' AND WHERE `usr`='".$user."' AND `startaufruf` = 500;");
 
Guck Dir mal Dein Query ganz genau an. Das muss schiefgehen, denn Du sagst ihm sinngemäss:
Code:
MACHE irgendwas
WENN X=U UND X=V
X kann nunmal aber nicht gleichzeitig U und V sein, es sei denn U=V, was in Deinem Fall aber auszuschliessen ist.
 
PHP:
mysql_query("update `user` set `start`=`start`+1,`startaufruf`=`startaufruf`+1 where `usr` = '".$user."'");

Das hier sollte ja klappen. Damit werden die Werte start und startaufruf für alle Zeilen mit user = $user um 1 Punkt erhöht.

Aber das zweite hier kann nicht klappen:

PHP:
where `usr`='".$geworbenvon."' AND WHERE `usr`='".$user."'

Also user = $geworbenvon = $user? Da wirst du immer eine leere Menge zurück bekommen. ;)

Du wirst den Umweg über eine if-Abfrage gehen müssen und nach dem ersten Update erstmal den Wert für startaufruf von $usr abfragen.

Alternative: Wenn ich es richtig interpretiere, dann bekommt der Werber alle 500 Aufrufe seines Refs einen Bonus? Dann würde ich die Anzahl der gezahlten Bonuspunkte in eine separate Spalte schreiben und lieber die Bonuspunkte per Cron alle x Minuten gutschreiben. Also dann überprüfen: Falls [Aufrufe des Ref] % 500 - [bereits bezahlte Bonuspunkte] > 0, dann Bonuspunkte für den Werber gutschreiben und [bereits behalte Bonuspunkte] aktualisieren.

Das würde dir 2 DB-Abfragen pro Aufruf ersparen. ;)

Gruß, Zera
 
PHP:
mysql_query("update `user` set `start`=`start`+1,`startaufruf`=`startaufruf`+1 where `usr` = '".$user."'");

Das hier sollte ja klappen. Damit werden die Werte start und startaufruf für alle Zeilen mit user = $user um 1 Punkt erhöht.

Aber das zweite hier kann nicht klappen:

PHP:
where `usr`='".$geworbenvon."' AND WHERE `usr`='".$user."'

Also user = $geworbenvon = $user? Da wirst du immer eine leere Menge zurück bekommen. ;)

Du wirst den Umweg über eine if-Abfrage gehen müssen und nach dem ersten Update erstmal den Wert für startaufruf von $usr abfragen.

Alternative: Wenn ich es richtig interpretiere, dann bekommt der Werber alle 500 Aufrufe seines Refs einen Bonus? Dann würde ich die Anzahl der gezahlten Bonuspunkte in eine separate Spalte schreiben und lieber die Bonuspunkte per Cron alle x Minuten gutschreiben. Also dann überprüfen: Falls [Aufrufe des Ref] % 500 - [bereits bezahlte Bonuspunkte] > 0, dann Bonuspunkte für den Werber gutschreiben und [bereits behalte Bonuspunkte] aktualisieren.

Das würde dir 2 DB-Abfragen pro Aufruf ersparen. ;)


Gruß, Zera

der erste code geht. das weiss ich ja und den zweiten habe ich schonmal mit if und so versucht, aber dafür bin ich einfach noch zu blöd. ich hatte es so..

PHP:
if ($startaufruf=500 where usr=$user)
{
mysql_query("update user set start=start+0.50 where usr='$geworbenvon'");
}else{
echo "<br>Noch keine Gutschrift an den Werber erfolgt!";
}

es muss doch möglich sein, dass man 2 abfragen macht und wenn die passen, dass dann eine aktion statt findet, oder ist das prinzipiell nicht möglich bei sql?

btw: die gutschrift von 500 ist absolut einmalig, also brauch ich den cron eigentlich nich..;)
 
Hi,

sollte so in etwa passen, auch wenn´s keine schöne Lösung ist!

PHP:
mysql_query("SELECT id FROM user WHERE usr = '".mysql_real_escape_string($usr)."' AND startaufruf = 500") or die (mysql_error());
if(mysql_affected_rows() === 1) {
   mysql_query("UPDATE user SET start=start+0.5 WHERE usr = '".mysql_real_escape_string($geworbenvon)."') or die (mysql_error());
}

Woher soll die if-schleife eigentlich wissen, dass du eine DB-Abfrage ausführen willst ?

Eine Einmaligkeit spricht nicht gegen, sondern eher für den Cronjob-Einsatz.
Gruß
 
hmm.. da kommt dann..

PHP:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/mhn24_com/www....

vielleicht sollte ich noch erwähnen, dass diese zeuch inmitten eines anderen if-codes steht..