poison: Werte werden nicht in die Datenbank geschrieben

Hallo Zusammen,

kaum habe ich das eine Problem gelöst taucht schon das nächste auf, ich werde noch verrückt.

Hier mal das Script zur Übersicht:

  
<?php  
error_reporting(E_ALL);  
  
if(empty($_POST["bohnen"]) AND empty($_POST["bonbons"]) AND empty($_POST["schokofrosch"])  
AND empty($_POST["schokofroesche"]))  
{  
$error = "Du hast vergessen eine der Süßigkeiten auszuwählen.  
<br>  
<br><a href=\"../dorf/udellelys.php\">Zurück</a>";  
}  
else  
{  
  
include("../connect.php");  
  
if(!$verbindung OR !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 profil.galleonen, einkauf.bohnen, einkauf.bonbons, einkauf.limit FROM profil JOIN einkauf ON profil.benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'  
AND einkauf.benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";  
$ergebnis = mysql_query($abfrage);  
$row = mysql_fetch_object($ergebnis);  
  
$kontostand=$row->galleonen;  
$bestand=$row->limit;  
$bohnenalt=$row->bohnen;  
$bonbonsalt=$row->bonbons;  
  
  
if(isset($_POST["bohnen"]) AND !empty($_POST["bohnen"]))  
{  
$einkauf1=2;  
$bohnen=$bohnenalt+20;  
  
$output= "Vielen Dank für Deinen Einkauf bei Udellely's!  
<br>Alles, was Du gekauft hast, wird per Eule ins Herrenhaus geschickt.  
<br>Der fällige Betrag wird von Deinem Guthaben bei Gringotts abgezogen.  
<br>  
<br><a href=\"../dorf/udellelys.php\">Zurück</a>";  
  
}  
else  
{  
$einkauf1=0;  
$bohnen=$bohnenalt+0;  
}  
  
  
if(isset($_POST["bonbons"]) AND !empty($_POST["bonbons"]))  
{  
$einkauf2=2;  
$bonbons=$bonbonsalt+20;  
  
$output = "Vielen Dank für Deinen Einkauf bei Udellely's!  
<br>Alles, was Du gekauft hast, wird per Eule ins Herrenhaus geschickt.  
<br>Der fällige Betrag wird von Deinem Guthaben bei Gringotts abgezogen.  
<br>  
<br><a href=\"../dorf/udellelys.php\">Zurück</a>";  
  
}  
else  
{  
$einkauf2=0;  
$bonbons=$bonbonsalt+0;  
}  
  
  
if(isset($_POST["schokofrosch"]) AND !empty($_POST["schokofrosch"]))  
{  
  if($bestand == 9)  
  {  
  $einkauf3=0;  
  $zukauf1=0;  
  $schokofrosch1="";  
  $error = "Du hast diese Woche schon 9 Schokofrösche gekauft.  
  <br>  
  <br><a href=\"../dorf/udellelys.php\">Zurück</a>";  
  }  
  else  
  {  
  
$bilder = glob( "../schokofroesche/*.jpg" );  
shuffle( $bilder );  
$bildinfo = getimagesize( $bilder[0] );  
$output= '<img src="' .$bilder[0]. '" ' .$bildinfo[3]. ' alt="">  
<br>  
<br>Vielen Dank für Deinen Einkauf bei Udellely\'s!  
<br>Alles, was Du gekauft hast, wird per Eule ins Herrenhaus geschickt.  
<br>Der fällige Betrag wird von Deinem Guthaben bei Gringotts abgezogen.  
<br>  
<br><a href=\"../dorf/udellelys.php\">Zurück</a>';  
  
$einkauf3=3;  
$zukauf1=1;  
$schokofrosch1=$bilder[0];  
  
}  
}  
else  
{  
$einkauf3=0;  
$zukauf1=0;  
$schokofrosch1="";  
}  
  
  
if(isset($_POST["schokofroesche"]) AND !empty($_POST["schokofroesche"]))  
{  
  if($bestand == 9)  
  {  
  $einkauf4=0;  
  $zukauf2=0;  
  $schokofrosch2="";  
  $error = "Du hast diese Woche schon 9 Schokofrösche gekauft.  
  <br>  
  <br><a href=\"../dorf/udellelys.php\">Zurück</a>";  
  }  
  else  
  {  
  
$bilder   = glob( "../schokofroesche/*.jpg" );  
$bild     = array_rand( $bilder, 3 );  
foreach ($bild as $zufallsbild)  
{  
$bildinfo = getimagesize( $bilder[$zufallsbild] );  
}  
  
$output= '<img src="' .$bilder[$zufallsbild]. '" ' .$bildinfo[3]. ' />  
<br>  
<br>Vielen Dank für Deinen Einkauf bei Udellely\'s!  
<br>Alles, was Du gekauft hast, wird per Eule ins Herrenhaus geschickt.  
<br>Der fällige Betrag wird von Deinem Guthaben bei Gringotts abgezogen.  
<br>  
<br><a href=\"../dorf/udellelys.php\">Zurück</a>';  
  
$einkauf4=8;  
$zukauf2=3;  
$schokofrosch2=$bilder[$zufallsbild];  
  
}  
}  
else  
{  
$einkauf4=0;  
$zukauf2=0;  
$schokofrosch2="";  
}  
  
$rechnung=$einkauf1+$einkauf2+$einkauf3+$einkauf4;  
$galleonen=$kontostand-$rechnung;  
  
$limit=$bestand+$zukauf1+$zukauf2;  
  
  
if($galleonen < 0)  
{  
$error = "Dein Einkauf konnte nicht getätigt werden.  
<br>Du hast zu wenig Geld in Deinem Verlies.";  
}  
else  
{  
  
  
if($limit > 9)  
{  
$error = "Du kannst nicht mehr als 9 Schokofrösche pro Woche kaufen.";  
}  
else  
{  
  
$aendern = "UPDATE profil Set galleonen='" . mysql_real_escape_string($galleonen) . "' WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";  
$update = mysql_query($aendern);  
  
$aendern = "UPDATE einkauf Set bohnen='" . mysql_real_escape_string($bohnen). "', bonbons='" . mysql_real_escape_string($bonbons) . "',  
limit='" . mysql_real_escape_string($limit). "' WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";  
$update = mysql_query($aendern);  
  
$eintrag = "INSERT INTO schokofrosch (benutzername, klassik, aktuell)  
VALUES ('" . mysql_real_escape_string($_SESSION["username"]) . "', '" . mysql_real_escape_string($schokofrosch1) . "', '')";  
$eintragen = mysql_query($eintrag);  
  
$eintrag = "INSERT INTO schokofrosch (benutzername, klassik, aktuell)  
VALUES ('" . mysql_real_escape_string($_SESSION["username"]) . "', '" . mysql_real_escape_string($schokofrosch2) . "', '')";  
$eintragen = mysql_query($eintrag);  
  
mysql_close($verbindung);  
  
}  
//schließen der noch offenen else Befehle  
}  
}  
}  
?>  
  
