Formular nur bei korrekter Telefonnummer versenden

bo-Biggi

Grünschnabel
Ich kämpfe zur Zeit mit der Erstellung eines Formulares!
Im PHP-Bereich bin ich Anfänger - hab' einen VHS-Kurs gemacht und so noch ein bißchen angelernt.
Mein Formular funktioniert so weit auch ganz gut - allerdings habe ich als Pflichtfeld u.a. die Telefonnummer, die vorher auf Richtigkeit geprüft werden soll.
Wenn ich jetzt die anderen Pflichtfelder nicht ausfülle, sagt er mir auch, dass die Tel.-Nr. nicht stimmt - sobald aber alles ausgefüllt ist, ist ihm die fehlerhafte Tel.-Nr. egal und das Formular wird mir per Mail zugeschickt.
Wäre super, wenn mir jemand sagen könnte, wie ich das Problem lösen kann :confused:

PHP:
<?php
   $Wer = $_POST["wer"];
   $Name = $_POST["name"];
   $Strasse = $_POST["strasse"];
   $Plz = $_POST["plz"];
   $Ort = $_POST["ort"];
   $Tel = $_POST["telefon"];
   $Mail = $_POST["mail"];
   $Info = $_POST["Info"];
   $Nachricht = $_POST["nachricht"];

$text = $Wer."\n Name: ".$Name."\n Str.: ".$Strasse."\n Plz: ".$Plz."\n Ort: ".$Ort."\n Tel: ".$Tel."\n Mail: ".$Mail."\n Woher: ".$Info."\n Nachricht: ".$Nachricht."\n IP-Adresse: ". $_SERVER['REMOTE_ADDR'];

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= "Content-Type: text/plain; charset = \"UTF-8\";\n";
$headers .= "Content-Transfer-Encoding: 8bit\n";
$headers .= "\n";



if (empty ($Wer) == TRUE OR
         empty ($Name) == TRUE OR
            empty ($Tel) == TRUE
    )
{
    echo '
     <form name="kontaktformular" id="left" method="POST" action="./formular.php">
     <p>';

echo    '<input type="hidden" name="wer" value="" />';


  if ($Wer == 'Hr') {
     echo '<input type="radio" name="wer" value="Hr" id="wer" checked="checked"/>Herr* ';
} else  {
     echo '<input type="radio" name="wer" value="Hr" id="wer"/>Herr* ';
}

  if ($Wer == 'Fr') {
     echo '<input type="radio" name="wer" value="Fr" id="wer" checked="checked"/>Frau* ';
} else  {
     echo '<input type="radio" name="wer" value="Fr" id="wer"/>Frau* ';
}

  if ($Wer == 'Fa') {
     echo '<input type="radio" name="wer" value="Fa" id="wer" checked="checked"/>Firma*';
} else  {
     echo '<input type="radio" name="wer" value="Fa" id="wer"/>Firma*';

  if ($Wer == '') {
      echo '<br />Bitte w&auml;hlen Sie ein Feld aus!';
  }
}




echo' <br />
       <p>Name:*<br />
    <input type="text" size="50" name="name" value="'.$Name.'"/></p> ';
    if (empty ($Name) == TRUE)
    {
        if($_POST['schon_gesendet'] == "ja")
          {
              echo "<p>- Bitte tragen Sie oben Ihren Namen ein -</p>";
          }
    }

echo'    <p>Stra&szlig;e:<br />
    <input type="text" size="50" name="strasse" value="'.$Strasse.'"/></p>';


echo '    <p>PLZ: <br />
    <input type="text" size="50" name="plz" value="'.$Plz.'"/></p>';


echo '    <p>Ort:<br />
    <input type="text" size="50" name="ort" value="'.$Ort.'"/></p>';


echo '    <p>Tel.:*<br />
    <input type="text" size="50" name="telefon" value="'.$Tel.'"/></p>';

if ( preg_match('#[^0-9\+\-\040/]#', $Tel) )
    {
	echo 'Bitte geben Sie eine g&uuml;ltige Tel.-Nr. ein';
    }
    else { }

    if (empty ($Tel) == TRUE)
    {
           if($_POST['schon_gesendet'] == "ja")
          {
              echo "<p>- Bitte tragen Sie oben Ihre Telefon-Nummer ein -</p>";
          }
    }







echo '    <p>E-Mail:<br />
    <input type="text" size="50" name="mail" value="'.$Mail.'"/></p>';
  if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/', $Mail))
  {  }
  else {
	echo 'Bitte pr&uuml;fen Sie Ihre Mail-Adresse!';
}


echo '
<br />
    <h2>Bitte f&uuml;llen Sie alle Pflichtfelder* aus</h2><br />
    <p>Um unseren Service zu verbessern, w&uuml;rden wir gerne wissen, wie Sie auf uns aufmerksam wurden: <br />  ';

echo    '<input type="hidden" name="Info" value="" />';

echo'    <input type="radio" name="Info" value="Werbung"';
  if ($Info == 'Werbung')
  {
     echo 'checked="checked"/>durch Werbung ';
   }
   else  {
     echo '<input type="radio" name="Info" value="Werbung"/>durch Werbung ';
     }

echo'    <input type="radio" name="Info" value="Internet"';
  if ($Info == 'Internet')
  {
     echo 'checked="checked"/>&uuml;ber das Internet ';
   }
   else  {
     echo '<input type="radio" name="Info" value="Internet"/>&uuml;ber das Internet ';
     }


echo'    <input type="radio" name="Info" value="Dritte"';
  if ($Info == 'Dritte')
  {
     echo 'checked="checked"/>durch Bekannte oder Verwandte ';
   }
   else  {
     echo '<input type="radio" name="Info" value="Dritte"/>durch Bekannte und Verwandte';
     }

echo' </p> <br />

    <p>
    Hier ist Platz f&uuml;r Ihre Nachricht - wir rufen gern zur&uuml;ck:  <br />
    <textarea name="nachricht" cols="60" rows="10"  />'.$Nachricht.'</textarea>
    </p>
    <br />

    <input type="hidden" name="schon_gesendet" value="ja" /><br />

    <p> <input type="submit" value="Senden"/> </p>
    </form> ';

}

