Bei If und ElseIf wird alles ausgeführt !

Lil-rich

Erfahrenes Mitglied
Ich hab da mal wieder ein Problem... Und zwar hab ich die folgenden Befehle per If und ElseIf usw., aber wenn ich dan die Datei mit dem Parameter "/viewpage.php?page_id=30&Gebäude=1&D_ID=34" aufrufe (Beispiel; können beliebige Zahlen sein) dann werden alle aktionen ausgeführt obwohl da doch steht "If x = 1, ElseIf x = 2" usw... Woran liegt das ? Hier mal die Datei und ein Beispielparameter (nur page_id ist fest...)
PHP:
// Parameter:
/viewpage.php?page_id=22&Gebäude=1&Stufe=1&D_ID=45

<?php 
$Name = $userdata['user_name']; 

$Bordell1 = 100; 
$Bordell1_kosten = 10000; 
$Bordell2 = 250; 
$Bordell2_kosten = 40000; 
$Bordell3 = 500; 
$Bordell3_kosten = 120000; 

$Club1 = 150; 
$Club1_kosten = 15000; 
$Club2 = 300; 
$Club2_kosten = 60000; 
$Club3 = 750; 
$Club3_kosten = 150000; 

$Crackhouse1 = 60; 
$Crackhouse1_kosten = 10000; 
$Crackhouse2 = 120; 
$Crackhouse2_kosten = 15000; 
$Crackhouse3 = 200; 
$Crackhouse3_kosten = 20000; 

$Weedfarm1 = 90; 
$Weedfarm1_kosten = 10000; 
$Weedfarm2 = 200; 
$Weedfarm2_kosten = 15000; 
$Weedfarm3 = 300; 
$Weedfarm3_kosten = 25000; 


// Beginn Geld-Abfrage 
$conn = mysql_connect("localhost", "bbeclan", "Storcher"); 

if (!$conn) { 
   echo "Keine Verbindung zur DB: " . mysql_error(); 
   exit; 
} 

if (!mysql_select_db("bbeclan_02")) { 
   echo "Kann  Datenbank nicht auswählen: " . mysql_error(); 
   exit; 
} 

$sql1 = "SELECT betrag  
       FROM  Geld 
       WHERE  user_name = '$Name'"; 

$result1 = mysql_query($sql1); 
$row1 = mysql_fetch_assoc($result1); 

if (!$result1) { 
   echo "Anfrage ($sql1) konnte nicht ausgeführt werden : " . mysql_error(); 
   exit; 
} 

mysql_free_result($result1); 
$Geld = $row1['betrag']; 

// Ende Geld-Abfrage 

// Beginn PP-Abfrage 

if (!$conn) { 
   echo "Keine Verbindung zur DB: " . mysql_error(); 
   exit; 
} 

if (!mysql_select_db("bbeclan_02")) { 
   echo "Kann  Datenbank nicht auswählen: " . mysql_error(); 
   exit; 
} 

$sql2 = "SELECT betrag  
       FROM  Pimppoints 
       WHERE  user_name = '$Name'"; 

$result2 = mysql_query($sql2); 
$row2 = mysql_fetch_assoc($result2); 

if (!$result2) { 
   echo "Anfrage ($sql2) konnte nicht ausgeführt werden : " . mysql_error(); 
   exit; 
} 

mysql_free_result($result2); 
$PPs = $row2['betrag']; 

// Ende PP-Abfrage 

// Beginn Stufen-Abfrage 

if (!$conn) { 
   echo "Keine Verbindung zur DB: " . mysql_error(); 
   exit; 
} 

if (!mysql_select_db("bbeclan_02")) { 
   echo "Kann  Datenbank nicht auswählen: " . mysql_error(); 
   exit; 
} 

$sql3 = "SELECT Bordelle, Hooker, Clubs, Crackhouses, Weedfarms, Lager, Homies  
       FROM  Dissis 
       WHERE  Besitzer = '$Name' AND ID = $D_ID"; 

$result3 = mysql_query($sql3); 
$row3 = mysql_fetch_assoc($result3); 

