PHP Problem in abgeändertem Kontaktformular

Gesperrt
briana
Beiträge: 2
Registriert: Fr 8. Jan 2010, 16:50
Kontaktdaten:

PHP Problem in abgeändertem Kontaktformular

Beitrag von briana »

Hey Jungs

Ich habe ein Problem, bei dem ihr mir sicher helfen könnt.

Ich habe das Standard Kontaktformular einwenig abgeändert um ein Bestellformular zu basteln.

Bei der Menge möchte ich abfragen, dass mindestens 1 Feld nicht leer ist.

Für ein Feld ist das ja kein Problem z.B.

Code: Alles auswählen

if ($_POST['(PLZ/Ort'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie Ihre PLZ/Ort ein!")."<br/>";
    }
Nun habe ich aber von PHP überhaupt keine Ahnung und hatte im Internet einwenig recherchiert und bin auf das "or" Argument gestossen.

Also dachte ich mir ich löse das ganze so:

Code: Alles auswählen

if ($_POST['artikel1' or 'artikel2' or 'artikel3'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie mindestens einen Artikel ein!")."<br/>";
    }
Leider führt das überhaupt nicht zum Erfolg!

Ich will ja abfragen wenn artikel 1 oder artikel 2 oder artikel 3 usw. nicht leer ist da weiter sonst die Meldung "Bitte geben Sie mindestens einen Artikel ein!".

Ich hab kein Plan wie ich das lösen könnte.

Kann mir jemand bitte helfen?

Danke

Briana
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: PHP Problem in abgeändertem Kontaktformular

Beitrag von Oldperl »

Hallo,

das geht so auch nicht, lies dir mal folgenden Artikel durch :arrow: http://www.schattenbaum.net/php/operatoren3.php

Gruß aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
idea-tec
Beiträge: 1242
Registriert: Do 19. Sep 2002, 14:41
Wohnort: Dichtelbach
Kontaktdaten:

Re: PHP Problem in abgeändertem Kontaktformular

Beitrag von idea-tec »

mach es so:

Code: Alles auswählen

if ($_POST['artikel1']=="" and $_POST['artikel2']=="" and $_POST['artikel3']=="") {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie mindestens einen Artikel ein!")."<br/>";
    }
Das wird dich jetzt sicher verwirren, ABER:
Wenn in ALLEN (=> UND) 3 Feldern NICHTS steht, dann ist dies ein Fehler, denn wenn in mindestens 1 Feld etwas steht passt es ja!!!

Möchtest du verhindern, dass jemand LEERzeichen eingeben kann verwende dies:

Code: Alles auswählen

if (trim($_POST['artikel1'])=="" and trim($_POST['artikel2'])=="" and trim($_POST['artikel3'])=="") {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie mindestens einen Artikel ein!")."<br/>";
    }
So ist es für einen Anfänger wahrscheinlich schon vewirrend, für einfache Zwecke jedoch ausreichend genug.
MfG, Karsten
Nicht Können bedeutet nicht, dass man etwas nicht beherrscht, sondern lediglich, dass man sich nicht traut es zu tun ;-)
| Internet | Ihr Logo deutschlandweit auf T-Shirts |
Diplomatie: Jemanden so in die Hölle zu schicken, dass er sich auf die Reise freut!!! ;-)
DerFrank
Beiträge: 72
Registriert: Do 17. Dez 2009, 12:37
Kontaktdaten:

Re: PHP Problem in abgeändertem Kontaktformular

Beitrag von DerFrank »

briana hat geschrieben: Also dachte ich mir ich löse das ganze so:

Code: Alles auswählen

if ($_POST['artikel1' or 'artikel2' or 'artikel3'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie mindestens einen Artikel ein!")."<br/>";
    }
Leider führt das überhaupt nicht zum Erfolg!
Briana
Da ist ein Syntaxfehler drin.
if ($_POST['artikel1' or 'artikel2' or 'artikel3'] == '') {
$noerrors = false;
$msg .= mi18n("Bitte geben Sie mindestens einen Artikel ein!")."<br/>";
}
Das wäre da schon richtiger. hehehe Richtiger ist gut, was?!
if ($_POST['artikel1'] == "" or $_POST['artikel2'] == "" or $_POST['artikel3'] == '") {
$noerrors = false;
$msg .= mi18n("Bitte geben Sie mindestens einen Artikel ein!")."<br/>";
}
Auf Deine Werte kannst Du für artikel1 über $_POST['artikel1'], für artikel2 über $_POST['artikel2'] usw. zugreifen. Ein $_POST['artikel1' or blablabla] gibt es nicht.

http://www.schattenbaum.net ist immer eine Reise wert. Die Seite ist sehr gut und anschaulich beschrieben. Du hast ein wenig Probleme mit der PHP-Syntax. Da würde ich bei http://www.php.net vorbei sehen.

Was ideatec Dir versucht zu erklären, ist vom Ansatz her schon mal nicht schlecht. Nur sein AND ist Blödsinn! ;)

