Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben


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

Geschrieben

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]

Geschrieben

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

Geschrieben


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?

Geschrieben

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

Geschrieben

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

Geschrieben

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!

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...