php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.05.2005, 13:16  
Gast
 
Beiträge: n/a
Standard Wieso kein else if?

Hi leute

Ich bins schon wieder und wieder mit derselben Datei. Die schaut so aus:

PHP-Code:
<?php
if ($modul == "insert")

  if (
$name =="" or $tier_name=="" or $mail=="" or $pass=="" or $pass2=="")
  {
    echo 
"Bitte alle Felder ausfüllen";
    exit;
  }
  include(
"db.php");
  
$abfrage "SELECT name FROM mypet_user";
  
$ergebnis mysql_query($abfrage);
  while(
$row mysql_fetch_object($ergebnis))
  {
    if (
$name == $row->name)
    {
      echo 
"Ihr Spielername ist bereits vorhanden. Bitte wählen sie einen anderen.";
      exit;
    }  
  }
  
  
$abfrage "SELECT name FROM mypet_katzen";
  
$ergebnis mysql_query($abfrage);
  while(
$row mysql_fetch_object($ergebnis))
  {
    if(
$tier_name==$row->name)
    {
      echo 
"Ihr Tiername ist bereits vorhanden. Bitte wählen sie einen anderen.";
      exit;
    }
  }
  
mysql_close($verbindung);
  
  if (
$pass==$pass2)
  {
    
$pass3 md5($pass);
    include(
"db.php");
    
$eintrag "INSERT INTO mypet_user (name, pass, mail)
    VALUES ('$name', '$pass3', '$mail')"
;
    
$eintragen mysql_query($eintrag);
    
    
$abfrage "SELECT id FROM mypet_user WHERE name='$name'";
    
$ergebnis mysql_query($abfrage);
    
$row mysql_fetch_object($ergebnis);
    
    
$eintrag2 "INSERT INTO mypet_katzen (name, herr_id, hunger, krankheiten, wohlfühl, freunde)
    VALUES ('$tier_name', '$row->id', '5', '0', '5', '0')"
;
    
$eintragen2 mysql_query($eintrag2);
    
    
$abfrage2 "SELECT id FROM mypet_katzen WHERE name='$tier_name'";
    
$ergebnis2 mysql_query($abfrage2);
    
$row2 mysql_fetch_object($ergebnis2);
    
    
$eintrag3 "INSERT INTO mypet_user (pet_id)
    VALUES ('$row2->id')"
;
    
$eintragen3 mysql_query($eintrag3);
    
    if (
$eintragen == TRUE and $eintragen2 == TRUE and $eintragen3 == TRUE)
    {
      echo 
"Ihre Daten wurden gespeichert, sie können sich nun einloggen. Viel Spass";
    }
    else
    {
      echo 
"Beim eintragen ihrer Daten Trat ein Fehler auf. Bitte benachrichtigen sie den Administrator.";
    }
    
mysql_error();
    
    
mysql_close($verbindung);
   }
  else
  {
   echo 
"Die Passwörter stimmen nicht &uuml;berein";
  }
}   

else
{
  echo
"Um am Spiel Teilnehmen zu können müssen sie sich erst registrieren. Die Registration       ist kostenlos und erfolgt in einem Schritt. Bitte füllen sie [b]alle[/b] untenstehenden Felder aus.

      <form action=index.php?mode=register&modul=insert method=post>
      Spielername <input type=text size=20 name=name>
      

      

      Name des Tieres <input type=text size=20 name=tier_name>
      

      

      Passwort <input type=password size=20 name=pass>
      

      

      Passwort wiederholen <input type=password size=20 name=pass2>
      

      

      Mail Adresse <input type=text size=20 name=mail>
      

      

      <input type=submit value=Senden>
      </form>"
;
}
?>
Nun wolte ich hier ein else if schreiben:

PHP-Code:
<?php
mysql_close
($verbindung);
  
