Probleme mit Formularversand

fredolin

Erfahrenes Mitglied
Hallo PHP Gemeinde,

so ich habe wieder mal ein Problem mit einem Kontaktformular.

Problembeschreibung:
In diesem Formular habe ich zwei Felder, die über einen Radiobutton aktiviert werden. Eine Überprüfung findet auch statt, ob die Felder leer sind oder nicht.

So wenn ich per E-Mail Kontakt anklicke, läuft das Formular ohne Fehler durch und wird versendet.
Klicke ich über den Radiobutton Kontakt per Telefon an und das Feld für die Tel.Nr erscheid, gibt die Feldüberprüfung immer einen Fehler aus und das Formular wird nicht versendet.

Das Kann ich mir nicht erklären und sitze nun einige Zeit an diesem Fehler.
Hier mal die relevanten Posting:

Hier die Fehlerüberprüfung
(Ich weiss das es auch anders geht aber so ist es nun mal)
PHP:
if(isset($_POST['senden'])){
		$ready = 1;
		
		if(empty($_POST['returncon'])){
			$ready = 0;
			$error[returncon] = 'Bitte wählen Sie aus';
		}
		
		if(empty($_POST['vorname'])){
			$ready = 0;
			$error[vorname] = 'Dein Vorname fehlt!';
		}
		
		if(empty($_POST['nachname'])){
			$ready = 0;
			$error[nachname] = 'Dein Nachname fehlt!';
		}
		
		if(!preg_match("/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-z]{2,6}$/i", $_POST['email'])){
			$ready = 0;
			$error[email] = 'Gib deine E-Mailadresse richtig ein';
		}
		
		if(!preg_match("[0-9]", $_POST['telnr'])){
			$ready = 0;
			$error[telnr] = 'Bitte eine TelefonNr. angeben';
		}
		
		if(empty($_POST['subject'])){
			$ready = 0;
			$error[subject] = 'Dein Betreff fehlt!';
		}
		
		if(empty($_POST['messages'])){
			$ready = 0;
			$error[messages] = 'Deine Nachricht fehlt!';
		}

Hier der Bereich mit dem Kontaktaufnehmen (Lasse die anderen Formularfelder weg)
PHP:
<div class="rubrik">
		<div class="logo">Wie m&ouml;chten Sie, dass wir Sie zur&uuml;ck kontaktieren?<?php echo '<br /><span class="formerror">'.$error['returncon'].'</span>' ?></div>
	<div class="text"><input type="radio" name="returncon" value="perMail" onclick="swapDiv('returnconMail');"/>&nbsp; Bitte per Mail</div>
		<div class="text"><input type="radio" name="returncon" value="perTel" onclick="swapDiv('returnconTel');" /> &nbsp; Bitte per Rückruf</div>
		<div class="clear"></div>
		<div id="returnconMail" style="display:none;">
			<div class="logo">*E-Mail Adresse:<?php echo'<br /><span class="formerror">'.$error['email'].'</span>'?></div>
			<div class="text"><input type="text" name="email" class="formmail" tabindex="1" value="<?php echo $_POST['email'] ?>" /></div>
		</div>
		<div id="returnconTel" style="display:none;">
			<div class="logo">*Telefon Nr.:<?php echo'<br /><span class="formerror">'.$error['telnr'].'</span>' ?></div>
			<div class="text"><input type="text" name="telnr" class="formmail" tabindex="1" value="<?php echo $_POST['telnr'] ?>" /></div>
		</div>
		<div class="leer"></div>
		<div class="clear"></div>
</div>
if (isset($_POST['senden']) && $ready)  
{

$mailaddy = "emailaddy";
$mailbody= "Mailinhalt";
$headers ='Mailkopfangaben';
 $send = @mail($mailaddy, $_POST['subject'], $mailbody, $headers);
  if($send){

       echo 'Mail verschickt';

  } else {

    echo 'Mail nicht verschickt';

  }
}

So kann mir einer sagen warum das Formular nicht versendet wird, wenn ich "Kontakt per Rückruf" anwähle und alle Felder ausfülle.

Der Fehler liegt, so vermute ich, das ein leere Feld in der Überprüfung ist, was dann $read=1 zurück liefert. Wie kann ich das umgehen

anke für Eure Hilfe und ich hoffe ich habe das Problem, einigermaßen gut beschrieben.

Euer Fredolin
 
Hallo,

die Lösung ist ganz einfach:

Bei deinem regulären Ausdruck zur Überprüfung der Telefonnummer fehlen die "/".
Also schreibe "/[0-9]/" anstelle von "[0-9]".
Du solltest auch mit einer if else Abfrage überprüfen welche Auswahl getroffen wurde (Tel oder Email), um nur die jeweilige Option abzufragen.
Ansonsten würde dein Skript jedesmal Email und Telefonnummer überprüfen und einen Fehler ausgeben wenn eines der Felder nicht angegeben wurde.

MfG
 
Wobei sich mir der Sinn dieser Prüfung sowieso nicht ganz erschließt. Der Ausdruck matcht, wenn im String eine Ziffer vorhanden ist...

LG
 
Da hast du Recht :)

Besser wäre eine Überprüfung der Telefonnummer durch:

PHP:
if(preg_match("~[^-\s\d/()+]~", $_POST['telnr']) || empty($_POST['telnr'])){
    $ready = 0;
    echo $error[telnr] = 'Bitte eine TelefonNr. angeben';
}

Damit wird überprüft, ob sich andere Zeichen als: Bindestriche, Leerzeichen, Zahlen, Slashes, Klammern oder Pluszeichen (alles was so eine Telefonnummer enthalten kann) in dem String befinden oder der String leer ist.

MfG
 
Wow...
Also erstmal super danke für eure Hilfe. Hatte aber heute nach dem ich hier dieses neue Thema erstellt habe auch den Lösungswegs, den Imago da vorgeschlagen hat schon umgesetzt und es klappte.

Aber dennoch alle ne riesiges Dankeschön..

So bringt es richtig Spass..
 
Zurück