Wolfgang: Nach aktivieren von Radio-Buttons Eingabefelder prüfen

Mein Formular enthält zwei Radiobuttons. Der Anwender soll dabei auswählen, ob er einen Kontakt per Telefon oder eMail wünscht. Beim Klick auf den Abschicken-Button  werden, wie ihr seht, vor Auslesen aller weiteren Felder mit der While-Schleife , also auchVorwahl und Telefonnummer bzw. eMail, diese Inhalte mit folgenden Regexp geprüft:

if($Abschicken)
{
   if (empty($Name) || empty($Firma))
   {
      echo "$felderleer";exit;
   }

if (! ereg("[1]+(.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+.)+([a-zA-Z]{2,3})$", $eMail, $regs))
    {
 echo "$mailfalsch";exit;
 }
if (!preg_match("/^\d+$/",$Vorwahl))
    {
 echo "$nummerfalsch";exit;
 }
if (!preg_match("/^\d+$/",$Rufnummer))

{
 echo "$nummerfalsch";exit;
 }
}

while(list($name,$value)=each($HTTP_POST_VARS)) {
$message.="$name: $value\n\n";
}

So weit funktioniert das ja.
Jetzt möchte ich aber die Prüfung von Vorwahl, Telefonnummer und eMail-Adresse nicht generell ausführen, da damit ja in jedem Fall vor Absenden alle diese Felder ausgefüllt sein müssten, sondern davon abhängig machen, welcher der beiden Radiobuttons aktiviert ist.
Sie sehen jetzt so aus.

<input type="radio" name="Antwort" value="Anruf" checked="checked">
        Wir möchten zurückgerufen werden !
<input type="radio" name="Antwort" value="Mail">
        Wir bitten um Beantwortung nachstehender eMail !

Ich denke, dass ich diese dann noch als Array definieren müsste? Je nachdem, welcher von beiden aktiviert ist, soll nur das entsprechende Regexp aufgerufen und bei fehlerhafter Feldeingabe die Fehlermeldung auf einer neuen Seite im gleichen Fenster mit Zurück-Button angezeigt (wie jetzt im Script schon  vorhanden).
Mir fehlt der Lösungsansatz, wie ich diese Prüfung bevor die While-Schleife ausliest, bewerkstelligen kann. Ich denke mit if(isset ..... und wie müsste dann das Script bei  jeder Abfrage heißen ?
Danke im voraus für Eure freundliche Hilfe und schönen Sonntag allen!
Wolfgang


  1. _a-zA-Z0-9- ↩︎

  1. Hi

    wieso gibst du den beiden radiobuttons nicht verschiedene namen zB antwort_mail und antwort_tele und machst dann eine if-Abfrage?

    Gruss
    Carl

    1. Hallo Carl,
      danke für Deine Antwort!
      Kannst Du Deine Idee mal kurz etwas skizieren ?
      Ich könnte mir zwar vage vorstellen wie Du es meinen könntest, bitte hilf mir aber nochmal auf den Trichter ehe ich lange Varianten probiere !
      Danke, Wolfgang

      1. Hi Wolfgang

        versuchs mal so:

        if(isset($antwort_mail)
           ...//(deine funktion in dem fall)
        else
           ...//(hier brauchst du jetzt nicht nochmal ne abfrage, weil du ja nur 2 möglichkeiten hast und durch das else die andere möglichkeit(antwort durch mail) ausgeschloßen ist)

        Hoffe ich konnte dir damit weiterhelfen.

        Gruss
        Carl

  2. Hallo Wolfgang,

    if($Abschicken)

    Hmmm. Ich würde an Deiner Stelle $HTTP_POST_VARS['Abschicken'] (PHP 4.0) oder $_POST['Abschicken'] (PHP 4.1, 4.2 oder 4.3) verwenden. Ist sinnvoller, denn dann weißt Du genau, woher alles kam. Außerdem ist register_globals in PHP 4.2 und höher normalerweise deaktiviert, dann funktioniert das nur noch mit $_POST. (naja, die meisten Hoster lassen es aktiviert, damit es keine Probleme gibt, aber irgendwann wird es deaktiviert sein) Das hat z.T. auch Sicherheitsgründe.

    if (empty($Name) || empty($Firma))

    Wieder $_POST['Name'] und $_POST['Firma'].

    echo "$felderleer";exit;

    Wenn Du den Inhalt einer Variable ausgibst, dann setze sie nicht in doppelte Anführungszeichen, denn das kostet Rechenzeit. Gut, hier spielt es keine so große Rolle, aber es ist besser, Du verwendest

    echo $feldleer; exit;

    if (! ereg("[1]+(.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+.)+([a-zA-Z]{2,3})$", $eMail, $regs))

    Erstens würde ich nicht ereg verwenden, sondern preg_match. (schneller und binärsicher) Zweitens ist der Ausdruck falsch. http://aktuell.de.selfhtml.org/tippstricks/programmiertechnik/email/ liefert einen besseren, aber der ist immer noch nicht ganz richtig. (Die Zeile   $dom_tldpart   = '[a-zA-Z]{2,5}'; muss durch   $dom_tldpart   = '[a-zA-Z]{2,6}'; ersetzt werden, dann stimmts)

    echo "$mailfalsch";exit;

    echo $mailfalsch; exit;

    if (!preg_match("/^\d+$/",$Vorwahl))

    Seltsam, hier verwendest Du preg_match...

    echo "$nummerfalsch";exit;

    echo $nummerfalsch; exit;

    echo "$nummerfalsch";exit;

    echo $nummerfalsch; exit;

    <input type="radio" name="Antwort" value="Anruf" checked="checked">
            Wir möchten zurückgerufen werden !
    <input type="radio" name="Antwort" value="Mail">
            Wir bitten um Beantwortung nachstehender eMail !

    Ich denke, dass ich diese dann noch als Array definieren müsste?

    Nein.

    Je nachdem, welcher von beiden aktiviert ist, soll nur das entsprechende Regexp aufgerufen und bei fehlerhafter Feldeingabe die Fehlermeldung auf einer neuen Seite im gleichen Fenster mit Zurück-Button angezeigt (wie jetzt im Script schon  vorhanden).

    Genau.

    Mir fehlt der Lösungsansatz, wie ich diese Prüfung bevor die While-Schleife ausliest, bewerkstelligen kann. Ich denke mit if(isset ..... und wie müsste dann das Script bei  jeder Abfrage heißen ?

    Ich 'skizziere' mal:

    if (isset ($_POST['Abschicken'])) {
      if ($_POST['Antwort'] == 'Anruf') {
        // hier die Überprüfung der Telefonnummer
      } else if ($_POST['Antwort'] == 'Mail') {
        // hier die Überprüfung der Email
      } else {
        // irgendwer manipuliert was...
      }
    }

    Wenn Du davon etwas nicht verstehst, melde Dich noch mal.

    Grüße,

    Christian

    --
    Ich wünsche allen frohe Weihnachten!
    Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.

    1. _a-zA-Z0-9- ↩︎