else  if (
$pass==$pass2)
  {

?>
Denn weiter oben wurde ja bereits einmal ein if benutzt. nur wenn ich das schreibe meldet er immer

Code:
Parse error: parse error, unexpected T_ELSE in /home/virtual/site195/fst/var/www/test.garnelenforum.ch/mypet/register.php on line 33
wenn ich jedoch if schreibe nicht. Das einzige Problem ist nurr dass ich, wenn ich if schreibe immer am ende das else zurückbekomme (also es wird immer "Die Passwörter stimmen nicht überein" ausgegeben) obwohl die beiden Variablen stimmen.

Wer weiss wiran das liegt und kann mir einen Tipp geben?

LG
Garnele
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 10.05.2005, 13:19  
Gast
 
Beiträge: n/a
Standard

das heißt elseif(zusammengeschrieben)
 
Alt 10.05.2005, 13:22  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

aus diesem grund sage ich immer, dass man einen code-block nie über mehr als eine scrollseite gehen lassen soll.
besser: die einzelnen stücke, die innerhalb der schleifen sind, in einzelne funktionen packen - womit deine fehlerhafte if-else-verschachtelung besser sichtbar wird.

das, was du hier gepostet hast, heißt im fachjargon spaghetticode - auch wenn ich zugeben muss, dass es auch schlimmeren spaghetticode gibt.

also als kleinen refactoring-tipp:

aus

PHP-Code:
<?php
if(bedingung) {
        [
codeblock1]
} else {
        [
codeblock2]
}
?>
wird
PHP-Code:
<?php
function eins($parameter$parameter2) {
   return [
codeblock1];
}
function 
zwei() {
   return [
codeblock2];
}


if(
bedingung) {
    echo 
eins($foo,$bar);
} else {
    echo 
zwei();
}
?>
damit erreichst du eine geringere verschachtelungstiefe bei bedingungsanweisungen und schaffst leichter lesbaren code - und findest derartige fehler schneller.
axo ist offline  
Alt 10.05.2005, 13:26  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Igi
das heißt elseif(zusammengeschrieben)
jo, laut doku schon. else if (auseinandergeschrieben) funktioniert aber auch, und ist nicht das eigentliche problem.
das eigentliche problem ist dass der code an sich für den OP unlesbar und damit unverständlich und fehleranfällig ist - das ist zumindest meine meinung. deswegen halte ich es für einen besseren vorschlag, dem OP zu zeigen, wie man code besser strukturiert, um solche fehler nicht immer wieder zu machen.
axo ist offline  
Alt 10.05.2005, 13:31  
Gast
 
Beiträge: n/a
Standard

Hi axo

Danke, aber ich muss gestehen dass ich nicht verstehe was du da geschrieben hast. Das mit der Verschachtelung ist mir klar und ich habe meinen Code mindestens 5 malk durgesehen aber ich finde den Fehler einfach nicht. Ich als Anfänger verstehe das was du da gepostet hast nicht, sorry.

LG
Garnele
 
Alt 10.05.2005, 13:36  
Gast
 
Beiträge: n/a
Standard

Schritt #1:
PHP-Code:
<?php
function moduleInsert()
{
    if (
$name =="" or $tier_name=="" or $mail=="" or $pass=="" or $pass2=="")
    {
        echo 
"Bitte alle Felder ausfüllen";
        exit;
    }
    include(
"db.php");
    
$abfrage "SELECT name FROM mypet_user";
    
$ergebnis mysql_query($abfrage);
    while(
$row mysql_fetch_object($ergebnis))
    {
        if (
$name == $row->name)
        {
            echo 
"Ihr Spielername ist bereits vorhanden. Bitte wählen sie einen anderen.";
            exit;
        } 
    }
    
    
$abfrage "SELECT name FROM mypet_katzen";
    
$ergebnis mysql_query($abfrage);
    while(
$row mysql_fetch_object($ergebnis))
    {
        if(
$tier_name==$row->name)
        {
            echo 
"Ihr Tiername ist bereits vorhanden. Bitte wählen sie einen anderen.";
            exit;
        }
    }
    
mysql_close($verbindung);
    
    if (
$pass==$pass2)
    {
        
$pass3 md5($pass);
        include(
"db.php");
        
$eintrag "INSERT INTO mypet_user (name, pass, mail)
        VALUES ('$name', '$pass3', '$mail')"
;
        
$eintragen mysql_query($eintrag);
    
        
$abfrage "SELECT id FROM mypet_user WHERE name='$name'";
        
$ergebnis mysql_query($abfrage);
        
$row mysql_fetch_object($ergebnis);
    
        
$eintrag2 "INSERT INTO mypet_katzen (name, herr_id, hunger, krankheiten, wohlfühl, freunde)
                VALUES ('$tier_name', '$row->id', '5', '0', '5', '0')"
;
        
$eintragen2 mysql_query($eintrag2);
    
        
$abfrage2 "SELECT id FROM mypet_katzen WHERE name='$tier_name'";
        
$ergebnis2 mysql_query($abfrage2);
        
$row2 mysql_fetch_object($ergebnis2);
    
        
$eintrag3 "INSERT INTO mypet_user (pet_id)
                VALUES ('$row2->id')"
;
        
$eintragen3 mysql_query($eintrag3);
    
        if (
$eintragen == TRUE and $eintragen2 == TRUE and $eintragen3 == TRUE)
        {
            echo 
"Ihre Daten wurden gespeichert, sie können sich nun einloggen. Viel Spass";
        }
        else
        {
            echo 
"Beim eintragen ihrer Daten Trat ein Fehler auf. Bitte benachrichtigen sie den Administrator.";
        }
        
mysql_error();
    
        
mysql_close($verbindung);
    }
    else
    {
        echo 
"Die Passwörter stimmen nicht &uuml;berein";
    }
}


if (
$modul == "insert")
    
moduleInsert(); 
else
{
  echo
"Um am Spiel Teilnehmen zu können müssen sie sich erst registrieren. Die Registration       ist kostenlos und erfolgt in einem Schritt. Bitte füllen sie [b]alle[/b] untenstehenden Felder aus.

      <form action=index.php?mode=register&modul=insert method=post>
      Spielername <input type=text size=20 name=name>
      

      

      Name des Tieres <input type=text size=20 name=tier_name>
      

      

      Passwort <input type=password size=20 name=pass>
      

      

      Passwort wiederholen <input type=password size=20 name=pass2>
      

      

      Mail Adresse <input type=text size=20 name=mail>
      

      

      <input type=submit value=Senden>
      </form>"
;
}
?>
 
Alt 10.05.2005, 13:43  
Gast
 
Beiträge: n/a
Standard

Schritt ausgeführt und verstanden um was es geht. Es tritt jetzt ein neuer Fehler auf: Es kommt immer "Bitte alle Felder ausfüllen".

LG
Garnele
 
Alt 10.05.2005, 13:46  
Gast
 
Beiträge: n/a
Standard

dann ist wohl mindest eine der variablen $name, $tier_name, $mail, $pass, $pass2
nicht "gesetzt"

gruss
CJ
 
Alt 10.05.2005, 13:47  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ok. ich hab dir mal den code teilweise umgeformt - ich glaub damit kannst du nachvollziehen, was ich damit meine, code-blöcke in funktionen zu packen.

PHP-Code:
<?php
include("db.php");

if(
$modul != 'insert') {
    echo 
register_form();
    exit;
}

if (
$name =="" or $tier_name=="" or $mail=="" or $pass=="" or $pass2=="")
{
    echo 
"Bitte alle Felder ausfüllen";
    exit;
}

if(
benutzer_existiert($name))
{
    echo 
"Ihr Spielername ist bereits vorhanden. Bitte wählen sie einen anderen.";
    exit;
}

if(
katze_existiert($tier_name)) {
    echo 
"Ihr Tiername ist bereits vorhanden. Bitte wählen sie einen anderen.";
    exit;
}

if(
$pass != $pass2) {
    echo 
"Die Passwörter stimmen nicht &uuml;berein";
    exit;
}


$pass3 md5($pass);
$eintrag "INSERT INTO mypet_user (name, pass, mail)
    VALUES ('$name', '$pass3', '$mail')"
;
$eintragen mysql_query($eintrag);

$abfrage "SELECT id FROM mypet_user WHERE name='$name'";
$ergebnis mysql_query($abfrage);
$row mysql_fetch_object($ergebnis);

$eintrag2 "INSERT INTO mypet_katzen (name, herr_id, hunger, krankheiten, wohlfühl, freunde)
    VALUES ('$tier_name', '$row->id', '5', '0', '5', '0')"
;
$eintragen2 mysql_query($eintrag2);

$abfrage2 "SELECT id FROM mypet_katzen WHERE name='$tier_name'";
$ergebnis2 mysql_query($abfrage2);
$row2 mysql_fetch_object($ergebnis2);

$eintrag3 "INSERT INTO mypet_user (pet_id)
    VALUES ('$row2->id')"
;
$eintragen3 mysql_query($eintrag3);

if (
$eintragen == TRUE and $eintragen2 == TRUE and $eintragen3 == TRUE)
{
    echo 
"Ihre Daten wurden gespeichert, sie können sich nun einloggen. Viel Spass";
}
else
{
    echo 
"Beim eintragen ihrer Daten Trat ein Fehler auf. Bitte benachrichtigen sie den Administrator.";
}




function 
benutzer_existiert($user) {
  
$abfrage "SELECT COUNT(*) as num FROM mypet_user WHERE name='".$user."'";
  
$ergebnis mysql_query($abfrage);
  
$data mysql_fetch_object($ergebnis);
  return (
$data -> num 0);
}

function 
katze_existiert($tier_name) {
  
$abfrage "SELECT COUNT(*) as num FROM mypet_katzen WHERE name='".$tier_name."'";
  
$ergebnis mysql_query($abfrage);
  
$data mysql_fetch_object($ergebnis);
  return (
$data -> num 0)
}

function 
register_form() {
  return 
"Um am Spiel Teilnehmen zu können müssen sie sich erst registrieren. Die Registration       
    ist kostenlos und erfolgt in einem Schritt. Bitte füllen sie [b]alle[/b] untenstehenden Felder aus.

      <form action=index.php?mode=register&modul=insert method=post>
      Spielername <input type=text size=20 name=name>
      

      

      Name des Tieres <input type=text size=20 name=tier_name>
      

      

      Passwort <input type=password size=20 name=pass>
      

      

      Passwort wiederholen <input type=password size=20 name=pass2>
      

      

      Mail Adresse <input type=text size=20 name=mail>
      

      

      <input type=submit value=Senden>
      </form>"
;
}

?>
wie du sehen kannst, habe ich das verhalten deines skripts nicht verändert - außer dass ich u.U. einen fehler reingebracht habe, weil ich dein skript so nicht testen kann.
ich hab aber ein paar code-stücke und bedingungen umgeformt - und wie du siehst, ist die verschachtelungstiefe jetzt nicht mehr gegeben, und der code ist übersichtlicher.
ich hab's jetzt nicht komplett geändert, sonst siehst du den sinn dahinter nicht. es gibt also auch für dich noch einiges zu tun.
axo ist offline  
Alt 10.05.2005, 13:48  
Gast
 
Beiträge: n/a
Standard

Hi CJunky

Also ich denke du kannst mal davon ausgehen dass alle Variablen gesetzt sind da ich das Formular komüplett ausgefüllt habe.

LG
Garnele
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
else Zweig weglassen - schneller? mAy^daY PHP Tipps 2008 9 27.12.2007 21:35
Arbeitstage berechnen (Mo-Fr) bp158 PHP Tipps 2008 9 06.10.2007 13:20
Voraussetzungen für dieses Thumbnail Skript Plague PHP Tipps 2008 9 19.09.2007 13:35
Problem und Frage zu Listenfeldauswertung .... bp158 PHP Tipps 2006 2 10.07.2006 22:37
Fehler: 2mal else hintereinander thokon89 PHP Tipps 2006 4 03.07.2006 02:23
Tabellenzeile ausblendenen mit Select-Außwahl Broadcast HTML, Usability und Barrierefreiheit 10 27.01.2006 20:50
Große probleme mit PHP PHP Tipps 2005-2 55 29.10.2005 22:25
Easy PHP Album 1.2.7 PHP Tipps 2005-2 7 02.09.2005 09:17
Es wird nur If und nicht Else ausgeführt! Diego1978 PHP Tipps 2005-2 3 20.08.2005 03:27
else if() vs switch DerDesian PHP Tipps 2005 4 24.03.2005 12:19
IF ELSEIF ELSEIF ELSE mit While Schleife PHP Tipps 2005 9 04.03.2005 23:27
If/ else if/ else bedingung richtig trotzdem falsch?!? seejay PHP Tipps 2005 8 09.02.2005 12:59
if else im else von if else *~* PHP Tipps 2004 3 20.09.2004 20:47
[Erledigt] kompilierte C datei über Apache aufrufen! Server, Hosting und Workstations 6 02.09.2004 23:49
probleme mit if und else PHP Tipps 2004 3 19.08.2004 02:56

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php elseif else zweig weglassen, elseif php ohne echo, php elseif wiederholen

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:29 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.