Werte werde nicht in die Datenbank geschrieben

Alles, was PHP betrifft, kann hier besprochen werden.

Werte werde nicht in die Datenbank geschrieben

Postby Poison of the Cursed » 03. June 2010 07:38

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:

Code: Select all
<?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)

Code: Select all
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
Poison of the Cursed
 
Posts: 31
Joined: 27. April 2010 17:56

Re: Werte werde nicht in die Datenbank geschrieben

Postby Stepke-DSL » 03. June 2010 07:58

Hallo

Ich vermute mal, dass bohnen und bonbons eigentlich Zahlen sind, als INT-Werte.
Das hauptproblem liegt an dem limit, da das ein "MySQL-Befehl" ist.

Code: Select all
$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"]) . "'";


Versuch mal folgendes:
Code: Select all
$aendern = "UPDATE `einkauf` Set `bohnen`=".$bohnen.", `bonbons`=".$bonbons.",
`limit`=".$limit." WHERE `benutzername`='" . mysql_real_escape_string($_SESSION["username"]) . "'";


MfG Stepke
Stepke-DSL
 
Posts: 313
Joined: 12. July 2007 16:08
Operating System: Win XP Pro SP3 + SuSe Linux

Re: Werte werde nicht in die Datenbank geschrieben

Postby Poison of the Cursed » 03. June 2010 11:33

Hallo Stepke,

vielen, vielen Dank für deinen Hinweis. Leider wollte SQL die Variante, die du vorgeschlagen hast, auch nicht akzeptieren. Es liegt an dem Spaltennamen "limit".
Ich habe jetzt aus limit = froesche gemacht, den Code angepasst und jetzt funktioniert es.

Da wäre ich aber alleine nicht drauf gekommen. Habe wie eine Irre mein Script immer und immer wieder auf Fehler in den Variablen etc. untersucht. Tja, so kann man natürlich auch in die Falle laufen :roll:

Nochmal vielen Dank und einen schönen Feiertag wünsche ich dir. Du hast mir meinen gerade gerettet :mrgreen: !!!

Liebe Grüße
Poison
Poison of the Cursed
 
Posts: 31
Joined: 27. April 2010 17:56

Re: Werte werde nicht in die Datenbank geschrieben

Postby Altrea » 03. June 2010 14:25

Poison of the Cursed wrote:Es liegt an dem Spaltennamen "limit".
[...]
Da wäre ich aber alleine nicht drauf gekommen. Habe wie eine Irre mein Script immer und immer wieder auf Fehler in den Variablen etc. untersucht. Tja, so kann man natürlich auch in die Falle laufen :roll:


Hehe, ja bei den reservierten Worten muss man ein wenig aufpassen.
Entweder verzichtet man ganz darauf Datenbankspalten so zu benennen, oder man schließt die Datenbankspalten in den Abfragen in bestimmte Zeichen ein.

So wird aus "SELECT tabelle.spalte" bei phpmyadmin "SELECT `tabelle`.`spalte`". Das Zeichen was phpmyadmin versucht erzeugt man durch [SHIFT]+[´`]-Taste (zu finden meist rechts neben dem [ß] auf der deutschen Tastatur). Das funktioniert ganz gut und kann schwer nachvollziehbare Fehler dieser Art vermeiden.
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11933
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64


Return to PHP

Who is online

Users browsing this forum: No registered users and 55 guests