• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

else if -> Variable wird nicht ausgegeben

aJunkie

Mitglied
Hallo.

Echt komisch. :oops:

PHP:
<?php if(!isset($_GET['eintragen'])) {                // Übersicht

    $sel    = mysql_query("SELECT * FROM `".$table."` ORDER BY ".mysql_real_escape_string($sortsql)."", $connect);    // Select, Datensätze (Videos) aus der Datenbank holen
    
    while($row = mysql_fetch_assoc($sel)) {            // Alle Datensätze ausgeben
    
    if($_GET['ansicht'] != 'liste') {                // Miniaturansicht
    ?>
    <div>
// /* PLAYER */
    </div>
    
<?php
    } else {                                         // Listenansicht
?>
    <p>/* HTML Link */</p>
    
<?php
    }                                                // else Listenansicht schließen
}                                                     // while Schleife schließen
    echo '<div class="clear"></div>';                // clearen
}                                                    // Übersicht schließen


    // ### INSERT
    if(isset($_GET['eintragen'])) {                    // Neues Video eintragen - Seite
    // Youtube
    $vidID    = $_POST['neuesvideo'];                    // eingegebene VIDEOID
    $url     = "http://gdata.youtube.com/feeds/api/videos/". $vidID;
    $doc     = new DOMDocument;
    $doc->load($url);
    $youtubetitle = $doc->getElementsByTagName("title")->item(0)->nodeValue;    // Youtubetitel aus $url auslesen
    
    if(isset($_POST['submit']) && $_POST['neuesvideo'] != '') {                    // wenn Formular abgeschickt und VideoID eingegeben wurde: In Datenbank eintragen
    $query = mysql_query("INSERT INTO `test`.$table                             
    (videoid, youtubetitel, eingetragen) 
    VALUES(
    '".mysql_real_escape_string($_POST['neuesvideo'])."', 
    '".mysql_real_escape_string($youtubetitle)."', NOW())", $connect);
    
    
    // (Fehler-)Meldungen
    if(!$query) {                                                                // wenn Insert fehlschlägt: Fehlermeldung
        $meldung =  "Fehlgeschlagen: <b>".mysql_error()."</b>";                
    } else if(isset($_POST['submit']) && $_POST['neuesvideo'] == '') {            // oder Formular abgeschickt wurde, aber VideoID fehlt: Fehlermeldung
        $meldung = 'VideoID fehlt!';
    } else {
        $meldung =  'Video erfolgreich hinzugefügt!';                            // alles okay!
    }
}
    // Neues Video eingetragen
?>
    <h2>Video hinzufügen</h2>
    <?php if(!empty($meldung)) echo "<p class=\"meldung\"><b>$meldung</b></p>\n"; ?>
    <form action="" method="post">
/* HTML FORMULAR */
    <input type="submit" name="submit" value="Hinzufügen">
    </form>
<?php } ?>
Siehe unter Fehlermeldungen.
Da fülle ich $meldung mit entsprechendem String, wo von drei aber nur zwei ausgegeben werden.
Bei Erfolg und bei SQL Error, allerdings nicht, wenn das Feld leer abgeschickt wird.

Sieht jemand den Fehler?
 
Ja, die Syntax von if-Konstrukten sieht -- einfach gesagt -- so aus:

Code:
if (<expression>)
   <statement>
else
   <statement>

<statement> steht für eine beliebige Anzahl von Anweisungen, die von geschweiften Klammern umfasst werden. Bei nur einer einzigen Anweisung können die geschweiften Klammern entfallen.

Einzelanweisungen:

PHP:
if ($x > 10)
    echo "$x ist größer als 10.";
else
    echo "$x ist nicht größer als 10.";

Anweisungsgruppen:

PHP:
if ($x > 10)
    {
        echo "$x ist größer als 10.";
        $isGreatherThan10 = true;
    }
else
    {
        echo "$x ist nicht größer als 10.";
        $isGreatherThan10 = false;
    }

Konstrukte wie unter anderem if, while, for und foreach zählen für sich genommen ebenfalls als einzelne Anweisungen (besser: statements).

PHP:
if ($x > 10)
    echo "$x ist größer als 10.";
else
    {
        if ($x < 5)
            {
                echo "$x ist kleiner als 5.";
            }
    }

Da jeweils nur einzelne Anweisungen gruppiert werden, kann der Code auch ohne geschweifte Klammern so (oder in etlichen Variationen davon) geschrieben werden:

PHP:
if ($x > 10)
    echo "$x ist größer als 10.";
else
    if ($x < 5)
        echo "$x ist kleiner als 5.";

Statt des letzten if-Konstrukts könnte syntaktisch also auch zum Beispiel ein foreach-Konstrukt oder jede andere Anweisung stehen, weshalb ein "else if" nicht besonderer ist als ein "else foreach" oder ein "else $i++".

Da es oftmals als schlechter Stil angesehen wird, Statements bei if-Konstrukten nicht zu gruppieren, müsste ein "else if" im Grunde so geschrieben werden:

PHP:
if ($x < 10) {
    // ...
} else {
    if ($x < 5) {
        // ...
    }
}

Das ist bei elseif natürlich nicht der Fall.

Edit: Dieser Post soll ein wenig verdeutlichen, dass die Syntax von Programmiersprachen sehr viel simpler und sehr viel konsequenter ist, als man denken könnte.
 
Ich habe jetzt alles durch.

@ CGollhardt: Habe sowohl elseif und auch else if geschrieben.
@ mustang: Kein Unterschied.

@ mermshaus: Vielen Dank.
Ich habe alles durch.
Ich weiß nicht, ob und was ich verändert habe, dass es plötzlich nicht mehr geht.

Ich habe den Script an allen Stellen erweitert, nur da nicht.

Jetzt sieht es erstmal so aus:
PHP:
    if(!$query)                                                         // wenn Insert fehlschlägt: Fehlermeldung
        $meldung =  "Fehlgeschlagen: <b>".mysql_error()."</b>";        
    elseif(isset($_POST['submit']) && $_POST['neuesvideo'] == '')         // oder Formular abgeschickt wurde, aber VideoID fehlt: Fehlermeldung
        $meldung = 'VideoID fehlt!'; 
    else
        $meldung =  'Video erfolgreich hinzugefügt!';                    // alles okay!
Das elseif funktioniert einfach nicht.


Egal =)

