Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

For-Schleife

Empfohlene Antworten

Veröffentlicht

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


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 ...

funzt so auch nicht, er bricht trotzdem nicht ab....

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]

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...


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?

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

Übrigens, dass mit dem Break in der for-schleife muss auch gehen....

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!!!!

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!


$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]

YEAR, Danke!!!

So funzt es:D:D

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.