Ich rate Dir aber im ersten Schritt dazu, Dir ein wenig Ordnung zu schaffen. Im Code. Dann klappt das auch meist im Kopf. Sprich: Prüfe zu Beginn Deine Werte. Nicht erst in den Funktionen. OK?!

Zuerst einmal schlau machen, welche Typen es in PHP gibt. http://www.php.net/manual/de/language.types.intro.php

Ich arbeite ganz gerne so, dass ich mir eine VarNamen entsprechend des Typen, den ich erwarte, aussuche. Wobei xy Dein Pseudonym/Kürzel sein könnte.

Code: Alles auswählen

$xyBooName = True;     //Boolean
$xyStrName = "";       //String
$xyIntName = 7;        //Integer
$xyFloName = 1.2;      //Float
$xyArrName = array();  //Array
$xyObjName = new foo;  //Object
Jetzt siehst Du auf den ersten Blick, was Du da eigentlich für einen Wert in der Var erwartest. Das kannst Du auch immer schön mit var_dump($foo); prüfen.

Nun weiß ich nicht, ob Dein "Artikel1" nun ein String sein soll, oder ein Integer. Dementsprechend kannst Du Dir u.U. idea-tec's trim() auch noch sparen.
http://php.net/manual/en/function.trim.php

Code: Alles auswählen

$meinStrName = (isset($_POST['artikel1']) && !empty($_POST['artikel1'])) ? $_POST['artikel1'] : false;
Diese Schreibweise ist eine andere Form von if...else. Wenn die Bedingung vor dem ? erfüllt wird, gilt der Wert nach dem ?, ansonsten gilt der Wert nach dem :.

http://de.php.net/manual/en/function.isset.php
http://de.php.net/manual/en/function.empty.php
Das ! vor empty bedeutet NOT, also Nicht Leer.

Jetzt kann ich mit meinen Vars, hier $meinStrName, arbeiten und kann mir $_POST sparen. In Deinem Fall:
if (!artikel1 || !artikel2 || $artikel3) {
$xyStrErrorMsg = "Bitte alle Artikel angeben";
}
Das || (nennt man Pipe) ist eine andere Schreibweise von OR.

In diesem Zusammenhang möchte ich Dir diesen Artikel ans Herz legen. http://www.phpbuddy.eu/formulare-verarb ... lagen.html
aitsu open source cms framework für contenido bei googlecode...
idea-tec
Beiträge: 1242
Registriert: Do 19. Sep 2002, 14:41
Wohnort: Dichtelbach
Kontaktdaten:

Re: PHP Problem in abgeändertem Kontaktformular

Beitrag von idea-tec »

DerFrank hat geschrieben:Was ideatec Dir versucht zu erklären, ist vom Ansatz her schon mal nicht schlecht. Nur sein AND ist Blödsinn! ;)
Hi Frank,
Dann schick ich dich noch einmal in die LOGIK-Schule, denn, NUR wenn ALLE 3 Felder LEER sind, ist es ein ERROR!!!!
Ergo gilt folgendes:

AND-Regel:
artikel1 = "1", artikel2 = "1", artikel3 = "1" => KeIn Fehler
artikel1 = "", artikel2 = "1", artikel3 = "1" => KeIn Fehler
artikel1 = "1", artikel2 = "", artikel3 = "1" => KeIn Fehler
artikel1 = "1", artikel2 = "1", artikel3 = "" => KeIn Fehler
artikel1 = "", artikel2 = "", artikel3 = "1" => KeIn Fehler
artikel1 = "", artikel2 = "1", artikel3 = "" => KeIn Fehler
artikel1 = "1", artikel2 = "", artikel3 = "" => KeIn Fehler
artikel1 = "", artikel2 = "", artikel3 = "" => FEHLER

OR-Regel:
artikel1 = "1", artikel2 = "1", artikel3 = "1" => KeIn Fehler
artikel1 = "", artikel2 = "1", artikel3 = "1" => Fehler
artikel1 = "1", artikel2 = "", artikel3 = "1" => Fehler
artikel1 = "1", artikel2 = "1", artikel3 = "" => Fehler
artikel1 = "", artikel2 = "", artikel3 = "1" => Fehler
artikel1 = "", artikel2 = "1", artikel3 = "" => Fehler
artikel1 = "1", artikel2 = "", artikel3 = "" => Fehler
artikel1 = "", artikel2 = "", artikel3 = "" => Fehler

Wenn man also die Ausführung im öffnenden Beitrag richtig liest und noch wichtiger, ihn auch versteht, ist es kein Fehler mehr sobald mindestens 1 Feld mit einem Wert befüllt ist
Und auch das trim() sollte er sich nicht sparen, außer er schaut nach ob es integer ist, da dieses Feld LOGISCHerweise ein integer sein muss, da hier eine Menge übergeben wird, wie ebenfalls aus dem eröffnenden Beitrag deutlich zu erkennen ist.