else
{
mail ("mail@mail.de", "Kontaktformular-Nachricht", $text, $headers );

switch ($Wer)
  {
  case "Hr":
      echo "<p>Vielen Dank f&uuml;r Ihre Nachricht Herr " . $Name . "!<br/>";
      echo "<br />";
      echo "Wir werden uns in K&uuml;rze mit Ihnen in Verbindung setzen";
    break;
  case "Fr":
      echo "<p>Vielen Dank f&uuml;r Ihre Nachricht Frau " . $Name . "!<br/>";
      echo "<br />";
      echo "Wir werden uns in K&uuml;rze mit Ihnen in Verbindung setzen";
    break;
  default:
      echo "<p>Vielen Dank f&uuml;r Ihre Nachricht!<br/>";
      echo "<br />";
      echo "Wir werden uns in K&uuml;rze mit Ihnen in Verbindung setzen";
   }

}

?>
 
Da bietet sich der PHP-Befehl filter_input() oder filter_input_array() geradezu an.
Ein FILTER_VALIDATE_REGEXP um die Telefonnummer zu validieren.
 
Boah, das ist aber mal ne schnelle Antwort******!
Wie gesagt, so ganz fitt bin ich mit dem php nicht - wie setze ich das denn in meinem Fall um und an welche Stelle muß das.
Auf alle Fälle vielen Dank für die Hilfe!
 
Ich hab das Script nur überflogen, aber hier stimmt m.M.n etwas nicht:
PHP:
if ( preg_match('#[^0-9\+\-\040/]#', $Tel) ) 
{ 
    echo 'Bitte geben Sie eine g&uuml;ltige Tel.-Nr. ein'; 
}
Wenn der String passt, dann gibst du eine Fehlermeldung aus. Eventuell !preg_match draus machen.
 
Lime, ich habe das jetzt so geändert, aber das Problem ist leidert trotzdem das selbe.

Und nach diesem filter_input() habe ich mal gestöbert - ich glaub, dass übersteigt momentan meine php-Fähigkeiten ;)
 
Der Reguläre Ausdruck ist fraglich.

Eine Ziffer als Textanfang
dann ein +
dann ein -
dann 040
dann irgendwas was nicht weiter definiert ist.

Eine solche Telefonnummer müsste so aussehen '4+-0401234567' Ich geh mal davon aus, dass da etwas falsch ist.
Wie soll eine gültige Telefonnummer aussehen? für mich als Schweizer kämen die folgenden Versionen in Frage

0521234567
052 123 4567
052 123 45 67
++521234567
++52 123 45 67
041(0)52 123 45 67
etc.
 
Ich hab gestern meinen Laptop neu aufgesetzt... war mal Zeit, jetzt fehlen mir noch etliche Programme. Wenn ich notepad++ wieder drauf hab, schau ichs mir mal genauer an.

Und was Yaslaw schon sagte, irgendwas stimmt da hinten und vorne nicht...
 
Darf ich das ganze mal aus Usability-Sicht beleuchten? Geht es um eine Hausaufgabe, dann ist das ja in Ordnung.

Aber wenn es um einen "ernsthaften" Fall geht, dann frage ich mich, was passiert denn, wenn jemand z. B. folgendes eingeben will:

0123 456 (tagsüber) 0987 6543 (ab 18:00)

Dann macht sich jemand die Arbeit, sinnvolle Hinweise zur Telefonnummer zu schreiben und bekommt gesagt, dass er die wieder rauslöschen soll.

Ich würde eine solche Prüfung nur einbauen, wenn das Formular wirklich missbraucht wird.
 
Danke für Eure Hinweise - ich hatten das von irgendwo übernommen ohne mir Gedanken über den Hintergrund zu machen...
Ich werd' mal nach einer anderen Lösung schauen!

Anna, ja irgendwie hast Du recht, vielleicht sollte ich diese Überprüfung wieder rausschmeißen - dann wäre das Problem eh gelöst!
 
Zurück