Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Update über Variablenwerte funktioniert nicht [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Update über Variablenwerte funktioniert nicht


 
Paradoxx
13-09-2007, 09:21 
 
Hallo zusammen,

Ich habe folgendes Problem: Ich habe eine MySQL Tabelle welche "benutzerdaten" heißt. Dort stehen verschiedene Felder, wie z.B. der Nickname, die ID und unter anderem auch der Kontostand.

Jeder User hat einen bestimmten Kontostand und dieser soll von Personen, die die nötige Berechtigung dazu haben, verändert werden können.

Um Geld auf das Konto eines anderen Einzuzahlen, klickt er auf der Homepage auf Einzahlung. Es öffnet sich ein Fenster, in dem er über eine Listbox den User auswählen kann, auf dessen konto eingezahlt werden soll und den einzuzahlenden betrag eingeben kann.

Wenn er das ganze abschickt sollte der aktuelle Kontostand des Users mit der eingetippten Zahl addiert werden und der neue wert in das Datenbankfeld geschrieben werden. Hierfür habe ich folgenden Quellcode:



$res = mysql_query("select Nickname, Kontostand from benutzerdaten where Nickname like '".$_POST["beguenstigter"]."'");
$num = mysql_num_rows($res);

echo "<tr>";
echo "<td>" . $dsatz["Nickname"] . "<br></td>";
echo "<td>" . $dsatz["Kontostand"] . "</td>";
echo "</tr><br><br>";
$kontostand = $dsatz["Kontostand"];
$kontostand_new = $kontostand + $_POST["betrag"];
$dsatz["Kontostand"] = $kontostand_new;
echo $kontostand_new;


$sqlab = "update benutzerdaten set Kontostand = '".$kontostand_new."' where nickname = '".$dsatz["Nickname"]."',";
mysql_query(sqlab);

$num1 = mysql_affected_rows();
if ($num1>0)
echo "Der Datensatz wurde ge&auml;ndert<p>";
else
echo "Der Datensatz wurde nicht ge&auml;ndert <p>";




Wenn ich das ausgeführt habe, steht allerdings immer noch der gleiche Wert in dem Kontostand-Feld des betreffenden Users.

Ich wäre über etwas Hilfe sehr dankbar.

P.S.: Die Forumssuche habe ich genutzt, aber nichts brauchbares gefunden

LG

Paradoxx

 
jahlives
13-09-2007, 09:34 
 
$res = mysql_query("select Nickname, Kontostand from benutzerdaten where Nickname like '".$_POST["beguenstigter"]."'");
$sqlab = "update benutzerdaten set Kontostand = '".$kontostand_new."' where nickname = '".$dsatz["Nickname"]."',";

Betreib mal anständiges Debugging, wie es in den Board Regeln steht. MySql wird dir die Fehlermeldung schon um die Ohren hauen. Also mit den Spalten stimmt schonmal was nicht.
Aber bitte schreib hinter jede Query mal

mysql_query() OR die(mysql_error());

und als erste Zeile deines Codes mal

error_reporting(E_ALL);

Gruss

tobi

 
Paradoxx
13-09-2007, 10:00 
 
Habe den Quellcode jetzt wie folgt abgeändert:



$res = mysql_query("select Id, Nickname, Kontostand from benutzerdaten where Nickname like '".$_POST["beguenstigter"]."'") OR die(mysql_error());

$num = mysql_num_rows($res);

while ($dsatz = mysql_fetch_assoc($res))
{
echo "<tr>";
echo "<td>" . $dsatz["Id"] . "<br></td>";
echo "<td>" . $dsatz["Nickname"] . "<br></td>";
echo "<td>" . $dsatz["Kontostand"] . "</td>";
echo "</tr><br><br>";
$kontostand = $dsatz["Kontostand"];
$kontostand_new = $kontostand + $_POST["betrag"];
$dsatz["Kontostand"] = $kontostand_new;
echo $kontostand_new;
}

$sqlab = "update benutzerdaten set Kontostand = '".$kontostand_new."' where Id = '".$dsatz["Id"]."',";
mysql_query($sqlab) OR die(mysql_error());

$num1 = mysql_affected_rows();
if ($num1>0)
echo "Der Datensatz wurde ge&auml;ndert<p>";
else
echo "Der Datensatz wurde nicht ge&auml;ndert <p>";



wenn ich jetzt eine einzahlung mit 500 (als wert) ausfürhre erhalte ich folgende ausgabe:

5
admin
20000

20500You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

was nun? Ich hab mir nochmal alles angeschaut aber ich komm nich drauf :confused:

 
jahlives
13-09-2007, 10:10 
 
$sqlab = "update benutzerdaten set Kontostand = '".$kontostand_new."' where Id = '".$dsatz["Id"]."',";

Siehst du den Fehler wirklich nicht ? Tipp: Ein Zeichen gegen Ende der Query ist überflüssig.

Gruss

tobi

 
Paradoxx
13-09-2007, 10:15 
 
ok das "," (Komma) hatte ich wohl übersehen. Jetzt werden zwar keine Fehlermeldungen mehr gebracht, aber es erfolgt kein update.

Der Benutzer admin hat den Kontostand 20.000
Nun zahle ich dem Benutzer admin 500 auf sein konto ein.

Dann sollte er eigentlich 20.500 auf seinem Konto haben, richtig?

Ich bekomme zwar folgende ausgabe:

5
admin
20000

20500Der Datensatz wurde nicht geändert

20500

aber in der Datenbank steht trotzdem noch 20.000 drin.

 
jahlives
13-09-2007, 10:19 
 
Mach mal die einfachen Anführungszeichen um den Wert $dsatz['Id'] weg. Normaleweise ist Id ein Integer und du versuchst einen Integer mit dem String einer Zahl zu vergleichen.

 
Paradoxx
13-09-2007, 10:22 
 
Hab ich:


$sqlab = "update benutzerdaten set Kontostand = '".$kontostand_new."' where Id = ".$dsatz["Id"]."";
mysql_query($sqlab) OR die(mysql_error());


Jetzt kommt folgende Ausgabe:

5
admin
20000

20500You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Ich weiß echt nich mehr weiter :confused:

 
jahlives
13-09-2007, 10:29 
 
Mach mal ein

echo $sqlab;

Ach und als erste Zeile deines Codes haste sicherlich

error_reporting(E_ALL);

gemacht?
Und wenn du testweise mal die id 5 von Hand in die Abfrage setzt, funzt es dann ?

 
Paradoxx
13-09-2007, 10:32 
 
ja wenn ich manuell die ID auf 5 setzt funktionierts.

 
jahlives
13-09-2007, 10:33 
 
Dann würde ich jetzt noch gerne das echo deiner Query sehen. (und zwar jener Query mit der Var bei Id)

 
Paradoxx
13-09-2007, 10:36 
 
ah jetzt hab ichs geschafft:



$sqlab = "update benutzerdaten set Kontostand = '".$kontostand_new."' where Nickname = '".$_POST["beguenstigter"]."'";
mysql_query($sqlab) OR die(mysql_error());

$num1 = mysql_affected_rows();
if ($num1>0)
echo "Der Datensatz wurde ge&auml;ndert<p>";
else
echo "Der Datensatz wurde nicht ge&auml;ndert <p>";

echo $sqlab;



dann bekomme ich folgendes ergebnis:

5
admin
40800

45800Der Datensatz wurde geändert

update benutzerdaten set Kontostand = '45800' where Nickname = 'admin'


suuuupiie ^^

Danke dir...hast mir wirklich seeehr weitergeholfen :D

 
jahlives
13-09-2007, 10:41 
 
Du könntest sogar auf die erste Query verzichten und nur

$sqlab = "update benutzerdaten set Kontostand = 'Kontostand+".$_POST['betrag']."' where Nickname = '".$_POST["beguenstigter"]."'";

schreiben

 
Paradoxx
13-09-2007, 10:42 
 
hm...ne jetz lass ichs lieber mal ^^...bin ja schonmal froh dasses funzt ^^

Und nochmals vielen vielen Dank

LG

Paradoxx

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:01 Uhr.