also, zuerst entschuldige ich mich mal für den blöden Titel im Betreff, wusste aber leider nicht, wie ich es anders nennen sollte.
Falls es einen Thread in ähnlicher Form schon gibt, gleich nochmal "Entschudligung", ich habe ihn nicht gesehen.
Nun zu meinem Problem. Ich bin schon total am Verzeifeln.
Meine Besucher können auf meiner Seite in verschiedenen Läden einkaufen. Damit ein Einkauf nicht möglich ist, wenn jemand nichts mehr oder zu wenig auf dem Konto hat, habe ich mir folgendes überlegt.
Ich lese den Kontostand aus der Datenbank aus und speichere ihn in eine Variable.
- Code: Select all
$abfrage = "SELECT galleonen, hut, umhang FROM profil WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
$galleonen=$row->galleonen;
$hut=$row->hut;
$umhang=$row->umhang;
Dann erfolgt der Einkauf, bei dem das Geld vom Konto abgezogen und die Zutat in die dafür vorgesehene Spalte der Datenbank eingefügt wird:
- Code: Select all
if(isset($_POST["umhanggrau"]))
{
$aendern = "UPDATE profil Set
galleonen=galleonen-5 WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
$aendern = "UPDATE profil Set
umhang='<img src=\"../images/umhang02.gif\" alt=\"\">' WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
}
Am Ende wird der Kontostand erneut geprüft. Ist das Konto im Minus wird der Einkauf abgelehnt. Hier kommt nun die Variable $galleonen, $hut und $umhang ins Spiel, mit denen ich den Kontostand, und die Tabellenspalten mit dem Bildern auf den Wert vor dem Einkauf zurücksetzen kann.
- Code: Select all
$abfrage = "SELECT galleonen FROM profil WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
if($row->galleonen < 0)
{
$error = "Dein Einkauf konnte nicht getätigt werden.
<br>Du hast zu wenig Geld in Deinem Verlies.";
$aendern = "UPDATE profil Set
galleonen='" . mysql_real_escape_string($galleonen) . "' WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
$aendern = "UPDATE profil Set
hut='" . mysql_real_escape_string($hut) . "' WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
$aendern = "UPDATE profil Set
umhang='" . mysql_real_escape_string($umhang) . "' WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
}
Soweit klappt auch alles.
ABER:
Sind genug Galleonen auf dem Konto und der Besucher hat bereits einen Umhang in grau, wird bei einem weiteren Einkauf z.B. Umhang grün, das Feld in Datenbank einfach überschrieben.
Mit diesem Codeschnipsel, den ich gleich unter die erste Abfrage der Datenbank gehängt hatte (noch vor dem speichern von "row-> in eine Variable), wollte ich dieses Problem aus der Welt schaffen:
- Code: Select all
if($row->hut != "" OR $row->umhang != "") // habe statt OR auch schon AND probiert
{
$error = "Du hast bereits einen Hut und/oder einen Umhang.";
}
Die Meldung wird zwar dargestellt, jedoch bricht das Script an dieser Stelle natürlich nicht ab, sondern läuft bis zum Ende durch (musste mir schon sagen lassen, ein Script einfach abzubrechen wäre ganz schlecht!) und der ausgewählte grüne Umhang wird trotzdem in die Datenbank geschrieben, obwohl dort schon der graue Umhang eingetragen ist.
Wie kann ich diesen Fehler beheben? Habe ich den Codeschnipsel an die falsche Stelle gesetzt?
Ich habe das ganze auch schon in anderer Form versucht und zwar, indem ich direkt beim Einkauf, die Bedingung gesetzt habe, das die Spalte "umhang" nicht gefüllt sein darf. Also so:
- Code: Select all
if(isset($_POST["umhanggrau"]) AND $umhang == "") // hier $umhang und nicht $row->umhang, weil ich an dieser Stelle, den Wert der Tabellenspalte ja schon
in die Variable übergeben habe!!
{
$aendern = "UPDATE profil Set
galleonen=galleonen-5 WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
$aendern = "UPDATE profil Set
umhang='<img src=\"../images/umhang02.gif\" alt=\"\">' WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
}
else
{
$error = "Du besitzt bereits einen Umhang.";
}
Er gibt die Meldung in $error auch aus. Aber die gleiche Meldung kommt seltsamerweise auch, wenn ich nicht den Umhang in grau ausgewählt habe, sondern den Hut in grau, der im Formular an der Stelle darüber sitzt.
Ich komme einfach nicht weiter, drehe mich schon seit einer Stunde im Kreis.
Wäre echt super, wenn ihr mir helfen könntet.
Liebe Grüße
Poison
P.S. hier noch das ganze Script zum besseren Überblick, allerdings ohne Bedingung, dass die Felder "hut" und "umhang" noch nicht gefüllt sein dürfen!!
- Code: Select all
<?php
error_reporting(E_ALL);
if(empty($_POST["hutgrau"]) AND empty($_POST["umhanggrau"]) AND empty($_POST["hutgruen"])
AND empty($_POST["umhanggruen"]))
{
$error = "Du hast vergessen die gewünschten Kleidungsstücke auszuwählen.
<br>
<br><a href=\"../dorf/pumpkins.php\">Zurück</a>";
}
else
{
$verbindung = mysql_connect('localhost', 'Vesta', 'vesta');
if(!$verbindung)
{
$error = "Dein Einkauf konnte leider nicht verarbeitet werden. Sollte dieser Fehler nochmals auftreten sende
mir bitte Deine Einkaufsliste per E-Mail:
<br>
<br><a href=\"mailto:mail@potionmaster.de\">mail@potionmaster.de</a>";
}
else
{
mysql_select_db("homepage");
if(!mysql_select_db("homepage"))
{
$error = "Dein Einkauf konnte leider nicht verarbeitet werden. Sollte dieser Fehler nochmals auftreten sende
mir bitte Deine Einkaufsliste per E-Mail:
<br>
<br><a href=\"mailto:mail@potionmaster.de\">mail@potionmaster.de</a>";
}
else
{
$abfrage = "SELECT galleonen, hut, umhang FROM profil WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
$galleonen=$row->galleonen;
$hut=$row->hut;
$umhang=$row->umhang;
if(isset($_POST["hutgrau"]))
{
$aendern = "UPDATE profil Set
galleonen=galleonen-3 WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
$aendern = "UPDATE profil Set
hut='<img src=\"../images/hutgrau.gif\" alt=\"\">' WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
}
if(isset($_POST["umhanggrau"]))
{
$aendern = "UPDATE profil Set
galleonen=galleonen-5 WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
$aendern = "UPDATE profil Set
umhang='<img src=\"../images/umhang02.gif\" alt=\"\">' WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
}
if(isset($_POST["hutgruen"]))
{
$aendern = "UPDATE profil Set
galleonen=galleonen-3 WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
$aendern = "UPDATE profil Set
hut='<img src=\"../images/hutgruen.gif\" alt=\"\">' WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
}
if(isset($_POST["umhanggruen"]))
{
$aendern = "UPDATE profil Set
galleonen=galleonen-5 WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
$aendern = "UPDATE profil Set
umhang='<img src=\"../images/umhang03.gif\" alt=\"\">' WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
}
$abfrage = "SELECT galleonen FROM profil WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
if($row->galleonen < 0)
{
$error = "Dein Einkauf konnte nicht getätigt werden.
<br>Du hast zu wenig Geld in Deinem Verlies.";
$aendern = "UPDATE profil Set
galleonen='" . mysql_real_escape_string($galleonen) . "' WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
$aendern = "UPDATE profil Set
hut='" . mysql_real_escape_string($hut) . "' WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
$aendern = "UPDATE profil Set
umhang='" . mysql_real_escape_string($umhang) . "' WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
}
mysql_close($verbindung);
// schließen der noch offenen "else"-Befehle
}
}
}
?>