Veröffentlicht 3. November 200519 j Hallo Ihr! Ich habe folgendes Problem. Ich habe eine for-Schleife mit 2 if-Bedingungen. Sollte eine dieser if-Bedingungen zutreffen, soll der weitere Verlauf des Scriptes nicht mehr fortgeführt werden. Hier ist die for-Schleife: for ($i = 1; $i <= 4; $i++) { if (!empty($_REQUEST['a' . $i . '_zeit'])) { if (($_REQUEST['a' . $i . '_vg'] == 0 && $_REQUEST['a' . $i . '_av'] == 0 && $_REQUEST['a' . $i . '_sz'] == 0 && $_REQUEST['a' . $i . '_ai'] == 0 && $_REQUEST['a' . $i . '_sb'] == 0) && !empty($_REQUEST['a' . $i . '_zeit'])) { $_REQUEST['step'] = 2; $sql = "rollback"; $meldung = 'Wenn keine Ansage stattfand, darf es keine Ansagezeit geben!'; break; } } else{ if (empty($_REQUEST['a' . $i . '_zeit'])) { if (($_REQUEST['a' . $i . '_vg'] == 1 || $_REQUEST['a' . $i . '_av'] == 1 || $_REQUEST['a' . $i . '_sz'] == 1 || $_REQUEST['a' . $i . '_ai'] == 1 || $_REQUEST['a' . $i . '_sb'] == 1) && empty($_REQUEST['a' . $i . '_zeit'])) { $_REQUEST['step'] = 2; $sql = "rollback"; $meldung = 'Wenn eine Ansage stattfand, muss eine Ansagezeit vorhanden sein!'; break; } } } } Ich kapiere nicht, warum es da nicht geht. Die Bedinungen an sich sind korrekt, garantiert! solche Bedingungen funktionieren auch, sprich er bricht ab sodass das Protokoll nicht gespeichert werden kann! if (!($_REQUEST['zug_istankunft'] >= $_REQUEST['zug_sollankunft'])) { $_REQUEST['step'] = 2; $meldung = 'Die Ist-Ankunft darf nicht vor der Soll-Ankunft sein!'; }else{ Aber wie gesagt, bei der for-schleife macht er das nicht und ich weiss nicht warum!! mfg,hdr
3. November 200519 j for ($i = 1; $i <= 4 && (!empty($_REQUEST['a' . $i . '_zeit']) || empty($_REQUEST['a' . $i . '_zeit'])); $i++) [/PHP] die einzige abbruchbedingung, die du hattest war $i <= 4, die breaks veranlassen das ende der jeweiligen Schleife ...
3. November 200519 j Hallo, um eine for-schleife zu beenden setze einfach $i auf 5 dann ergibt $i <= 4 nicht mehr true und er beendet die Schleife. Willst du das komplette Skript beenden kannst du auch "die()" verwenden... dann wird aber die Verarbeitung von PHP-Code für die komplette Seite gestoppt und erst wieder fortgeführt wenn du die Seite neu aufrufst oder aktualisierst... [EDIT:] Bei PHP verwendet man doch AND für && bzw. OR für || oder geht das aufs selbe raus? arbeite immer nur mit AND und OR (lesbarer) [:EDIT]
3. November 200519 j nö.. geht auch nicht-.- also.. in der ersten schleife steht, wenn man bei 5 möglichen checkboxen alles auf nein lässt, darf keine ansagezeit da sein. wenn etwas auf ja ist, muss eine ansagezeit da sien (schleife 1) sollte das jeweils nicht der fall sein, soll er das protokoll nicht speichern (was er im weiteren verlauf des scriptes dann tut) bzw. er soll eine fehlermeldung ausgeben, was bei dem anderen bsp (s. erster post) wunderbar funzt.. EDIT: Kommt aufs selbe raus...
3. November 200519 j for ($i = 1; $i <= 4; $i++) { if (!empty($_REQUEST['a' . $i . '_zeit'])) //***1*** { if (($_REQUEST['a' . $i . '_vg'] == 0 && $_REQUEST['a' . $i . '_av'] == 0 && $_REQUEST['a' . $i . '_sz'] == 0 && $_REQUEST['a' . $i . '_ai'] == 0 && $_REQUEST['a' . $i . '_sb'] == 0) && !empty($_REQUEST['a' . $i . '_zeit'])) //***2*** { $_REQUEST['step'] = 2; $sql = "rollback"; $meldung = 'Wenn keine Ansage stattfand, darf es keine Ansagezeit geben!'; break; //***3*** } } else { if (empty($_REQUEST['a' . $i . '_zeit'])) //***1*** { if (($_REQUEST['a' . $i . '_vg'] == 1 || $_REQUEST['a' . $i . '_av'] == 1 || $_REQUEST['a' . $i . '_sz'] == 1 || $_REQUEST['a' . $i . '_ai'] == 1 || $_REQUEST['a' . $i . '_sb'] == 1) && empty($_REQUEST['a' . $i . '_zeit'])) //***2*** { $_REQUEST['step'] = 2; $sql = "rollback"; $meldung = 'Wenn eine Ansage stattfand, muss eine Ansagezeit vorhanden sein!'; break; //***3*** } } } } [/PHP] wieso fragst du an den Stellen ***1*** und ***2*** beidemal das selbe ab? wenn es nicht erfüllt ist macht er ja eh schon nichts, oder verschau ich mich da? Wenn du bei ***3*** $i = 5 statt break schreibst bricht er die Schleife beim nächsten mal ab also Checkbos 1 wird geprüft er geht in beide if's rein dann würde 2,3,4 nicht mehr geprüft, oder hab ich da nen Denkfehler?
3. November 200519 j bau doch einfach ein paar echos rein und chekce mal wo er überhaupt reingeht, das kann nicht sein, dass die genannten vorschläge nicht funktionieren.... mach echo 1,2,3,4,5,6... für die jeweiligen Teile und melde die Reihenfolge der Zahlen, dann wissen wir überhaupt wo er rein geht und wo nicht
3. November 200519 j vielleicht habe ich ja en denkfehler? es ist ja so, er soll ja (wenn so ein feher auftritt, er also in die innerste schleife geht) nicht die for-schleife abbrechen (dann geht er ja raus und führt den restlichen code ab), sondern er soll dann den restlichen code NICHT ausführen!! bei dem anderen bsp macht er das auch..nur hier nicht, in der forschleife!!!!
3. November 200519 j Ich glaub ich komm jetzt nicht ganz mit... was meinst du mit "restlichen Code" ?? Siehe oben mit "DIE" (stierb) kannst du die ausführung beenden... oder exit... einfach mal www.php.net
3. November 200519 j ja.. nach der for-schleife kommen noch weitere bedingungen (wie im ersten post , davon noch 5 weite), dann kommt der ablauf, in dem das protokoll gespeichert wird... all das wird nach der forschleife durchlaufen.. soll es aber nicht (zumindest, wenn ein fehler da ist).. wie gesagt, die if-bedinungen, wenn diese wahr werden, führt er den restlichen code nicht aus und gibt ne fehlermeldung aus!
3. November 200519 j $meldung = ''; for ($i = 1; $i <= 4; $i++) { if (!empty($_REQUEST['a' . $i . '_zeit'])) //***1*** { if (($_REQUEST['a' . $i . '_vg'] == 0 && $_REQUEST['a' . $i . '_av'] == 0 && $_REQUEST['a' . $i . '_sz'] == 0 && $_REQUEST['a' . $i . '_ai'] == 0 && $_REQUEST['a' . $i . '_sb'] == 0) && !empty($_REQUEST['a' . $i . '_zeit'])) //***2*** { $_REQUEST['step'] = 2; $sql = "rollback"; $meldung = 'Wenn keine Ansage stattfand, darf es keine Ansagezeit geben!'; break; //***3*** } } else { if (empty($_REQUEST['a' . $i . '_zeit'])) //***1*** { if (($_REQUEST['a' . $i . '_vg'] == 1 || $_REQUEST['a' . $i . '_av'] == 1 || $_REQUEST['a' . $i . '_sz'] == 1 || $_REQUEST['a' . $i . '_ai'] == 1 || $_REQUEST['a' . $i . '_sb'] == 1) && empty($_REQUEST['a' . $i . '_zeit'])) //***2*** { $_REQUEST['step'] = 2; $sql = "rollback"; $meldung = 'Wenn eine Ansage stattfand, muss eine Ansagezeit vorhanden sein!'; break; //***3*** } } } } if ( $meldung == '' ) { // hier die weiteren Prüfungen rein... } [/PHP]
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.