if (!$result3) { 
   echo "Anfrage ($sql3) konnte nicht ausgeführt werden : " . mysql_error(); 
   exit; 
} 

mysql_free_result($result3); 

// Ende Stufen-Abfrage 

// Start Bordell-Bau 

if ( $Gebäude == 1 ) { 
    $anti_cheat = $row3['Bordelle']; 
    $Gebäude = 'Bordelle'; 
    if ( $Stufe == 1 ) { 
        If ($anti_cheat == 0) { 
            if ( $Bordell1_kosten > $Geld ){ 
            echo "<center>Du hast leider nicht genug Geld !</center>"; 
            } 
             
            Else { 
            mysql_query ("UPDATE Dissis SET $Gebäude = $Stufe WHERE ID = $D_ID AND Besitzer = '$Name' "); 
            $Neuer_Betrag = $PPs + $Bordell1; 
            mysql_query ("UPDATE Pimppoints SET betrag = $Neuer_Betrag WHERE user_name = '$Name' "); 
            $Neuer_Betrag_G = $Geld-$Bordell1_kosten; 
            mysql_query ("UPDATE Geld SET betrag = $Neuer_Betrag_G WHERE user_name = '$Name' "); 
            echo ("Bordell Stufe $Stufe erfolgreich gebaut."); 
            } 
        } 

        ElseIf ($anti_cheat == 1) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 

        ElseIf ($anti_cheat == 2) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 
         
        ElseIf ($anti_cheat == 3) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 
    } 

    elseif ($Stufe == 2 ) { 
        If ($anti_cheat == 0) { 
            echo "Du musst zuerst das Bordell Stufe 1 kaufen !"; 
        } 

        ElseIf ($anti_cheat == 1) { 
            if ( $Bordell2_kosten > $Geld ){ 
            echo "<center>Du hast leider nicht genug Geld !</center>"; 
            } 

            else { 
            mysql_query ("UPDATE Dissis SET $Gebäude = $Stufe WHERE ID = $D_ID AND Besitzer = '$Name' "); 
            $Neuer_Betrag = $PPs + $Bordell2; 
            mysql_query ("UPDATE Pimppoints SET betrag = $Neuer_Betrag WHERE user_name = '$Name' "); 
            $Neuer_Betrag_G = $Geld-$Bordell2_kosten; 
            mysql_query ("UPDATE Geld SET betrag = $Neuer_Betrag_G WHERE user_name = '$Name' "); 
            echo ("Bordell Stufe $Stufe erfolgreich gebaut."); 
            } 
        } 

        ElseIf ($anti_cheat == 2) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 

        ElseIf ($anti_cheat == 3) { 
            echo "<center>Bereits gebaut !</center>";     
        } 
    } 

    elseif ($Stufe == 3 ) { 
        If ($anti_cheat == 0) { 
            echo "Du musst zuerst das Bordell Stufe 1 kaufen !"; 
        } 

        ElseIf ($anti_cheat == 1) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 

        ElseIf ($anti_cheat == 2) { 
            if ( $Bordell2_kosten > $Geld ){ 
            echo "<center>Du hast leider nicht genug Geld !</center>"; 
            } 

            else { 
            mysql_query ("UPDATE Dissis SET $Gebäude = $Stufe WHERE ID = $D_ID AND Besitzer = '$Name' "); 
            $Neuer_Betrag = $PPs + $Bordell3; 
            mysql_query ("UPDATE Pimppoints SET betrag = $Neuer_Betrag WHERE user_name = '$Name' "); 
            $Neuer_Betrag_G = $Geld-$Bordell3_kosten; 
            mysql_query ("UPDATE Geld SET betrag = $Neuer_Betrag_G WHERE user_name = '$Name' "); 
            echo ("Bordell Stufe $Stufe erfolgreich gebaut."); 
            } 
        } 

        ElseIf ($anti_cheat == 3) { 
            echo ("<center>Bereits gebaut !</center>");     
        } 
    } 
} 

// Ende Bordell-Bau 

