if Schleife läuft nicht
Michi
- php
0 RFZ0 Michi0 Daniel
2 e70 Michi
0 AllesMeins0 Manuel B.
Hallo zusammen
Was ist den hier mit diesem Stück Code falsch:
if (!eregi('^([0-9]{3}).([0-9]{2}).([0-9]{3}).([0-9]{3})$', $ahvnr))
{
echo ("<font color='red'>Bitte geben Sie die AHV-Nummer nur nach folgendem Muster ein xxx.xx.xxx.xxx!<br> Die Eingabe von <b>$ahvnr</b> ist nicht korrekt.</font><br>");
}
Eigentlich sollte man doch meinen, wenn die Zahl nicht nach diesem Muster eingegeben wird, geht der Code in die if Schlaufe und fertig.
Mein Problem ist nun, er geht wohl in die if Schlaufe aber das Script läuft dann immer noch weiter.
Was mache ich bloss falsch?
Danke für euer Hilfe schon mal im voraus.
Gruss
Michi
Mein Problem ist nun, er geht wohl in die if Schlaufe aber das Script läuft dann immer noch weiter.
Was mache ich bloss falsch?
Nix, wer sagt denn, dass eine if-Abfrage das Script danach beendet? Wenn du das willst, setz in deine if-Klammern ein "die;" ans Ende, bzw. mach aus deinem echo einfach "die('zahl xyz so angeben');".
greetz RFZ
geht leider nicht, da ich das script mit einem include in ein anderes einbinde, wird mit dem exit, der ganze Bildschirm weiss und nur der text wird ausgegeben.
was ich noch komische finde ist, wenn ich noch eine weiter überprüfung ranhänge, geht das script nicht weiter. Also das heisst, die formularinhalte werden nicht in die db geschrieben.
if (!eregi('^([0-9]{3}).([0-9]{2}).([0-9]{3}).([0-9]{3})$', $ahvnr))
{
echo ("<font color='red'>Bitte geben Sie die AHV-Nummer nur nach folgendem Muster ein xxx.xx.xxx.xxx!<br> Die Eingabe von <b>$ahvnr</b> ist nicht korrekt.</font><br>");
}
if (!eregi('^([a-zA-Z-])$', $name))
{
echo ("<font color='red'>Bitte verwenden Sie beim Namen nur die Zeichen A-Z!<br> Die Eingabe von <b>$name</b> ist nicht erlaubt.</font><br>");
}
wenn die nummer genau wie verlangt eingegeben wird aber der name nicht, läuft das script nicht weiter.
danke und gruss
michi
Hi,
if (!eregi('^([0-9]{3}).([0-9]{2}).([0-9]{3}).([0-9]{3})$', $ahvnr))
{
echo ("<font color='red'>Bitte geben Sie die AHV-Nummer nur nach folgendem Muster ein xxx.xx.xxx.xxx!<br> Die Eingabe von <b>$ahvnr</b> ist nicht korrekt.</font><br>");
}
if (!eregi('^([a-zA-Z-])$', $name))
{
echo ("<font color='red'>Bitte verwenden Sie beim Namen nur die Zeichen A-Z!<br> Die Eingabe von <b>$name</b> ist nicht erlaubt.</font><br>");
}
wie wäre das hier:
in der einen datei (die du per include holst)
function eingabe_validierung($ahv_nummer, $name)
{
$not_valid = false;
$fehler_msg = "";
if(!eregi('^([0-9]{3})\.([0-9]{2})\.([0-9]{3})\.([0-9]{3})$', $ahv_nummer))
{
$fehler_msg .= "<font color='red'>Bitte geben Sie die AHV-Nummer nur nach folgendem Muster ein xxx.xx.xxx.xxx!<br> Die Eingabe von <b>$ahvnr</b> ist nicht korrekt.</font><br>";
$not_valid = true;
}
if (!eregi('^([a-zA-Z\-])$', $name))
{
$fehler_msg .= "<font color='red'>Bitte verwenden Sie beim Namen nur die Zeichen A-Z!<br> Die Eingabe von <b>$name</b> ist nicht erlaubt.</font><br>";
$not_valid = true;
}
if($not_valid)
{
return $not_valid;
}
else
{
return $fehler_msg;
}
}
dann machst du an irgend ner stelle nen funktions aufruf und
machst entweder das was gemacht werden soll wenn OK oder du
gibst die fehler_msg aus.
Hallo Daniel
Danke für deine Mühe.
Ich habe es mir jetzt so gemacht, dass ich bei jeder überprüfung noch eine Variable definiere und das mail oder den db eintrag mache, wenn diese variable nicht stimmt.
if (blabla)
{
echo "das ist falsch";
$allesok1 = 1;
}
if (blabla)
{
echo "das ist falsch";
$allesok2 = 1;
}
if ($allesok !== 1 && $allesok !== 1)
{
db eintrag
}
Sicherlich nicht besonders schöner Code aber umheimlich funktionierend ;-)
Hi,
if (blabla)
{
echo "das ist falsch";
$allesok1 = 1;
}
if (blabla)
{
echo "das ist falsch";
$allesok2 = 1;
}if ($allesok !== 1 && $allesok !== 1)
{
db eintrag
}
Sicherlich nicht besonders schöner Code aber umheimlich funktionierend ;-)
Unnheimlich trifft den nagel auf den kopf.
$allesok1 = false;
$allesok2 = false;
if (blabla)
{
echo "das ist falsch";
$allesok1 = true;
}
if (blabla)
{
echo "das ist falsch";
$allesok2 = true;
}
if ($allesok && $allesok)
{
db eintrag
}
sieht wesentlich schöner aus.
Hi nochmal,
$allesok1 = false;
$allesok2 = false;if (blabla)
{
echo "das ist falsch";
$allesok1 = true;
}if (blabla)
{
echo "das ist falsch";
$allesok2 = true;
}
if ($allesok1 && $allesok2)
{
db eintrag
}
else
{
if (!$allesok1)
{
echo Fehlermedlung1;
}
if (!$allesok2)
{
echo Fehlermedlung2;
}
}
und nocheinmal, ergs, wo bin ich nur mit meinen gedanken.
$allesok1 = true;
$allesok2 = true;
if (blabla1)
{
$allesok1 = false;
}
if (blabla2)
{
$allesok2 = false;
}
if ($allesok1 && $allesok2)
{
db eintrag
}
else
{
if (!$allesok1)
{
echo Fehlermedlung1;
}
if (!$allesok2)
{
echo Fehlermedlung2;
}
}
so sollte das natürlich heißen.
und nocheinmal, ergs, wo bin ich nur mit meinen gedanken.
$allesok1 = true;
$allesok2 = true;if (blabla1)
{
$allesok1 = false;
}if (blabla2)
{
$allesok2 = false;
}if ($allesok1 && $allesok2)
{
db eintrag
}
else
{
if (!$allesok1)
{
echo Fehlermedlung1;
}if (!$allesok2)
{
echo Fehlermedlung2;
}
}
Hey vielen Dank für alles...werde meinen Code noch entsprechend anpassen. Aber wirklich falsch war es ja eigentlich nicht oder?
Hi,
Hey vielen Dank für alles...werde meinen Code noch entsprechend anpassen. Aber wirklich falsch war es ja eigentlich nicht oder?
deiner oder meiner? meiner war schon etwas falsch true und false etwas
vertauscht.
Deiner war von der idee her sicher richtig, allerdings macht das i.d.R.
niemand so, zumindest niemand den ich kenne.
wenn du irgendwo ne variable abfrägst (z.B. in einem if-BLOCK) dann
sollte es diese Variable zuvor aufjedenfall geben. und für deinen zweck
reicht eine variable vom typ boolean.
MfG
Deiner war von der idee her sicher richtig, allerdings macht das i.d.R.
niemand so, zumindest niemand den ich kenne.
Jetzt kennst du ja jemand ;-)
wenn du irgendwo ne variable abfrägst (z.B. in einem if-BLOCK) dann
sollte es diese Variable zuvor aufjedenfall geben. und für deinen zweck
reicht eine variable vom typ boolean.
OK, werde es mir merken. Fange erste an mit PHP...und da ist man um solche Tipps sehr froh!
Danke und ein schönes WE
Hi,
OK, werde es mir merken. Fange erste an mit PHP...und da ist man um solche Tipps sehr froh!
So ähnlich ging es mir for 4 monaten auch. allerdings hatte ich schon
viel erfahrung in anderen sprachen gesammelt.
MfG
Moin!
Sobald es mehr Bedingungen gibt, die geprüft werden und den Eintrag in die DB bei Nichterfüllung verhindern sollen, sollte man von diesen Einzelvariablen abrücken und Fehlermeldungen "sammeln":
$fehler = array(); // Leeres Array anlegen.
if (blabla1)
{
$fehler[] = "Die Bedingung 1 wurde nicht erfüllt";
}if (blabla2)
{
$fehler[] = "Die Bedingung 2 wurde nicht erfüllt";
}
// Hier weitere Bedingungenif (count($fehler)==0)
{
db eintrag
}
else
{
foreach ($meldung in $fehler)
{
echo $meldung;
}
}
Kann man auch noch detaillierter ausprogrammieren, wenn die Fehlermeldungen individueller behandelt werden sollen (obwohl Sonderbehandlung von Fehlerzuständen besser in der oberen Bedingung behandelt werden sollte).
- Sven Rautenberg
Hi,
Sobald es mehr Bedingungen gibt, die geprüft werden und den Eintrag in die DB bei Nichterfüllung verhindern sollen, sollte man von diesen Einzelvariablen abrücken und Fehlermeldungen "sammeln":
Kann man auch noch detaillierter ausprogrammieren, wenn die Fehlermeldungen individueller behandelt werden sollen (obwohl Sonderbehandlung von Fehlerzuständen besser in der oberen Bedingung behandelt werden sollte).
Da hast du natürlich vollkommen recht. wobei ich das hier:
if (count($fehler)==0)
{
db eintrag
}
wohl eher so schreiben würden:
if (empty($fehler))
{
db eintrag
}
MfG
Huhu Daniel
Da hast du natürlich vollkommen recht. wobei ich das hier:
if (count($fehler)==0)
{
db eintrag
}
>
> wohl eher so schreiben würden:
>
> ~~~
> if (empty($fehler))
> {
> db eintrag
> }
>
Mmmmh, die erste Variante ist aber viel einfacher zu verstehen und eindeutiger.
Man sieht gleich das es um ein Array geht das 0 Elemente haben soll.
Diese Informationen liefert die zweite Variante nicht da empty() alles mögliche auswerten kann.
Solche Faulenzer sind am Anfang verführerisch aber ich finde die
inzwischen eher überflüssig und nutze einige dieser vermeintlichen Abkürzungen gar nicht mehr.
Viele Grüße
lulu
Hi,
ein if() ist keine Schleife, sondern eine Bedingung. Schleifen bastelst du mit for() bzw. while() und was es sonst noch gibt...
E7
ein if() ist keine Schleife, sondern eine Bedingung. Schleifen bastelst du mit for() bzw. while() und was es sonst noch gibt...
ja hast recht...tut mir leid,nur leider hilfe mir das nicht weiter.
Hiho,
du solltest dir dringend das Konzept einer if BEDINGUNG verdeutlichen. Solch eine Bedingung hat herzlich wenig mit dem weiteren Ablauf des Scriptes zu tun. Eine if Bedingung macht lediglich das folgende. Sie prüft den Teil nach dem if( ob es ein wahrer Ausdruck ist. Falls ja wird der Teil in den geschweiften Klammern ausgeführt. Falls nicht wird geprüft ob es einen elseif oder else Teil gibt. Wenn ja wird dieser teil bewertet und ausgeführt.
Das alles bzeieht sich aber jeweils nur auf die Anweisungen in den Geschweiften Klammern.
Nach dem Ende der Bedingung läuft dein Script ganz normal weiter. Du kannst es dir wie einen Art Sprung vorstellen.
if($a == b){
irgendwas
}
wasanderes
Wenn $a gleich $ b ist wird "irgendwas" ausgeführt und dann "wasanderes". Ist dem nicht so wird "irgendwas" ignoriert. Die if bedingung wird quasi übersprungen und es geht danach ganz normal mit "wasanderes" weiter.
Marc
Hi,
if (!eregi(
Schonmal mit ereg() probiert? Ich denke nicht, das hier die Unterscheidung von Gross- und Kleinschreibung nötig ist. Ob es der "Fehler" ist, darauf würd ich nicht wetten ;)