Ich find es voll geil, wenn Leute nicht verstehen was sie lesen und dann einen auf wichtig machen, riesen Beitrag und dabei nur Stuss schreiben.
MfG, Karsten
Nicht Können bedeutet nicht, dass man etwas nicht beherrscht, sondern lediglich, dass man sich nicht traut es zu tun ;-)
| Internet | Ihr Logo deutschlandweit auf T-Shirts |
Diplomatie: Jemanden so in die Hölle zu schicken, dass er sich auf die Reise freut!!! ;-)
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: PHP Problem in abgeändertem Kontaktformular

Beitrag von Oldperl »

idea-tec hat geschrieben:Ich find es voll geil, wenn Leute nicht verstehen was sie lesen und dann einen auf wichtig machen, riesen Beitrag und dabei nur Stuss schreiben.
Man kann es sicherlich auch etwas netter Formulieren und nicht alles im Beitrag von DerFrank ist so pauschal "nur Stuss", aber Karsten hat von der Sache her Recht.
briana hat geschrieben:Bei der Menge möchte ich abfragen, dass mindestens 1 Feld nicht leer ist.
Hier ist definitiv die Verwendung von or oder || richtig, wobei man in diesem Fall beide nehmen kann, da hier die Rangfolge der Operatoren keine Auswirkung auf das gewünschte Ergebnis haben (siehe :arrow: http://www.php.net/manual/de/language.o ... edence.php)

Gruß aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
idea-tec
Beiträge: 1242
Registriert: Do 19. Sep 2002, 14:41
Wohnort: Dichtelbach
Kontaktdaten:

Re: PHP Problem in abgeändertem Kontaktformular

Beitrag von idea-tec »

Oldperl hat geschrieben:Hier ist definitiv die Verwendung von or oder || richtig, wobei man in diesem Fall beide nehmen kann, da hier die Rangfolge der Operatoren keine Auswirkung auf das gewünschte Ergebnis haben
Nein, ist nicht, da es auch eine Anzahl "n" Artikel geben kann.

Am Ende braucht er eh eine Schleife in der er hochzählt, da er schreibt:
wenn artikel 1 oder artikel 2 oder artikel 3 usw. nicht leer ist ...

Aber egal ... macht was ihr wollt!!! ;-)
Bis dahin könnt ihr euch das mal ansehen und LERNEN!!! http://194.25.14.46/valletto/test1.php
Sorry, aber da kann ich nicht mehr anders :twisted:
MfG, Karsten
Nicht Können bedeutet nicht, dass man etwas nicht beherrscht, sondern lediglich, dass man sich nicht traut es zu tun ;-)
| Internet | Ihr Logo deutschlandweit auf T-Shirts |
Diplomatie: Jemanden so in die Hölle zu schicken, dass er sich auf die Reise freut!!! ;-)
DerFrank
Beiträge: 72
Registriert: Do 17. Dez 2009, 12:37
Kontaktdaten:

Re: PHP Problem in abgeändertem Kontaktformular

Beitrag von DerFrank »

Oldperl hat geschrieben:Man kann es sicherlich auch etwas netter Formulieren und nicht alles im Beitrag von DerFrank ist so pauschal "nur Stuss", aber Karsten hat von der Sache her Recht.
Von welcher Sache her? ;)
aitsu open source cms framework für contenido bei googlecode...
briana
Beiträge: 2
Registriert: Fr 8. Jan 2010, 16:50
Kontaktdaten:

Re: PHP Problem in abgeändertem Kontaktformular

Beitrag von briana »

Hallo Jungs

Ich danke euch. Hab mir vorallem mal die geposteten Links durchgelesen und versucht zu verstehen ;-) Danke.

Noch als kurzes Feedback:

idea-tec hatte natürlich recht mi dem "and" Argument. Wenn ich so darüber nachdenke auch absolut logisch. Mit "or" kann es nicht funktionieren.

Das mit dem Syntaxfehler habe ich nun auch begriffen ;-) Danke. Jetzt ist es sogar für mich verständlich warum ich das so machen musste. Sogar das mit trim habe ich begriffen. Ausserdem habe ich die Abfrage noch mit "isnumeric" ergänzt. Das Script ist jetzt wunderbar geworden dank eurer Hilfe.

Eine kleine Frage habe ich noch...

Wenn ich jetzt das Mail bekomme, werden natürlich alle Artikel, auch wenn keine Zahl hinter dem Artikel steht mitgesendet, was natürlich nicht sehr Leserfreundlich ist. Gibt es die Möglichkeit mit einem String diejenigen Felder aus dem E-Mail zu entfernen welche nicht ausgefüllt wurden?

Bzw. funktioniert das?...
Edit: QUATSCH... das funktioniert überhaupt nicht!

Code: Alles auswählen

if ($_POST['artikel1']=="" {
echo 'display:none;';
}
Das müsste ich dann wohl wiederum für jeden einzelnen Artikel machen oder? Weil hier macht es keinen Sinn mit Operatoren zu arbeiten?

Ich will ja eine Abfrage machen, "wenn keinen Eintrag im Artikel, dann display:none.

Was meint ihr?

Briana
Gesperrt