// Start Club-Bau 

if ( $Gebäude == 2 ) { 
    $anti_cheat = $row3['Clubs']; 
    $Gebäude = 'Clubs'; 
    if ( $Stufe == 1 ) { 
        If ($anti_cheat == 0) { 
            if ( $Club1_kosten > $Geld ){ 
            echo "<center>Du hast leider nicht genug Geld !</center>"; 
            } 
             
            Else { 
            mysql_query ("UPDATE Dissis SET $Gebäude = $Stufe WHERE ID = $D_ID AND Besitzer = '$Name' "); 
            $Neuer_Betrag = $PPs + $Club1; 
            mysql_query ("UPDATE Pimppoints SET betrag = $Neuer_Betrag WHERE user_name = '$Name' "); 
            $Neuer_Betrag_G = $Geld-$Club1_kosten; 
            mysql_query ("UPDATE Geld SET betrag = $Neuer_Betrag_G WHERE user_name = '$Name' "); 
            echo "Club Stufe $Stufe erfolgreich gebaut."; 
            } 
        } 

        ElseIf ($anti_cheat == 1) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 

        ElseIf ($anti_cheat == 2) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 
         
        ElseIf ($anti_cheat == 3) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 
    } 

    elseif ($Stufe == 2 ) { 
        If ($anti_cheat == 0) { 
            echo "Du musst zuerst den Club Stufe 1 kaufen !"; 
        } 

        ElseIf ($anti_cheat == 1) { 
            if ( $Club2_kosten > $Geld ){ 
            echo "<center>Du hast leider nicht genug Geld !</center>"; 
            } 

            else { 
            mysql_query ("UPDATE Dissis SET $Gebäude = $Stufe WHERE ID = $D_ID AND Besitzer = '$Name' "); 
            $Neuer_Betrag = $PPs + $Club2; 
            mysql_query ("UPDATE Pimppoints SET betrag = $Neuer_Betrag WHERE user_name = '$Name' "); 
            $Neuer_Betrag_G = $Geld-$Club2_kosten; 
            mysql_query ("UPDATE Geld SET betrag = $Neuer_Betrag_G WHERE user_name = '$Name' "); 
            echo ("Club Stufe $Stufe erfolgreich gebaut."); 
            } 
        } 

        ElseIf ($anti_cheat == 2) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 

        ElseIf ($anti_cheat == 3) { 
            echo "<center>Bereits gebaut !</center>";     
        } 
    } 

    elseif ($Stufe == 3 ) { 
        If ($anti_cheat == 0) { 
            echo "Du musst zuerst den Club Stufe 1 kaufen !"; 
        } 

        ElseIf ($anti_cheat == 1) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 

        ElseIf ($anti_cheat == 2) { 
            if ( $Bordell2_kosten > $Geld ){ 
            echo "<center>Du hast leider nicht genug Geld !</center>"; 
            } 

            else { 
            mysql_query ("UPDATE Dissis SET $Gebäude = $Stufe WHERE ID = $D_ID AND Besitzer = '$Name' "); 
            $Neuer_Betrag = $PPs + $Club3; 
            mysql_query ("UPDATE Pimppoints SET betrag = $Neuer_Betrag WHERE user_name = '$Name' "); 
            $Neuer_Betrag_G = $Geld-$Club3_kosten; 
            mysql_query ("UPDATE Geld SET betrag = $Neuer_Betrag_G WHERE user_name = '$Name' "); 
            echo ("Club Stufe $Stufe erfolgreich gebaut."); 
            } 
        } 

        ElseIf ($anti_cheat == 3) { 
            echo ("<center>Bereits gebaut !</center>");     
        } 
    } 
} 

// Ende Club-Bau 

// Start Weedfarm-Bau 

