php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 22.11.2010, 20:05  
Neuer Benutzer
 
Registriert seit: 19.10.2010
Beiträge: 23
PHP-Kenntnisse:
Anfänger
Cogax befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] break auf das übergeordnete if

Hallo zusammen.
Eigendlich erklärt der Titel schon alles. Ich habe verschachtelte ifs. Wenn eine Bedingung zutrifft, dann will ich aber nicht das aktuelle if abbrechen, sondern das übergeordnete.

PHP-Code:
<?php
$a 
1;
$b 1;
$x 1;
$y 1;
$z 0;


if(
$x) {
    if(
$a) {
        echo 
'Fehler: a = 1<br />';
        
// *
    

    
    if(
$b) {
        echo 
'Fehler: b = 1<br />';
    } 
    
    echo 
'x = 1<br />';
} elseif (
$z) {
    
// Irgendwas
}

echo 
'aaaa';
?>
Ausgabe:
Code:
Fehler: a = 1<br />Fehler: b = 1<br />x = 1<br />aaaa
Die Ausgabe habe ich auch erwartet. Ich will aber, dass wenn $a true ist, erst das echo 'Fehler: a = 1<br />'; ausgegeben wird, und danach direkt weiter zum elseif der übergeordneten if bedingung 'springt'.

Setze ich bei //* break; ein, kommt ein error, ist mir verständlich. Setzte ich da exit(); ein, wird das echo ganz am Ende nicht ausgegeben. Gibt es eine möglichkeit so etwas in diesem Stil umzusetzen?
Cogax ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 22.11.2010, 20:09  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Dann benutz kein elseif, sondern ein if und mach die Bedingung wahr oder verwende Funktionen:
PHP-Code:
if($x) { 
    if(
$a) { 
        echo 
'Fehler: a = 1<br />'
        
irgendwas();
        
// * 
    
}  
     
    if(
$b) { 
        echo 
'Fehler: b = 1<br />'
    }  
     
    echo 
'x = 1<br />'
} elseif (
$z) { 
    
irgendwas();
}
?> 
Es gibt seit PHP 5.3 auch goto, das ist aber nur zu empfehlen, wenn du genau weißt was du tust (und das vermute ich nicht) und es keine andere sinnvolle Lösung gibt. Endliche Automaten sind so ein Anwendungsfall, ich nehme nicht an, dass du das bauen möchtest.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 22.11.2010, 20:12  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

If kannst du überhaupt nicht „abbrechen“.
break ist für das Abbrechen eines aktuellen Schleifendurchlaufes gedacht.

Zitat:
Gibt es eine möglichkeit so etwas in diesem Stil umzusetzen?
Ich kann an Hand dieses Beispiels nicht nachvollziehen, was du wirklich erreichen/umsetzen willst. Bitte beschreibe das erst mal, nachvollziehbar.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 22.11.2010, 20:47  
Neuer Benutzer
 
Registriert seit: 19.10.2010
Beiträge: 23
PHP-Kenntnisse:
Anfänger
Cogax befindet sich auf einem aufstrebenden Ast
Standard

Auf das minimum reduziert sieht mein Beispielcode so aus:
PHP-Code:
<?php
if($a) {
    if(
$b) {
        
// Mach irgendwas
    
}
    
// Wenn $b true ist, sollte der Code, welcher hier steht, NICHT durchgeführt werden
}
// Wenn $b true ist, sollte der Code, welcher hier steht, trotzdem durchgeführt werden
?>
Ich hoffe er ist selbsterklärend. Der springende Punkt ist, dass ich auf das if($b) kein else haben will, weil da sonst die unübersichtlichkeit anfängt.

@Chriz: Auf goto bin ich auch schon gestossen, ich hoffe aber, dass es auch anders geht. Das mit den Funktionen kapiere ich nicht wirklich, sorry :S

Geändert von Cogax (22.11.2010 um 20:55 Uhr).
Cogax ist offline   Mit Zitat antworten
Alt 22.11.2010, 20:58  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von Cogax Beitrag anzeigen
Ich hoffe er ist selbsterklärend.
Nein.
Vor allem erklärt er überhaupt nicht, wo dein Problem liegt.

Code:
<?php
if($a) {
	if($b) {
		// Mach irgendwas
	}
	// Wenn $b true ist, sollte der Code, welcher hier steht, NICHT durchgeführt werden
	// -> dann mache einen else-Zweig daraus.
}
// Wenn $b true ist, sollte der Code, welcher hier steht, durchgeführt werden
// -> Dann mache eine erneute Abfrage if($b) drumherum
?>
... oder überlege dir halt selber, wie du die Bedingungen sinnvoller aufbauen kannst.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 22.11.2010, 21:17  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Wie ich das mit den Funktionen meine? Besser kann ichs nicht erklären ... Du möchtest zu verschiedenen Bedingungen dieselbe Funktionalität ausführen, also kapsle die Funktionalität in einer Funktion und ruf sie zu den entsprechenden Bedingungen auf.

Oder aber du restrukturierst dein if-else-Konstrukt. Funktionalität geht noch vor Übersichtlichkeit, sofern es keine elegantere Lösung gibt. Verschachtelte if-else-Konstrukte sind nicht schön, aber wenn die Funktionalität dadurch erreicht wird, sehe ich keinen Grund es nicht so zu tun.

Besser darüber diskutieren könnte man sicherlich, wenn wir genauer wüssten, worum es geht. Kein Quälcodemonster, aber etwas mehr wäre schön.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 22.11.2010, 21:27  
Neuer Benutzer
 
Registriert seit: 19.10.2010
Beiträge: 23
PHP-Kenntnisse:
Anfänger
Cogax befindet sich auf einem aufstrebenden Ast
Standard

Naja, danke das ihr trotzdem versucht mir zu helfen, auch wenn ich das euch nicht richtig erklären kann. Das mit dem Funktionen würde sicher Funktionieren, aber nach der Bedingung passieren noch so viele Sachen, dass ich diese nicht in eine Funktion packen will und kann.

Hier noch mal ein Beispiel. (unten hab ich den richtigen Code).
So ist es jetzt
PHP-Code:
<?php
if($a) {
    if(
$b) {
        echo 
'Error 1';
    } else {
        
mysql_query();
        
        if (
$c) {
            echo 
'Error 2';
        } else {
            
mysql_query();
            
            if (
$d) {
                echo 
'Error 3';
            } else {
                
mysql_query();
            }
        }
    }
}
?>
So würde ich es gerne haben
PHP-Code:
<?php
if ($a) {
    if (
$b) {
        echo 
'Error 1';
        
// *
    
}
    
    
mysql_query();
    if(
$c) {
        echo 
'Error 2';
        
// *
    
}
    
    
mysql_query();
    if(
$d) {
        echo 
'Error 3';
        
// *
    
}
    
mysql_query();
}
?>
Bei //* funktionieren folgende Befehle nicht: break; exit(); continue;


Augefallen ist mir das in meinem Code an folgender stelle, weil durch änderungen noch ein paar Bedinungen dazu kommen würden.
PHP-Code:
$mysql->select('id'$prefix.'modules''WHERE link = '.sql($_POST['link']));
if(
$mysql->count() > 0) {
    
$style->box(n_icon().'Fehler!''Der Linkparameter wird bereits verwendet!'.back_overview('modules_cat'));
} else {
    
// SQL ausführen?
    
if (isset($_POST['sql'])) {
        include(
'sql/'.$_POST['sql_path']);
        
$error false;
        foreach (
$query as $sql) {
            if(!
$mysql->query($sql)) {
                
$error true;
                break;
            }
        }
        
        
// MySQL Error?
        
if($error) {
            
$style->box(n_icon().'Fehler!''Das Modul wurde erfolgreich hinzugefügt, jedoch konnte der SQL Befehl nicht ausgeführt werden!'.back_overview('modules_cat'));
        } else {
            
$mysql->insert($insert$prefix.'modules');
            
$style->box(p_icon().'Erfolgreich!''Das Modul wurde erfolgreich hinzugefügt und der SQL Befehl wurde erfolgreich asugeführt.'.back_overview('modules_cat'));
        }
    } else {
        
$style->box(p_icon().'Erfolgreich!''Das Modul wurde erfolgreich hinzugefügt!'.back_overview('modules_cat'));
    }

Cogax ist offline   Mit Zitat antworten
Alt 22.11.2010, 21:40  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von Cogax Beitrag anzeigen
Bei //* funktionieren folgende Befehle nicht: break; exit(); continue;
Wie ich schon schrieb - break ist für Schleifen gedacht, continue ebenso.
Die kannst du nicht innerhalb von if/else benutzen, weil es da nichts „abzubrechen“ gibt.

exit funktioniert natürlich, beendet aber das komplette Script - also auch nicht das, was du suchst.


Und dein „so ist es jetzt“, „so hätte ich es gerne“ macht es für mich leider immer noch nicht klarer.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 22.11.2010, 21:51  
Erfahrener Benutzer
 
Benutzerbild von bitsnack
 
Registriert seit: 01.08.2010
Beiträge: 352
PHP-Kenntnisse:
Fortgeschritten
bitsnack befindet sich auf einem aufstrebenden Ast
bitsnack eine Nachricht über ICQ schicken bitsnack eine Nachricht über MSN schicken bitsnack eine Nachricht über Skype™ schicken
Standard

Nicht schöner aber so wie du es haben willst:
PHP-Code:
<?php 
if ($a) { 
    do {
        if(
$b) { 
            echo 
'Error 1'
        } else { 
            
mysql_query();
        } 
             
        if (
$c) { 
               echo 
'Error 2';
               break; 
// Bricht do-while ab, alles im do-while aber nach Ausführung dieser Zeile wird nicht beachtet
        
} else { 
            
mysql_query(); 
        }
        
        if (
$d) { 
            echo 
'Error 3';
            break;
        } else { 
            
mysql_query(); 
        } 
    } while (
FALSE);

?>
bitsnack ist offline   Mit Zitat antworten
Alt 22.11.2010, 22:12  
Neuer Benutzer
 
Registriert seit: 19.10.2010
Beiträge: 23
PHP-Kenntnisse:
Anfänger
Cogax befindet sich auf einem aufstrebenden Ast
Standard

Danke, Bitsnack. So etwas habe ich gesucht. Das ist ja eigendlich 'nur' ne do while schleife um meinem 'so würde ich es gerne haben' Code. Funktioniert auf jeden fall. Danke
Cogax ist offline   Mit Zitat antworten
Antwort


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
Variablen vom Frame in die übergeordnete Seite des Frames übergeben JPB83 PHP Tipps 2010 4 03.11.2010 09:16
RSS einbinden Saphier PHP Tipps 2010 2 31.08.2010 11:37
Funktionsaufruf durch übergeordnete Methoden beenden Juu PHP Tipps 2010 27 27.05.2010 14:39
[Erledigt] imagecreatefrombmp(): 16 Bit Bitmaps mit Palette hondatuner PHP-Fortgeschrittene 15 20.04.2010 12:05
http_class verwenden hans213 PHP Tipps 2009 27 15.01.2010 03:07
[Erledigt] Datumsformat IMAP -&gt; MySQL umwandeln - wie? Namevac PHP Tipps 2009 5 05.05.2009 13:36
[Erledigt] break ohne einfluss auf html SteiniKeule PHP Tipps 2008 9 15.10.2008 15:50
[Erledigt] Transparente Runde Ecken bei Thumbnial realisieren tomtaz PHP Tipps 2008 3 08.07.2008 01:20
break 2; PHP Tipps 2005-2 4 24.07.2005 13:03
Übergeordnete [Erledigt] break auf das übergeordnete if HTML, Usability und Barrierefreiheit 2 16.02.2005 10:01
Abstatz mit MultiCell Fpdf PHP Tipps 2005 4 12.01.2005 14:09
<div> ohne break andrew22 HTML, Usability und Barrierefreiheit 7 04.01.2005 12:27
fehler bei break! Fraylman PHP Tipps 2004 5 17.08.2004 10:46
include(""); break; PHP Tipps 2004 1 09.06.2004 16:22

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php if break, php if abbrechen, php break if, php if unterbrechen, php break in if, break if php, if break php, if abbrechen php, php if schleife verlassen, if unterbrechen php, sql da0003, if anweisung abbrechen und übergeordnet else, php bedingung abbrechen, break if c, php if und break, php break if clause, php else if abbrechen, php if bedingung abbrechen, php beak if clause, break für übergehordnete

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:48 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