Formularprüfung

Hallo,

ich komme bei einer Formularprüfung nicht weiter.
folgendes "Problem" (zumindest für mich).
if($_POST["vk"] == "stadt" && (empty($_POST["strasse"]) ||
empty($_POST["gasse"])))

Ich möchte damit erreichen:
Wenn vk eine Stadt ist, dann muss es entweder eine Strasse oder eine
Gasse geben. Aber irgendwie lösst er das nicht so auf, wie ich es mir
wünsche.

Hat jemand einen Tipp?

Danke und lg,
Erich
Erich Wagner [ Do, 20 September 2007 07:57 ] [ ID #1825372 ]

Re: Formularprüfung

> if($_POST["vk"] == "stadt" && (empty($_POST["strasse"]) ||
> empty($_POST["gasse"])))
>
> Hat jemand einen Tipp?

Es soll einer von beiden *nicht* empty sein!
Harald Stowasser [ Do, 20 September 2007 08:33 ] [ ID #1825373 ]

Re: Formularprüfung

Erich Wagner schrieb:
>
> Hallo,
>
> ich komme bei einer Formularprüfung nicht weiter.
> folgendes "Problem" (zumindest für mich).
> if($_POST["vk"] == "stadt" && (empty($_POST["strasse"]) ||
> empty($_POST["gasse"])))
>
> Ich möchte damit erreichen:
> Wenn vk eine Stadt ist, dann muss es entweder eine Strasse oder

Du schreibst hier "oder", also programmierst Du "or".

> eine Gasse geben.

Aber "empty" ist das Gegenteil von "geben".
Du verlangst also, dass es beide gibt.

MfG
hjs
echo [ Do, 20 September 2007 08:36 ] [ ID #1825374 ]

Re: Formularprüfung

Hallo,

>> Ich möchte damit erreichen:
>> Wenn vk eine Stadt ist, dann muss es entweder eine Strasse oder


> Du schreibst hier "oder", also programmierst Du "or".
>
>> eine Gasse geben.
>
> Aber "empty" ist das Gegenteil von "geben".
> Du verlangst also, dass es beide gibt.

Naja, es ist ja eine Formularprüfung, also wenn etwas nicht eingegeben
ist, dann soll etwas zurückgegeben werden, deswegen prüfe ich auf empty.

also nochmals zum lesen:
if($art == "stadt" && (empty($strasse) || empty($gasse))) {
$error = true;
}

danke und lg,
erich
Erich Wagner [ Do, 20 September 2007 08:47 ] [ ID #1825375 ]

Re: Formularprüfung

Erich Wagner schrieb:
> Hat jemand einen Tipp?

Abgesehen von den bereits geposteten Tipps:

Es hilft mir bei sehr verschachteln if-Bedingungen of, anstatt von ||
oder && einfach OR oder AND zu schreiben, das macht es weniger abstrakt
=) Technisch ist es gleichwertig.


Gruß,
Habbo
bruening [ Do, 20 September 2007 08:46 ] [ ID #1825376 ]

Re: Formularprüfung

Hallo,

> if($art == "stadt" && (empty($strasse) && empty($gasse))) {
> $error = true;
> }

ich bin auf dem Schlauch gestanden, eh klar, dass das oder zu einem UND
werden sollte ;-)

Danke nd lg,
Erich
Erich Wagner [ Do, 20 September 2007 08:54 ] [ ID #1825377 ]

Re: Formularprüfung

Erich Wagner schrieb:
> Naja, es ist ja eine Formularprüfung, also wenn etwas nicht eingegeben
> ist, dann soll etwas zurückgegeben werden, deswegen prüfe ich auf empty.
>
> also nochmals zum lesen:
> if($art == "stadt" && (empty($strasse) || empty($gasse))) {
> $error = true;
> }

Du hast da einen Denkfehler drin:

In deinem Fall setzt er die Variable $error wenn entweder $strasse oder
$gasse leer ist. Du wilslt aber, dass der Fehler kommt, wenn BEIDE leer
sind, einer darf ja laut deiner Definition. Du musst also so abfragen:

<?php
if ($art == "stadt" AND empty($strasse) AND empty($gasse))
{
$error = true;
}
?>


Gruß,
Habbo
bruening [ Do, 20 September 2007 08:50 ] [ ID #1825378 ]

Re: Formularprüfung

Erich Wagner schrieb:
>
> Hallo,
>
> >> Ich möchte damit erreichen:
> >> Wenn vk eine Stadt ist, dann muss es entweder eine Strasse oder
>
> > Du schreibst hier "oder", also programmierst Du "or".
> >
> >> eine Gasse geben.
> >
> > Aber "empty" ist das Gegenteil von "geben".
> > Du verlangst also, dass es beide gibt.
>
> Naja, es ist ja eine Formularprüfung, also wenn etwas nicht eingegeben
> ist, dann soll etwas zurückgegeben werden, deswegen prüfe ich auf empty.
>
> also nochmals zum lesen:
> if($art == "stadt" && (empty($strasse) || empty($gasse))) {
> $error = true;
> }

Da gibts 'ne schöne Story:
Angenommen, eine Person trinkt gerne Kaffee: Aber immer nur schwarz
und ohne Zucker. Dann kann man dies so ausdrücken: Keine Milch (im
Kaffee)
*und*
keinen Zucker (im Kaffee)---> dann trinke ich den Kaffee. Umgewandelt
nach de Morgan: Milch (im Kaffee)
*oder*
Zucker (im Kaffee) ---> dann trinke ich den Kaffee nicht.
Beide Aussagen sind wertgleich und auch ohne Beweis einleuchtend.

Quelle: http://de.wikipedia.org/wiki/De_Morgansche_Gesetze

MfG
hjs,
der zufällig weiß, warum im ersten monolitischen IC ausgerechnet
NANDs waren.
echo [ Do, 20 September 2007 09:04 ] [ ID #1825379 ]

Re: Formularprüfung

Jan Habbo Brüning schrieb:

>Technisch ist es gleichwertig.

Nicht ganz, die or/and-Operatoren haben einen niedrigeren Rang als &&/||.

Dazwischen befinden sich noch ? und die Zuweisungsoperatoren,
$db = mysql_connect() or die();
ist also etwas anderes als
$db = mysql_connect() || die();

(Letzeres sieht zwar aus als würde es funktionieren, aber der Rückgabewert
von mysql_connect wird im Erfolgsfall in ein nutzloses true gewandelt.)

--
Wolfgang Fellger
Wolfgang Fellger [ Do, 20 September 2007 12:31 ] [ ID #1825386 ]

Re: Formularprüfung

Wolfgang Fellger schrieb:
> Jan Habbo Brüning schrieb:
>
>> Technisch ist es gleichwertig.
>
> Nicht ganz, die or/and-Operatoren haben einen niedrigeren Rang als &&/||.
>
> Dazwischen befinden sich noch ? und die Zuweisungsoperatoren,
> $db = mysql_connect() or die();
> ist also etwas anderes als
> $db = mysql_connect() || die();
>
> (Letzeres sieht zwar aus als würde es funktionieren, aber der Rückgabewert
> von mysql_connect wird im Erfolgsfall in ein nutzloses true gewandelt.)

Nagut, werden wir etwas präziser: In if-Bedingungen, wie der OP sie
konstruiert hat, sind sie gleichwertig!


Gruß,
Habbo
bruening [ Do, 20 September 2007 12:44 ] [ ID #1825387 ]

Re: Formularprüfung

On 20 Sep 2007 10:31:41 GMT Wolfgang Fellger wrote:
> Nicht ganz, die or/and-Operatoren haben einen niedrigeren Rang als &&/||.

> $db = mysql_connect() || die();

> (Letzeres sieht zwar aus als würde es funktionieren, aber der
> Rückgabewert von mysql_connect wird im Erfolgsfall in ein nutzloses
> true gewandelt.)

Das alleine ist fuer mich schon Grund genug, statt

| if($_POST["vk"] == "stadt" && (empty($_POST["strasse"]) [...]

immer

| if(($_POST["vk"] == "stadt") && (empty($_POST["strasse"]) [...]

zu schreiben. Operatoren-Rangfolgen beachten zu muessen, finde ich bei
Lesen (insbesondere ggf. beim Fehlersuchen) so ziemlich das uebelste.

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich

Freude mit Stefan, unverwüstlich und schlank!
(Sloganizer)
Stefan+Usenet [ Do, 20 September 2007 13:07 ] [ ID #1825388 ]
PHP » de.comp.lang.php.misc » Formularprüfung

Vorheriges Thema: Finden von Angaben
Nächstes Thema: Anzahl der Objekte