if ( $Gebäude == 3 ) { 
    $anti_cheat = $row3['Weedfarms']; 
    $Gebäude = 'Weedfarms'; 
    if ( $Stufe == 1 ) { 
        If ($anti_cheat == 0) { 
            if ( $Weedfarm1_kosten > $Geld ){ 
            echo "<center>Du hast leider nicht genug Geld !</center>"; 
            } 
             
            Else { 
            mysql_query ("UPDATE Dissis SET $Gebäude = $Stufe WHERE ID = $D_ID AND Besitzer = '$Name' "); 
            $Neuer_Betrag = $PPs + $Weedfarm1; 
            mysql_query ("UPDATE Pimppoints SET betrag = $Neuer_Betrag WHERE user_name = '$Name' "); 
            $Neuer_Betrag_G = $Geld-$Weedfarm1_kosten; 
            mysql_query ("UPDATE Geld SET betrag = $Neuer_Betrag_G WHERE user_name = '$Name' "); 
            echo ("Weedfarm Stufe $Stufe erfolgreich gebaut."); 
            } 
        } 

        ElseIf ($anti_cheat == 1) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 

        ElseIf ($anti_cheat == 2) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 
         
        ElseIf ($anti_cheat == 3) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 
    } 

    elseif ($Stufe == 2 ) { 
        If ($anti_cheat == 0) { 
            echo "Du musst zuerst die Weedfarm Stufe 1 kaufen !"; 
        } 

        ElseIf ($anti_cheat == 1) { 
            if ( $Weedfarm2_kosten > $Geld ){ 
            echo "<center>Du hast leider nicht genug Geld !</center>"; 
            } 

            else { 
            mysql_query ("UPDATE Dissis SET $Gebäude = $Stufe WHERE ID = $D_ID AND Besitzer = '$Name' "); 
            $Neuer_Betrag = $PPs + $Weedfarm2; 
            mysql_query ("UPDATE Pimppoints SET betrag = $Neuer_Betrag WHERE user_name = '$Name' "); 
            $Neuer_Betrag_G = $Geld-$Weedfarm2_kosten; 
            mysql_query ("UPDATE Geld SET betrag = $Neuer_Betrag_G WHERE user_name = '$Name' "); 
            echo ("Weedfarm Stufe $Stufe erfolgreich gebaut."); 
            } 
        } 

        ElseIf ($anti_cheat == 2) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 

        ElseIf ($anti_cheat == 3) { 
            echo "<center>Bereits gebaut !</center>";     
        } 
    } 

    elseif ($Stufe == 3 ) { 
        If ($anti_cheat == 0) { 
            echo "Du musst zuerst die Weedfarm Stufe 1 kaufen !"; 
        } 

        ElseIf ($anti_cheat == 1) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 

        ElseIf ($anti_cheat == 2) { 
            if ( $Weedfarm2_kosten > $Geld ){ 
            echo "<center>Du hast leider nicht genug Geld !</center>"; 
            } 

            else { 
            mysql_query ("UPDATE Dissis SET $Gebäude = $Stufe WHERE ID = $D_ID AND Besitzer = '$Name' "); 
            $Neuer_Betrag = $PPs + $Weedfarm3; 
            mysql_query ("UPDATE Pimppoints SET betrag = $Neuer_Betrag WHERE user_name = '$Name' "); 
            $Neuer_Betrag_G = $Geld-$Weedfarm3_kosten; 
            mysql_query ("UPDATE Geld SET betrag = $Neuer_Betrag_G WHERE user_name = '$Name' "); 
            echo ("Weedfarm Stufe $Stufe erfolgreich gebaut."); 
            } 
        } 

        ElseIf ($anti_cheat == 3) { 
            echo ("<center>Bereits gebaut !</center>");     
        } 
    } 
} 

// Ende Weedfarm-Bau 

// Start Crackhouse-Bau 

