PHP Problem mit Bedingungen

mR.fLopPy

Erfahrenes Mitglied
Hallo!

Ich habe folgendes Problem. Ich habe ein Kontaktformular wo es mehrere Pflichtfelder gibt. Ich möchte für jedes Pflichtfeld eine Abfrage starten, dass eine Fehlermeldung ausgegeben werden soll wenn dieses Feld leer ist. Ich möchte jedoch nicht eine allgemeine Fehlermeldung zurück schreiben sondern explizit darauf eingehen welches Feld leer ist.

Wenn kein Feld leer ist soll er sämtliche daten auslesen und dann per Mail weiter senden.

Mein Problem ist nun wie ich das mit den Bedingungen löse. Ich habe 3 Pflichtfelder und weiß nicht wie ich das verpacken soll dass wenn keine der 3 if-bedingungen vorkommt.

Mein Code sieht derzeit so aus:

if (feld1 == "")
echo "feld1 leer";
if (feld2 == "")
echo "feld2 leer";
if (feld3 == "")
echo "feld3 leer";

Ich danke für eure Hilfe!
 
Ich bin abends immer ein wenig doof - aber habe nicht wirklich verstanden wo das Problem ist?

Du hast doch schon alle drei behandelt - was willst du denn jetzt noch?
Vll wäre es auch noch gut wenn du die Funktion trim auf deine Variablen anwendest.

Also

PHP:
if (trim(feld1) == "")
     echo "feld1 leer";
if (trim(feld2) == "")
     echo "feld2 leer";
if (trim(feld3) == "")
     echo "feld3 leer";

Das würde erstmal Leerzeichen löschen, wenn jemand einfach nur ein Leerzeichen reinschreibt.

Wenn es das Problem war, wie du weiter machen musst, könntest du es z.B. so machen
PHP:
if(trim(feld1)  == "" OR trim(feld2)  == "" OR trim(feld3)  == "")   //Wenn einer Der Felder leer ist, werden nur die Fehlermeldungen ausgegeben.
{
if (trim(feld1) == "")
     echo "feld1 leer";
if (trim(feld2) == "")
     echo "feld2 leer";
if (trim(feld3) == "")
     echo "feld3 leer";
}
else
{
//Wird ausgeführt wenn alles ausgefüllt ist.
}

Oder wo war das Problem?^^ :D
 
PHP:
$error = 0;
if(empty(trim($feld1)))
{
  echo 'lalala';
  $error = 1;
}
if(empty(trim($feld3)))
{
  echo 'lalala 2';
  $error = 1;
}
//........

if($error != 1)
{
  //absenden
}
 
Jup genau so eine Lösung habe ich auch gerade eben mir ausgedacht (bin auch um diese Uhrzeit ein wenig daneben ;-)), aber ich bin damit irgendwie nicht zufrieden. Schöner wäre das sicherlich mit einer while-Schleife in Kombination mit boolean oder?

Nur dafür bin ich ehrlich gesagt zu blöd. Ich habe noch nie boolean eingesetzt, von daher weiß ich auch nicht wie man das korrekt hin schreibt.

In meinem Fall, da es nur 3 Felder sind, ist deine/meine Lösung wohl total okay(?) aber was wäre wenn es mehrere Felder gibt. Irgendwann würde ja die if-Bedingung wo alle "feld1" or "feld" ... ellen lang werden.

Und so nebenbei gefragt. wofür ist das trim eigentlich? Ich hab es bis dato noch nie verwendet.

---
@wod2008: Oi.. darauf hätte ich eigentlich auch kommen können. Der Lösungsansatz ist echt gut!

Allgemeine Frage: Ist die while-schleife mit boolean bei dem Problem einsetzbar? Bzw. welche Lösung ist in diesem Fall die beste? Das würde mich brennend interessieren und über einen Lösungsansatz mit while + boolean freuen, da ich das noch nie in der Praxis eingesetzt habe.

Dank euch jedenfalls für die Hilfe!
 
Zuletzt bearbeitet:
Wie ich schon gesagt hatte, ist trim eine Funktion, mit der du Leerzeichen vorne und hinten vom String löschen kannst.
Wenn also jemand eine Angabe wie " " macht - was du ja sicher nicht willst werden die leerzeichen gelöscht und zu "" umgewandelt.