<?php  
if (!empty($error))  
{  
echo '<div class="error"><p>'.$error.'</p></div>';  
}  
else  
{  
echo $output;  
}  
  
?>  

Problem:
Wenn ich in meinem Formular auswähle ich möchte "Bohnen" kaufen, werden zwar die Galleonen von meinem Konto abgezogen, aber die Bohnen nicht in die Datenbank geschrieben. Fast genau dasselbe Script (da fehlen nur die Codes für die Zufallsbilder und die INSERT-Befehle) verwende ich auf einer anderen Seite, wo man einkaufen kann, allerdings muss da für die einzelen Artikel nicht gerechnet werden, sondern es wird einmalig ein Bild in die Datenbank geschrieben und da funktioniert alles bestens. Ich habe mir sogar schon den UPDATE-Befehl aus dieser Datei kopiert und in den obigen Code eingefügt (natürlich habe ich die Spalten der Tabelle angepasst), weil ich dachte, ich hätte da irgendwo murkst gebaut. Trotzdem: nichts tut sich bei den Bohnen und Bonbons. Ich komme einfach nicht auf den Fehler.

Schreibe ich das Script auf die Art, wie ich es anfangs gemacht habe (Auszug)

  
if(isset($_POST["bonbons"]) AND !empty($_POST["bonbons"]))  
{  
$aendern = "UPDATE einkauf Set bohnen=bohnen+20 WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";  
$update = mysql_query($aendern);  
  
$output = "Vielen Dank für Deinen Einkauf bei Udellely's!  
<br>Alles, was Du gekauft hast, wird per Eule ins Herrenhaus geschickt.  
<br>Der fällige Betrag wird von Deinem Guthaben bei Gringotts abgezogen.  
<br>  
<br><a href=\"../dorf/udellelys.php\">Zurück</a>";  
}  

dann funktioniert es auf einmal. Dann hätte ich aber zusätzliche, unnötige Zugriffe auf die Datenbank, denn sollte sich am Ende herausstellen der Besucher hat gar nicht so viel Geld auf dem Konto, um was kaufen zu können, müsste ich die ganzen Werte in der Datenbank mit einem weiteren UPDATE-Befehl zurücksetzen.

Vielleicht kann mir von euch einer einen Tipp geben.

Liebe Grüße
Poison

  1. Hi!

    Vielleicht kann mir von euch einer einen Tipp geben.

    Den üblichen: Debugging gehört zum Programmieren, also betreibe es. Ergründe, an welcher Stelle die Inhalte von Variablen, die Ergebnisse von Ausdrücken und die Rückgabewerte von Funktionen nicht mehr deiner Vorstellung entsprechen. Verwende dazu Kontrollausgaben mit var_dump(). Die MySQL-Funktionen geben über ihren Rückgabewert bekannt, wenn ein Fehler auftrat. Ignoriere diesen nicht, werte ihn aus. Das error_reporting auf E_ALL (und displayerrors auf on) zu stellen ist auch oft hilfreich, um Umgereimtheiten beim Variablenzugriff zu finden, die auf Fehler hindeuten können.

    Lo!