if ( $Gebäude == 4 ) { 
    $anti_cheat = $row3['Crackhouses']; 
    $Gebäude = 'Crackhouses'; 
    if ( $Stufe == 1 ) { 
        If ($anti_cheat == 0) { 
            if ( $Crackhouse1_kosten > $Geld ){ 
            echo "<center>Du hast leider nicht genug Geld !</center>"; 
            } 
             
            Else { 
            mysql_query ("UPDATE Dissis SET $Gebäude = $Stufe WHERE ID = $D_ID AND Besitzer = '$Name' "); 
            $Neuer_Betrag = $PPs + $Crackhouse1; 
            mysql_query ("UPDATE Pimppoints SET betrag = $Neuer_Betrag WHERE user_name = '$Name' "); 
            $Neuer_Betrag_G = $Geld-$Crackhouse1_kosten; 
            mysql_query ("UPDATE Geld SET betrag = $Neuer_Betrag_G WHERE user_name = '$Name' "); 
            echo ("Crackhouse Stufe $Stufe erfolgreich gebaut."); 
            } 
        } 

        ElseIf ($anti_cheat == 1) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 

        ElseIf ($anti_cheat == 2) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 
         
        ElseIf ($anti_cheat == 3) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 
    } 

    elseif ($Stufe == 2 ) { 
        If ($anti_cheat == 0) { 
            echo "Du musst zuerst das Crackhouse Stufe 1 kaufen !"; 
        } 

        ElseIf ($anti_cheat == 1) { 
            if ( $Crackhouse2_kosten > $Geld ){ 
            echo "<center>Du hast leider nicht genug Geld !</center>"; 
            } 

            else { 
            mysql_query ("UPDATE Dissis SET $Gebäude = $Stufe WHERE ID = $D_ID AND Besitzer = '$Name' "); 
            $Neuer_Betrag = $PPs + $Crackhouse2; 
            mysql_query ("UPDATE Pimppoints SET betrag = $Neuer_Betrag WHERE user_name = '$Name' "); 
            $Neuer_Betrag_G = $Geld-$Crackhouse2_kosten; 
            mysql_query ("UPDATE Geld SET betrag = $Neuer_Betrag_G WHERE user_name = '$Name' "); 
            echo ("Crackhouse Stufe $Stufe erfolgreich gebaut."); 
            } 
        } 

        ElseIf ($anti_cheat == 2) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 

        ElseIf ($anti_cheat == 3) { 
            echo "<center>Bereits gebaut !</center>";     
        } 
    } 

    elseif ($Stufe == 3 ) { 
        If ($anti_cheat == 0) { 
            echo "Du musst zuerst das Crackhouse Stufe 1 kaufen !"; 
        } 

        ElseIf ($anti_cheat == 1) { 
            echo "<center>Bereits gebaut !</center>"; 
        } 

        ElseIf ($anti_cheat == 2) { 
            if ( $Crackhouse2_kosten > $Geld ){ 
            echo "<center>Du hast leider nicht genug Geld !</center>"; 
            } 

            else { 
            mysql_query ("UPDATE Dissis SET $Gebäude = $Stufe WHERE ID = $D_ID AND Besitzer = '$Name' "); 
            $Neuer_Betrag = $PPs + $Crackhouse3; 
            mysql_query ("UPDATE Pimppoints SET betrag = $Neuer_Betrag WHERE user_name = '$Name' "); 
            $Neuer_Betrag_G = $Geld-$Crackhouse3_kosten; 
            mysql_query ("UPDATE Geld SET betrag = $Neuer_Betrag_G WHERE user_name = '$Name' "); 
            echo ("Crackhouse Stufe $Stufe erfolgreich gebaut."); 
            } 
        } 

        ElseIf ($anti_cheat == 3) { 
            echo ("<center>Bereits gebaut !</center>");     
        } 
    } 
} 

// Ende Crackhouse-Bau 

?>

Wie gesagt das Prob is, dass wenn ich zB Gebäude = 1 schreibe soll der Befehl also nur ein Bordell bauen, er baut aber tatsächlich von jedem Gebäude die Stufe 1 aus ! Außerdem, wenn ich dann Stufe 2 ausbauen will (//Parameter: ...Stufe=2....), sagt er "Bereits gebaut !" Ich bekomm den Fehler nciht raus :(
 
Zuletzt bearbeitet:
PHP:
 if ( $Gebäude = 2 )

Weil die Zuweisung $Gebäude = 2 dir true zurückgibt.
Du wolltest sicher nicht prüfen ob die Zuweisung funktioniert sondern ob ein Wert gesetzt ist.

== <-- ist dein Freund

PHP:
 if ( $Gebäude == 2 )
 
PS: kann es sein das du gerne viel schreibst? ;)