Einfach umgeschrieben:
PHP:
    if(isset($_POST['submit'])) {                    // wenn Formular abgeschickt
    
    if(empty($_POST['neuesvideo']) or $_POST['neuesvideo'] == '') {
        $meldung = 'VideoID fehlt!';
    } else {
    $query = mysql_query("INSERT INTO `test`.$table (videoid, youtubetitel, eingetragen) 
    VALUES(
    '".mysql_real_escape_string($_POST['neuesvideo'])."', 
    '".mysql_real_escape_string($youtubetitle)."', NOW())", $connect);
    
    $meldung =  'Video erfolgreich hinzugefügt!';                            // alles okay!
    if(!$query) $meldung = 'Fehlgeschlagen: '.mysql_error();
    }
        
}
Ich muss beim ersten Script irgendwas verändert haben, woran ich mich nicht mehr erinnere.
Wenn man das da oben auch zerlegt, sind da 1-2 kleine Widersprüche bzw. unnötige Zeilen.


Danke. =)

Edit: Suche gerade eine Möglichkeit, mySQL "user error messages" zu schreiben.
Wenn $query nicht erfolgreich war, kann es nur an der Verbindung liegen, aber sehr wahrscheinlich daran, dass $neuesvideo schon existiert -> UNIQUE.
 
Zuletzt bearbeitet:
Im Code aus dem Eröffnungspost steht im Prinzip:

PHP:
if (isset($_POST['submit']) && $_POST['neuesvideo'] != '') {
    if (isset($_POST['submit']) && $_POST['neuesvideo'] == '') {
        $meldung = 'VideoID fehlt!';
    }
}

  • Die erste if-Bedingung ist nur wahr, wenn $_POST['neuesvideo'] nicht leer ist.
  • Die zweite if-Bedingung ist nur wahr, wenn $_POST['neuesvideo'] leer ist.

Das heißt, die zweite if-Bedingung kann nur dann wahr sein, wenn die erste falsch ist. In diesem Fall wird die zweite if-Bedingung im Code aber gar nicht erreicht.

Im Code aus dem letzten Post sind diese beide Teilbedingungen äquivalent:

