• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Wert aus der Datenbank abziehen

Witschi262

Blogger
Hi,
ein User kauft sich bei mir im Shop ein Virtuelles Abzeichen. AUch Badge genannt.
Ein Badge kostet 3 Punkte. Wenn ich aber die Drei Punkte abziehen möchte, werden aber die Punkte nicht abgezogen, sondern das PunkteKonto auf 0 zurückgesetzt.

Beispiel:
Klause hat 100 Punkte. Er kauft Badge XXYY für 3 Punkte. Nach dem Kauf hat Klaus nurnoch 0 Punkte.

PHP:
[HTML]              $result = punkte-$price;
              $sql = "UPDATE user SET punkte = $result WHERE name = '$user_name'";
              mysql_query($sql)or die(mysql_error());[/HTML]

Könttet ihr mir bitte helfen?
 
Fehlt in der ersten Zeile bei "punkte" nicht noch das "$"? Also anstatt
Code:
[COLOR=#000000][COLOR=#0000BB]$result [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]punkte[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]$price[/COLOR][COLOR=#007700];[/COLOR][/COLOR]
so
Code:
[COLOR=#000000][COLOR=#0000BB]$result [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]$punkte[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]$price[/COLOR][COLOR=#007700];[/COLOR][/COLOR]
 
Du hast ein "$" vergessen:
Code:
[COLOR=#000000][COLOR=#0000bb]$result [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb][U][B]$[/B][/U]punkte[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000bb]$price[/COLOR][COLOR=#007700];[/COLOR][/COLOR]

edit: war jmnd. schneller
 
Na der $ hilft auch nur, wenn vorher $punkte korrekt mit einem SELECT gefüllt wurde. Aber ein wenig rechnen können die meisten Datenbanken auch, daher sollte auch gehen

PHP:
$sql = "UPDATE user SET punkte = punkte - $result WHERE name = '$user_name'";

wobei ich meine, dass der $user_name in den einfachen Hochkommas nicht übersetzt wird. Ich würde es vorsichtshalber dann so schreiben:

PHP:
$SQUOT = "'";
$sql = "UPDATE user SET punkte = punkte - $result WHERE name = $SQUOT$user_name$SQUOT";
 
Was schreibt ihr da?

Alles innerhalb von doppelten Anführungszeichen wird interpoliert. Es ist also nicht nötig die einfachen Anführungszeichen interpolieren zu lassen, noch den String zu verknüpfen.

PHP:
"UPDATE user SET punkte = punkte - $result WHERE name = '".mysql_real_escape_string($user_name)."'"
das ist ausreichend sicher und sollte funktionieren. Ansonsten mysql_error() überprüfen und mit var_dump() überprüfen, was $result genau ist.
 
Ich mach nur wenig PHP und meine mich zu erinnern, dass alles in einfachen Hochkommas nicht übersetzt wird, das in doppelten schon. Da ich nicht testen wollte, was einfache in doppelten machen, habe ich den sicheren Weg beschrieben. Entscheidend war doch hier nicht die kürzeste Syntax, sondern das Rechnen in das SQL zu verlagern.
 
Es klappt nicht. Jetzt wird das Konto zwar nicht resettet, aber dass einfach nichts abgezogen wird, naja damit ist ja auch keinem Geholfen
PHP:
              if(isset($_GET['id']))
              {
              $shop_id = $_GET['id'];
              $ergebnis = mysql_query("SELECT * FROM offer_badges WHERE id='$shop_id'");
              $row = mysql_fetch_object($ergebnis);
              $user_name = $_COOKIE['login_'];
              $price = $row->price;
              $ergebnis = mysql_query("SELECT punkte FROM user WHERE name='$user_name'");
              $row = mysql_fetch_object($ergebnis);
              $punkte = $row->punkte;
              $result = $punkte-$price;
              $sql = "UPDATE user SET punkte = $result WHERE name = '".mysql_real_escape_string($user_name)."'";
              mysql_query($sql)or die(mysql_error());
              }
PLs, Help :D
 
Versuch erst mal mit dem MySql Admin, die richtigen SQL Statements zu finden und dann gib im Script die dort erzeugten und die Suchkriterien - und Ergebnisse aus und schau, ob die übereinstimmen.
 
Probier einmal:
PHP:
$price = $row[0]['price'];
$punkte = $row[0]['punkte'];

$result = $punkte-$price;
Lass dir eventuell Zwischenwerte ausgeben (z.B. $punkte).
 
Der Shop ist noch in der BETA Phase und erstmal nur für Admins zugänglich.
Was für Lücken sind denn drin?

P.S. In einem Anderen Fall, hat Crashs Code super geklappt, bin Glücklich ;)
 
Ich verwende doch Weitgehend den MySQL_Real_Escape_String, in allen meiner Abfragen und teilweise, bei Benutzerangaben Sortiere ich Bestimmte Zeichen aus.
 
Hier nur zum Teil
PHP:
              if(isset($_GET['id']))
              {
              $shop_id = $_GET['id'];
              $ergebnis = mysql_query("SELECT * FROM offer_badges WHERE id='$shop_id'");
              $row = mysql_fetch_object($ergebnis);
              $user_name = $_COOKIE['login_'];
              $price = $row->price;
              $ergebnis = mysql_query("SELECT punkte FROM user WHERE name='$user_name'");
              $row = mysql_fetch_object($ergebnis);
              $punkte = $row->punkte;
              $result = $punkte-$price;
              $sql = "UPDATE user SET punkte = $result WHERE name = '".mysql_real_escape_string($user_name)."'";
              mysql_query($sql)or die(mysql_error());
              }
 
Achso, muss ich Beispielsweise $user_name und $shop_id also auch Escapen? Somit ist eine MySQL Injection also auch Möglich.. Ok, danke ;)
 
Ja, alles, was direkt (GET, POST, COOKIE) oder indirekt vom Nutzer kommt, muss escapet werden. Am besten escapest du konsequent sämtliche Variablen, die du in eine DB-Query einsetzt.
 
Zurück
Oben