php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.12.2011, 12:47  
Neuer Benutzer
 
Registriert seit: 14.09.2011
Beiträge: 12
PHP-Kenntnisse:
Anfänger
Takuto ist zur Zeit noch ein unbeschriebenes Blatt
Standard Problem: Formular mit regulären ausdrücken

hallöchen alle zusammen.

folgendes Problem:
wenn ich im formular das geburtsdatum falsch angebe zeigt er mir zwar an dass es falsch ist aber schickt die e-mail trotzdem raus... kann mir jemand sagen wo der fehler ist?

PHP-Code:
$Tel $_POST["Telefon"];
$Bday $_POST['birthday'];

if(
$_POST["submit"] == "Senden"){
    
    if(!
filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
    {
        echo 
'<p class="error2">Bitte geben sie eine gültige E-Mail Adresse an</p>';
        
$meld1 1;
    } else {
$meld1 0;}
        
    if (!
preg_match('/^\d{1,2}\.\d{1,2}\.\d{4}$/'$Bday)) 
    {
        echo 
'<p class="error2">Bitte geben sie ein gültiges Geburtsdatum an</p>';
        
$meld2 $meld1 1;
    }  else {
$meld2 0;}
        
    if(
preg_match('~[^-\s\d./()+]~'$Tel))
    {
        echo 
'<p class="error2">Bitte geben sie eine gültige Telefonnummer an</p>';
        
$meld3 $meld2 1;
    }else {
$meld3 0;}
    
    if(
                empty(
$_POST['name']) || $_POST['name'] == ' ' || 
                empty(
$_POST['strasse']) || $_POST['strasse'] == ' ' ||
                empty(
$_POST['plz']) || $_POST['plz'] == ' ' ||
                empty(
$_POST['ort']) || $_POST['ort'] == ' ' ||
                empty(
$_POST['email']) || $_POST['email'] == ' ' ||
                empty(
$_POST['birthday']) || $_POST['birthday'] == ' ' ||
                empty(
$_POST['Telefon']) || $_POST['Telefon'] == ' '  
            
) {
                echo 
'<p class="error2">Es wurden nicht alle Pflichtfelder ausgef&uuml;llt! Fehlerhafte Felder wurden Rot markiert.</p>';    
            } else {
if(
$meld3 3)

                {
                echo 
'<p class="success2">Ihre Daten konnten erfolgreich &uuml;bertragen werden.</p>';
                
$tmp "Jemand hat eine Bewerbung über Ihre Internetseite ".$weiter." aufgegeben:\n\n";
                if(
$message != $tmp)mail($webmas"Bewerbung von ".$weiter$message"From: $von<$email>");



                
                

mail$email"Bestaetigung Ihrer Bewerbung"$bestaetigung"From: $site<$webmas>");
 }}} 
ich weiß es ist wohl etwas umständlich geschrieben aber ich bin noch anfänger.

danke im voraus
Lg
Takuto ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.12.2011, 12:48  
Erfahrener Benutzer
 
Registriert seit: 28.01.2010
Beiträge: 615
PHP-Kenntnisse:
Fortgeschritten
tkausl ist in Verruf geraten
Standard