PHP:
if (empty($_POST['neuesvideo']) or $_POST['neuesvideo'] == '') {

empty würde reichen, der Oder-Teil bringt keinen Mehrwert.
 
Zuletzt bearbeitet:
@CGollhardt
elseif ist was ziemlich PHP-spezifiisches (auch wenn nicht von PHP erfunden ^^), in JavaScript, Java und vielen mehr gibt es dieses Konstrukt nicht.
Mal was ausführlicher:
PHP:
<?php
$variable = 2;
if ($variable === 1) {
  echo '1';
} elseif($variable === 0) {
  echo '0';
} else {
  echo 'Was anderes als 1 und 0.';
}
?>

Ist das selbe wie
PHP:
<?php
$variable = 2;
if ($variable === 1) {
  echo '1';
} else {if($variable === 0) {
  echo '0';
} else {
  echo 'Was anderes als 1 und 0.';
}}

// Sauber
if ($variable === 1) {
  echo '1';
} else {
  if($variable === 0) {
    echo '0';
  } else {
    echo 'Was anderes als 1 und 0.';
  }
}
?>
Da das if-Statement direkt auf das else Statement folgt, benötigt es keine Akkoladen.
Daher ist else if nichts komplexes, es ist nur die Kurzschreibform von else { if() }.
Wobei elseif in einem Wort geschrieben wird und daher "komplexer" ist.
 
@CGollhardt
elseif ist was ziemlich PHP-spezifiisches (auch wenn nicht von PHP erfunden ^^), in JavaScript, Java und vielen mehr gibt es dieses Konstrukt nicht.

In Java, Javascript und C gibt es ebenso ein else if, der einzige Unterschied ist die Trennung zwischen den beiden Woertern. Ich hab keinen Compiler zur Hand um nachzupruefen ob es in diesen Sprachen auch ohne Trennung funktioniert, aber das Konstrukt an sich gibt es.
Javascript Tutorial - Else If
else if in Java
if else

http://php.net/manual/en/control-structures.elseif.php schrieb:
Note: Note that elseif and else if will only be considered exactly the same when using curly brackets as in the above example. When using a colon to define your if/elseif conditions, you must not separate else if into two words, or PHP will fail with a parse error.

In PHP muessen die Woerter zusammengeschrieben werden, sofern man danach keine geschwungenen Klammern nimmt. Nimmt man geschwungene Klammern, so ist frei waehlbar welches Konstrukt man waehlt.
 
Was habe ich gesagt? elseif gibt es in JavaScript, java nicht. Von else if habe ich nicht geredet.
else if ist funktionell das selbe wie elseif, aber das gibt es in Java als solches nicht.
else if = else { if() }
 
Du hast gesagt, dass es dieses Konstrukt in den genannten Sprachen nicht gibt. Gibt es aber, es unterscheidet sich lediglich in der Syntax.

Beispiel: foo := 10; weist in Pascal einer Variable den Wert 10 zu. Wuerdest du behaupten, dass es dieses Konstrukt nicht in C gibt? Es gibt es naemlich sehr wohl, die Syntax unterschiedet sich jedoch: foo = 10;

Aber diese Haarspalterei fuehrt hier zu weit und lenkt nur vom Thema ab. Hat irgendjemand die neuste Frage des Threadstarters verstanden? Ich naemlich nicht.

Edit: Suche gerade eine Möglichkeit, mySQL "user error messages" zu schreiben.
Wenn $query nicht erfolgreich war, kann es nur an der Verbindung liegen, aber sehr wahrscheinlich daran, dass $neuesvideo schon existiert -> UNIQUE.
 
Suche nach "java elseif" und "I'm feeling lucky":

- Java: 'if' Statement - 'else if' style

Zum Thema, @aJunkie:

Möglicherweise ist mysql_error die Funktion, die du suchst. Aus dem Handbuch zu mysql_query:

PHP:
$result = mysql_query('SELECT * WHERE 1=1');
if (!$result) {
    die('Invalid query: ' . mysql_error());
}
 
Danke für die Posts.

Klar, kenne ich mysql_error.

Fehler bekomme ich in diesem Script halt auch nur, wenn das, was ich eingebe, schon in der Datenbank existiert.
mysql_error wäre dann: "Duplicate entry 'beispiel' bla bla".
Ob es seitens SQL eine Möglichkeit gibt, wie in PHP, dass man da selbst eine Fehlermeldung definieren kann, wenn es diesen Eintrag schon in der Datenbank gibt.
 
Zurück
Oben