Also da eine While-Schleife zu machen - keine ahnung ob das Sinnvoll ist.
Du könntest natürlich deine Daten die Pflicht sind in ein extra Array Speichern.

PHP:
$pflichtfelder = array();
$pflichtfelder[] = $Feld1;
$pflichtfelder[] = $Feld2;
$pflichtfelder[] = $Feld3;
.
.
.


foreach($pflichtfelder as $feld) //Schreibt die einzelnen Einträge des Arrays in die Variable $feld
{
if(trim($feld) == "")
echo "War wohl nichts";
}

Macht hier natürlich nicht wirklich Sinn:D


Edit: Sry hatte dein Beitrag noch nicht gesehen. Und empty kann man bei mir natürlich ergänzen^^
 
Zuletzt bearbeitet:
Ich danke euch beiden sehr für die Hilfestellung und den zusätzlichen Informationen. Die trim-Funktion ist wirklich praktisch. An diesen Fall hatte ich nämlich noch gar nicht gedacht.

Bin mehr als zufrieden!
 
Moin, wieder mal eine Möglichkeit, eine meiner Liebligsfunktionen zu propagieren :D

[phpf]filter_input_array[/phpf]


Zugegeben, wenn man nur prüfen will, ob etwas leer ist, ist sie vielleicht etwas überflüssig, aber meist will man mehr prüfen, und das bläst den Code riesig auf.

Die nennenswertesten Vorteile:
  1. Sie hat diverse Filtermöglichkeiten eingebaut, welche man selbst erst entwickeln müsste
  2. der Filterarray lässt sich prima auslagern, so dass man seinen Programmcode nicht mit solchen Nebensächlichkeiten vollstopfen muss.
  3. Die Anwendung selbst kann mit den bereits gefilterten Daten arbeiten....nichts ungewolltes passiert die Filter.
    Sofern die Filter richtig benutzt werden, ein ungeheures Sicherheitsplus :)


Hier mal ein simples Beispiel zum Appetitanregen
Code:
<form>
<br/><input name="feld_mail"/>Mail   
<br/><input name="feld_int"/>Integer
<br/><input name="feld_string"/>String
<br/><input type="submit"/>
</form>

<?php

if(!empty($_GET))
{
  $get=filter_input_array(INPUT_GET,
                          array(
                                'feld_mail'  => array(
                                                     'filter' =>  FILTER_VALIDATE_EMAIL,
                                                     'flags'  =>  FILTER_NULL_ON_FAILURE,
                                                     ),
                                'feld_int'   => array(
                                                     'filter' =>  FILTER_VALIDATE_INT,
                                                     'flags'  =>  FILTER_NULL_ON_FAILURE,
                                                     ),
                                'feld_string'=> array(
                                                     'filter'  =>  FILTER_VALIDATE_REGEXP,
                                                     'flags'  =>  FILTER_NULL_ON_FAILURE,
                                                     'options' =>  array(
                                                                          'regexp'=>'/\S/' 
                                                                        )
                                                     )
                              )
                         );
   $failure=array_keys($get,null);

    echo (!empty($failure))
          ?'folgende Felder waren fehlerhaft:'.implode(',',$failure)
          :'alles bestens'; 
}
?>
 
@Sven: Wow, danke für deinen Beitrag. Ich muss zugeben dass ich noch bei den Anfängen von PHP bin. Im Moment sind einige Dinge noch recht unverständlich für mich. Ich gehe mal davon aus das ich selbst nachdem ich das Einsteiger-Buch fertig gelesen habe meine expertise nicht ausreichen wird um alles zu verstehen.

Dennoch freue ich mich über deine mögliche Lösung und da ich ein paar Experten kenne können mir diese (sofern ich meinen Horizont um das o.g. Buch erweitert habe) das eventuell im Detail erklären. *g*

Allenfalls komme ich auf dich zurück. Neugierde kann ein Fluch sein! ;)

Und wenn ich mal so anmerken darf. Mir käme da so einiges in den Sinn das ich überprüfen möchte bei einem Kontaktformular und zwar ob die angegebene TLD existiert ,das @-Zeichen vorkommt inkl. Dot gesetzt wurde, Umlaute verwendet wurden, etc ...
Aus Zeitdruck jedoch muss ich vorerst darauf verzichten und an den Verstand der Internet-User appellieren.
 
Zurück