PHP-Code:
if($meld3 3
= ist der Zuweisungsoperator. Was du suchst, ist der Vergleichsoperator ==
__________________
PS: Wenn ich einen Beitrag schreibe wo NUR [php] drin steht, dann gab es wieder ein Problem mit meinem iPhone...
tkausl ist offline   Mit Zitat antworten
Alt 19.12.2011, 12:53  
Neuer Benutzer
 
Registriert seit: 14.09.2011
Beiträge: 12
PHP-Kenntnisse:
Anfänger
Takuto ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hmm danke schonmal für die antwort. Wenn ich jetzt
PHP-Code:
if($meld3 == 3
einsetze dann sendet er die email nicht mehr raus wenn alles richtig eingegeben wurde. Jemand noch nen anderen fehler gefunden.
Takuto ist offline   Mit Zitat antworten
Alt 19.12.2011, 12:56  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.630
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

PHP-Code:
if($meld3 3
Neben dem Hinweis von tkausl ist die Bedingung falsch. Im Fehlerfall ist $meld3 > 0 (aber nur wnen die Telefonnummer falsch ist), und nicht garantiert 3, und im Erfolgsfall generell 0.

Zur Verdeutlichung:
- richtige E-Mail Adresse, $meld1 = 0
- richtiges Geburtsdatum, $meld2 = 0
- richtige Telefonnummer, $meld3 = 0

Wieso soltle $meld3 also 3 sein?
Nur $meld3 zu prüfen reicht auch nicht, denn:
- richtige E-Mail Adresse, $meld1 = 0
- falsches Geburtsdatum, $meld2 = 1
- richtige Telefonnummer, $meld3 = 0

Deine Prüfung ist dann korrekt wenn:
- falsche E-Mail Adresse, $meld1 = 1
- falsches Geburtsdatum, $meld2 = 2
- falsche Telefonnummer, $meld3 = 3

Folgendes ist eleganter:
PHP-Code:
    $errors = array();
    if(!
filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
    {
      
$errors[] = 'Bitte geben sie eine gültige E-Mail Adresse an';
    } 
        
    if (!
preg_match('/^\d{1,2}\.\d{1,2}\.\d{4}$/'$Bday)) 
    {
      
$errors[] = 'Bitte geben sie ein gültiges Geburtsdatum an';
    }
        
    if(
preg_match('~[^-\s\d./()+]~'$Tel))
    {
      
$errors[] = 'Bitte geben sie eine gültige Telefonnummer an';
    }

    if(
count($errors)>0)
    {
       foreach(
$errors AS $e) {
          echo 
'<p>'.$e.'</p>';
       }
    } else {
         
//alles ok!
    

Erläuterung: Es wird ein leeres Array erzeugt und in der Variable $errors abgelegt. Jedes mal wenn ein Fehler auftritt wird dieser an das Array angehängt. Ist die Anzahl Elemente im Array nach der Fehlerüberprüfung also > 0, dann ist mindestens ein Fehler aufgetreten und alle Meldungen werden über eine Schleife ausgegeben.
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

Geändert von Dark Guardian (19.12.2011 um 13:02 Uhr).
Dark Guardian ist offline   Mit Zitat antworten
Alt 19.12.2011, 13:00  
Neuer Benutzer
 
Registriert seit: 14.09.2011
Beiträge: 12
PHP-Kenntnisse:
Anfänger
Takuto ist zur Zeit noch ein unbeschriebenes Blatt
Standard

tatsache... da is mir wohl n fehler unterlaufen klappt wunderbar dank dir.

EDIT: neue frage... wie kann ich beim regulären ausdruck des geburtstag angeben das die die maximal zahl der tage 31, die der Monate 12 und die des jahres 2011 beträgt?

Geändert von Takuto (19.12.2011 um 13:03 Uhr).
Takuto ist offline   Mit Zitat antworten
Alt 19.12.2011, 13:01  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

1.)
Deine Variablen $meld1, $meld2 und $meld3 erhalten Werte ungleich 0, wenn Fehler auftreten. Unten schreibst du "Wenn $meld3 == 3 -> mail abschicken". heisst für mich: Wenn Fehler aufgetreten sind, abschicken. Logischer wäre aber: "Wenn $meld1==0 und $meld2==0 und $meld3==0 -> abschicken" (zu deutsch: wenn keine Fehler aufgetreten sind, abschicken)

2.)
Zitat:
PHP-Code:
 if($message != $tmp)mail($webmas"Bewerbung von ".$weiter$message"From: $von<$email>"); 
Wo kommt $message her?

3.)
Schalt das Error_reporting an!

4.)
Benutz eine Mailerklasse, nicht den mail() Befehl
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 19.12.2011, 13:05  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.630
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

Zitat:
Zitat von Takuto Beitrag anzeigen
tatsache... da is mir wohl n fehler unterlaufen klappt wunderbar dank dir.
Prüfst du jetzt auf $meld3 = 0?

Dann beachte meinen Edit und den Beitrag von Istegelitz. Das ist nämlich ebenfalls für sich alleine falsch.

Zitat:
EDIT: neue frage... wie kann ich beim regulären ausdruck des geburtstag angeben das die die maximal zahl der tage 31, die der Monate 12 und die des jahres 2011 beträgt?
Die Validierung von Datusmangaben wurde bereits ausführlich mit diversen Lösungaansätzen diskutiert:
http://www.php.de/php-einsteiger/841...tml#post623108 (deutsche Datumseingabe mit strtotime umwandeln)
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".
Dark Guardian ist offline   Mit Zitat antworten
Alt 19.12.2011, 13:10  
Neuer Benutzer
 
Registriert seit: 14.09.2011
Beiträge: 12
PHP-Kenntnisse:
Anfänger
Takuto ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich hab ne neue variable gemacht in der ich meld 1, 2 und 3 zusammenzähle und wenn dort 0 rauskommt soll er die mail abschicken.

"4.) Benutz eine Mailerklasse, nicht den mail() Befehl" <- was ist ne mailerklasse?


neue frage... wie kann ich beim regulären ausdruck des geburtstag angeben das die die maximal zahl der tage 31, die der Monate 12 und die des jahres 2011 beträgt?
Takuto ist offline   Mit Zitat antworten
Alt 19.12.2011, 20:54  
Erfahrener Benutzer
 
Benutzerbild von fireweasel
 
Registriert seit: 20.03.2010
Beiträge: 474
PHP-Kenntnisse:
Fortgeschritten
fireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblick
fireweasel eine Nachricht über ICQ schicken fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken fireweasel eine Nachricht über Skype™ schicken
Standard

Eine Mailer-Klasse, ist eine fertige Klasse, die den ganzen komplizierten Kleinkram, der beim E-Mail-Versenden so auftritt, erledigt, ohne dich damit zu belasten. Bspw.:

http://swiftmailer.org/ (kurze deutschsprachige Einführung)

http://www.phpclasses.org/package/26...s-for-PHP.html

http://squirrelmail.org/

(Die Reihenfolge stellt keine Wertung dar.)


Zitat:
Zitat von Takuto Beitrag anzeigen
EDIT: neue frage... wie kann ich beim regulären ausdruck des geburtstag angeben das die die maximal zahl der tage 31, die der Monate 12 und die des jahres 2011 beträgt?
Erstmal: Es ist möglich, per Regex eine Datumsangabe zu validieren, wenn sie im richtigen Format vorliegt. Ich bin mir nur nicht sicher, ob du diesen Regex auch verstehst, obwohl er nicht wirklich kompliziert ist (Die Datumserkennung selbst besteht nur aus ein paar alternativen Subpatterns). Deswegen solltest du dir lieber die Funktionen zur Datumsvalidierung anschauen, die PHP eingebaut hat:

http://php.net/manual/en/intldateformatter.parse.php

http://php.net/manual/en/datetime.co...truct-examples

http://php.net/manual/en/function.checkdate.php#90345

http://php.net/manual/en/function.strtotime.php

Geändert von fireweasel (19.12.2011 um 21:08 Uhr).
fireweasel ist offline   Mit Zitat antworten
Alt 19.12.2011, 21:06  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Zitat:
Zitat von Dark Guardian Beitrag anzeigen
Folgendes ist eleganter:
PHP-Code:
    $errors = array();
    
/* ... */

    
if(count($errors)>0)
    {
       foreach(
$errors AS $e) {
          echo 
'<p>'.$e.'</p>';
       }
    } else {
         
//alles ok!
    

hmm..
PHP-Code:
$errors false;

/* ... */

if ( $errors 
   echo 
join(
      
array_map(function ($item) { 
         return 
'<p>'.$item.'</p>'
      }, 
$errors)
   );
else {
   
// alles ok

Aber beim rest stimm ich in punkte eleganz zu ^^
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Dynamisches Formular - Problem mit Leerzeichen Blinddog PHP Einsteiger 5 09.09.2011 09:41
Ich verstehe das mit den regulären Ausdrücken einfach nicht... Lapje PHP Einsteiger 9 29.07.2011 18:57
[Erledigt] Formular Problem nicht zwingende Checkboxen dynamischer Sammel DB-Eintrag supervision PHP Einsteiger 4 28.07.2011 08:07
[Erledigt] Problem mit regulären Ausdrücken (preg_match_all) ED Markus PHP Tipps 2010 6 30.08.2010 22:41
[Erledigt] Probleme mit regulären Ausdrücken Sniper_Kotaro PHP Tipps 2009 4 13.12.2009 16:22
[Erledigt] PHP Formular =&gt; Problem =&gt; Email kommt nicht an... benschiaa PHP Tipps 2009 21 25.03.2009 11:54
[Erledigt] Anfänger Problem: Formular j.j PHP Tipps 2009 6 07.03.2009 16:46
Assoziatives Array und ctype_digit Problem im Formular. Radik PHP Tipps 2009 6 16.02.2009 21:58
[Erledigt] Formular Problem (Datenbank Abfrage) halekin PHP Tipps 2009 2 14.01.2009 12:45
Problem mit Formular, Daten an datenbank senden Aurec PHP Tipps 2008 11 20.11.2008 18:17
Problem mit IF und Formular Black-Devil PHP Tipps 2008 12 03.03.2008 17:54
2 Probleme mit Regulären Ausdrücken Kein Genie PHP Tipps 2006 13 08.05.2006 20:52
[Erledigt] Problem mit dem Füllen einer Tabelle über Formular PHP Tipps 2006 18 10.01.2006 12:51
Problem mit quoting und regulären Ausdrücken PHP-Fortgeschrittene 2 19.08.2004 15:00
Problem mit Formular + Antwortseite PHP Tipps 2004 2 22.07.2004 09:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
fehlerüberprüfung im formular mit php mail adresse

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:31 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum