Herr_der_Ringe Geschrieben 3. November 2005 Geschrieben 3. November 2005 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 Zitieren
baba007 Geschrieben 3. November 2005 Geschrieben 3. November 2005 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 ... Zitieren
Herr_der_Ringe Geschrieben 3. November 2005 Autor Geschrieben 3. November 2005 funzt so auch nicht, er bricht trotzdem nicht ab.... Zitieren
Maulwurf_der_Schlaue Geschrieben 3. November 2005 Geschrieben 3. November 2005 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] Zitieren
Herr_der_Ringe Geschrieben 3. November 2005 Autor Geschrieben 3. November 2005 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... Zitieren
Maulwurf_der_Schlaue Geschrieben 3. November 2005 Geschrieben 3. November 2005 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? Zitieren
baba007 Geschrieben 3. November 2005 Geschrieben 3. November 2005 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 Zitieren
kills Geschrieben 3. November 2005 Geschrieben 3. November 2005 Übrigens, dass mit dem Break in der for-schleife muss auch gehen.... Zitieren
Herr_der_Ringe Geschrieben 3. November 2005 Autor Geschrieben 3. November 2005 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!!!! Zitieren
Maulwurf_der_Schlaue Geschrieben 3. November 2005 Geschrieben 3. November 2005 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 Zitieren
Herr_der_Ringe Geschrieben 3. November 2005 Autor Geschrieben 3. November 2005 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! Zitieren
kills Geschrieben 3. November 2005 Geschrieben 3. November 2005 $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] Zitieren
Herr_der_Ringe Geschrieben 3. November 2005 Autor Geschrieben 3. November 2005 YEAR, Danke!!! So funzt es:D:D Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.