Mehrere einzelne Mysql Updates in einer Datei bringen Fehler

mendo

Grünschnabel
Ich habe folgendes Problem:

1. Auf einer php Seite werden mehrere Tabellenzeilen per include aufgerufen.
2. Jede Tabellenzeile enthält einen Hyperlink, welcher eine Änderung in der mysql Datenbank vornimmt. Und die selbe Seite neu aufruft.
3. Die Änderungen sind richtig, so lange diese Hyperlinks maximal 2x vorhanden sind. Sprich 2 Tabellenzeilen nach einander erfolgen. Sobald aber ein 3 Hyperlink dazu kommt, sind die Ergebnisse der Änderungen falsch und per Zufall ausgewählt.

Wo liegt mein Fehler?

Beispiel Tabellenzeile1:

<?php
$abfrage2 = "SELECT wohnung FROM wohnungen WHERE username = '$user'";
$ergebnis2 = mysql_query($abfrage2);
$wohnungen = mysql_fetch_object($ergebnis2);
$wohnung = $wohnungen->wohnung
if($wohnung != 1)
{?><a href="wohnung.php"<?php
$aendern1 = "UPDATE wohnungen Set wohnung = '1' WHERE username = '$user'";
$update1 = mysql_query($aendern1);?> ">Einziehen</a> <?php }
else
{echo "bewohnt";}
?>

Beispiel Tabellenzeile2:


<?php
if($wohnung != 2)
{?><a href="wohnung.php"<?php
$aendern2 = "UPDATE wohnungen Set wohnung = '2' WHERE username = '$user'";
$update2 = mysql_query($aendern2);?> ">Einziehen</a> <?php }
else
{echo "bewohnt";}
?>
 
Hi!

Ich verstehe diesen Teil nicht.. :confused:

PHP:
{?><a href="wohnung.php"<?php
$aendern1 = "UPDATE wohnungen Set wohnung = '1' WHERE username = '$user'";
$update1 = mysql_query($aendern1);?> ">Einziehen</a> <?php }

Warum klammerst du bei einem einfachen Link den PHP Teil aus, den hätte man ruhig als String schreiben können. ;)
Was noch viel verwirrender ist, warum hast du eine SQL Anweisung mitten in der HTML Ausgabe? Du möchtest doch bestimmt diese erst ausführen, wenn jemand auf den Link klickt oder? So wird sie doch immer ausgeführt.. :confused:

Grüße,
Jacka
 
Was du genau vorhast verstehe ich leider auch noch nicht ganz.

Aber ich denke dein Problem ist mit "!=" (also ungleich) zu arbeiten.

Wenn 2 Links sind ist klar was passiert, es ist nicht das erste also kann es nur das 2. sein.
Bei 3 Links sind dann aber 2 Bedingungen richtig, es ist nicht das erste und auch nicht das 2. wodurch ein Zufallseffekt auftritt.

Müssen deine Prüfungen vielleicht auch miteinander verschachtelt werden
Bitte erkläre nocheinmal was genau passieren soll, wenn der User dies und das macht ^^
 
Hi,

ich hab das Gefühl das an der Logic selbst was nicht stimmt. Momentan wird ja beim aufrufen der Seite bereits eine Änderung in der Datenbank vorgenommen. Ich vermute mal du möchtest aber, das die Änderung erst mit Klick auf den Link passiert.

Dann würde das mit deiner Logik (die für mich übrigens keinen SInn ergibt) so aussehen :-)

PHP:
<?php
// update der daten
// mit klick auf einen der "einziehen" links.
if( isset($_GET["einziehen"]) && !empty($_GET["einziehen"])
    && isset($_GET["user"]) && !empty($_GET["user"]) )
{
  $escaped_einziehen=mysql_escape_string($_GET["einziehen"]);
  $escaped_user=mysql_escape_string($_GET["user"]);
  
  $aendern1 = "UPDATE wohnungen Set wohnung = ".$escaped_einziehen." WHERE username = ".$escaped_user;
  $update1 = mysql_query($aendern1);
}

// auslesen der tabelle.
$abfrage2 = "SELECT wohnung FROM wohnungen WHERE username = '$user'";
$ergebnis2 = mysql_query($abfrage2);
$wohnungen = mysql_fetch_object($ergebnis2);
$wohnung = $wohnungen->wohnung;

if($wohnung != 1)
{
  print( "<a href=\"wohnung.php?einziehen=1&user=".$user."\">Einziehen</a>" );
}
else
{
  print( "Bewohnt!" );
}

if($wohnung != 2)
{
  print( "<a href=\"wohnung.php?einziehen=2&user=".$user."\">Einziehen</a>" );
}
else
{
  print( "Bewohnt!" );
}
?>

Hab den Code nicht testen können, weil ich keinen Apache+PHP installiert habe. Sollte aber größtenteils passen.

Sollte ich falsch liegen, dann erklär doch bitte nochmal genau was du eigentlich vor hast.

Gruß
Manuel
 
Danke Gainwar :o)

Genau so hatte ich es gewollt! Alles Roger so. Thnx

Sorry, bin halt totaler Anfänger und hau noch zuviel durch einander. Sonst hätte ich aber ja keinen Grund um Hilfe zu betteln *lächel*

Danke nochmals...
 
Hi,

kein Problem, dafür ist man ja da ^^
Bitte den Topic dann als "Erledigt markieren" und ggf. Bewertungen vornehmen :P

Gruß
Manuel
 
Zurück