Dein Script könnte mann ohne Funktionalität zu verlieren auf ca 1/5 kürzen ;)
 
Also jetzt hab ichs verbessert (hatte ja den Fehler auch kurz danach entdeckt :D ) aber nun baut es da gar nix mehr :(
Hab den Code oben editiert...

Naja ich weiß nicht so ganz wie ich das immer machen soll :D Ich kann das nciht, weil ich wenn ichs mit lauter Variablen mach, immer so viele Fehler hab :D :D Wenn du Zeit hast, kannst dus ja machen :suspekt:
 
Wieviel ist das denn ? ^^ Und weißt du dann auch gleichzeitig ne Lösung für das Problem oder kostet das extra ? :D
 
Tips sind hier auf tutorials.de umsonst. Machen lassen aber nicht :)

Machen lassen geht ab 60€ die Stunde los.

Tips ab 0 € ;)

Mann nehme:
Erstmal bennen wir die Variable Gebäude um ;) denn davon bekomm ich Augenkrebs. Und nennen diese mal $building.
Du willst in deinem Browserspiel Gebäude upgraden lassen. Daraus ergibt sich ein Funktionsname upgradeBuilding(). Zudem kann das upgrade nur dann durchgeführt werden
wenn genügend Geld vorhanden ist = enougMoney(), $Stufe ist bei mir $level


Anpassungen:
a) Nutze Kollektionen wie eben HashMaps (in PHP heissen die Dinger Assoziative Arrays)

b) Kapsele Operationen in Funktionen

c) Daten prüfen

d) Funktionen aufrufen

zu a:
Code:
$buildingTypes = array("1"=>"bordell,"2"=>"club");
$buildingPrices["bordell"][1] = 100;
$buildingPrices["bordell"][2] = 250;
$buildingPrices["bordell"][3] = 500;
usw
$buildingPrices["club"][1]=150;
$buildingPrices["club"][2]=300;
$buildingPrices["club"][1]=750;
usw


zu b:)
Code:
function enoughMoney($konto, $building,$level) {
  global $buildingTypes, $buildingPrices; // <--suboptimal
  $price =  $buildingPrices[$buildingTypes[$building]][$level];
  if($price > $konto) {  
       echo "blub nicht genügend kohle";
       return 0;
  }
  return 1;
}

function upgradeBuilding($building$konto,$level) {
   if(!engoughMoney($konto,$building,$level)  
        return 0; 
    // hier dein SQL Gerümpel rein (suboptimal) besser die Datenbank geschichte weiter kapseln
}

C:
Code:
// check incoming data
if(!is_int ($_GET["pageid"]))  {
  //fehler behandeln
}
if(!is_int ($_GET["building_id"]))  {
  //fehler behandeln
}
// noch mehr überprüfen ob alle  daten auch dem Entsprechen was du erwartest

D)

Code:
if(upgradeBuilding($building$konto,$level) {
  echo "herzlichen Glückwunsch das Gebäude wurde aufgewertet";
}


Das ist nun nur mal suboptimal. Wollt dich jetzt nicht gleich mit OOP erschlagen ;) Zudem ist das kein Copy und Paste code. Sprich das habe ich hier im Forum eben ins Textfenster geschrieben. Soll dir nur mal einen ungefairen Weg aufzeigen.
 
Zu Christians Vorschlag zu C: Das Problem bei dieser Prüfung ist, dass per GET oder POST übergebene Argumente immer als Zeichenkette ankommen. Daher ist Folgendes sinnvoller:
PHP:
if( abs(intval($_GET['pageid'])) == $_GET['pageid'] ) {
	…
}
 
Ahhhhja :D Das mit den 60 € meinst du aber nicht ernst oder ?

Ok da hab ich noch was vor mir........ Naja ich meld mich dann wieder :suspekt:
 
Zurück