mayer: Formularscript PHP - Pflichtfelder festlegen?

Hallo Scriptspezialisten,
ich benutze das u.a. Script für eine Übergabe von Formulardaten. Funktioniert einwandfrei.

Jetzt wollte ich jedoch das Eingabefeld Mail zum Pflichtfeld machen und geg.ebenenfalls eine Fehlermeldung "Bitte Mailadresse eingeben" etc. auswerfen. Krieg ich nicht gebacken. Bin allerdings auch ganz ganz schwach im Scripten.

Hat jemand eine Hilfe für mich, um Pflichtfelder in das Script einzubauen bzw. dafür andere Lösungen?

Danke.

Gruß
mayer

Script:

<?

// Einstellungen
$domain = 'meinewebsite.de';
$dontsend = array('to','subject','topage','senden'); // Dateien, die nicht angezeigt werden

// Formular überprüfen
function error($msg){
 echo '<font color="red"><b>Fehler:</b></font><br>';
 echo $msg;
 exit;
}
$msg = '';
if(!$HTTP_POST_VARS) error('Direktaufruf nicht möglich!<br>');
if(!isset($HTTP_POST_VARS['to'])) $msg .= '- Empfängerfeld fehlt<br>';
if(!isset($HTTP_POST_VARS['Mail'])) $msg .= '- Absenderfeld (eMail) fehlt<br>';
if(!isset($HTTP_POST_VARS['subject'])) $msg .= '- Betreff fehlt<br>';
if(!isset($HTTP_POST_VARS['topage'])) $msg .= '- Dankesseite fehlt<br>';
$empf  = split("@", strtolower($HTTP_POST_VARS['to']));
if($empf[1] != strtolower($domain) && isset($HTTP_POST_VARS['to'])) $msg .= 'Es können nur eMails an die Domain <b>'.$domain.'</b> gesendet werden!';

if($msg != '') error($msg);

$mailtext  = '<font face="Arial" size="2">';
$mailtext .= 'Mail generiert aus Website meinewebsite.de <br>';
isset($HTTP_REFERER) ? $mailtext .= 'Absender: <b>'.$Mail.'</b> <br><br>' : $mailtext .= ' <br><br>';

reset($HTTP_POST_VARS);
foreach($HTTP_POST_VARS as $key => $value){
 if(!in_array($key, $dontsend)) $mailtext .= '<b>'.$key.':</b>&nbsp;&nbsp;&nbsp;'.htmlspecialchars($value).' <br>';
}
$mailtext .= '</font>';

// Mailen
mail($HTTP_POST_VARS['to'], $HTTP_POST_VARS['subject'], $mailtext, "From: ".$HTTP_POST_VARS['Mail']." <".$HTTP_POST_VARS['Mail'].">\nContent-Type: text/html");

// Redirecten
header('Location: '.$HTTP_POST_VARS['topage']); exit;

?>

  1. hi!

    Hallo Scriptspezialisten,
    ich benutze das u.a. Script für eine Übergabe von Formulardaten. Funktioniert einwandfrei.

    schön. wenn ich mir da aber das veraltete $_HTTP_POST_VARS[] anschaue, frage ich mich für wie lange das noch funktionieren wird... ;-)

    Jetzt wollte ich jedoch das Eingabefeld Mail zum Pflichtfeld machen und geg.ebenenfalls eine Fehlermeldung "Bitte Mailadresse eingeben" etc. auswerfen. Krieg ich nicht gebacken. Bin allerdings auch ganz ganz schwach im Scripten.

    ich würde das über eine if funktion lösen:

    if(!isset($_POST['Mail'])) $msg .= 'Email-Addresse fehlt<br />';

    Hat jemand eine Hilfe für mich, um Pflichtfelder in das Script einzubauen bzw. dafür andere Lösungen?

    so.

    Danke.

    hoffe, ich konnte helfen

    Gruß
    mayer

    lg
    azok

    --
    Murphys Law: "Alles Schöne im Leben ist entweder illegal, ungesetzlich oder es macht dick."
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:( n4:° ss:| de:] js:| ch:( sh:) mo:) zu:)
    1. Hi,

      ich würde das über eine if funktion lösen:

      es gibt keine if Funktion.

      if(!isset($_POST['Mail'])) $msg .= 'Email-Addresse fehlt<br />';

      Damit ueberpruefst Du das vorhandensein einer Variable, nicht deren Wert - der hier durchaus "" sein kann.

      Gruesse, Joachim

      --
      Am Ende wird alles gut.
      1. Hello,

        if(!isset($_POST['Mail'])) $msg .= 'Email-Addresse fehlt<br />';
        Damit ueberpruefst Du das vorhandensein einer Variable, nicht deren Wert - der hier durchaus "" sein kann.

        In PHP werden Parameter aus externen Quellen grundsätzlich als String übergeben bzw. bei Radio, Checkbox und Select multiple nur dann, wenn etwas ausgewählt wurde.

        Im Script kann man also mit

        if (isset($_POST['data']['text']) and strlen(trim($_POST['data']['text']))>0)

        das Vorhandensein und die Belegung des Parameters aus <input name="data[text]"> feststellen.

        Bei eMails würde ich nur feststellen, ob genau ein '@' enthalten ist. Alle anderen Prüfungen, die immer wieder gehandelt werden, haben ihre Tücken. Wenn man z.B. auf 'domain.tld' prüft, hat das Script anschließend ggf. Kummer im lokalen Netz, in dem vielleicht nur ein Kurzname für den Server festgelegt wurde...

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Hi,

          Im Script kann man also mit

          if (isset($_POST['data']['text']) and strlen(trim($_POST['data']['text']))>0)

          das Vorhandensein und die Belegung des Parameters aus <input name="data[text]"> feststellen.

          aber ist das grundsaetzlich viel anders als:
          if (isset($_POST['data']['text']) && trim($_POST['data']['text'])) ...

          Bei eMails würde ich nur feststellen, ob genau ein '@' enthalten ist.

          naja, je nachdem wuerde ich auch noch nach ein paar "boesen" Zeichen schauen ;-)

          Gruesse, Joachim

          --
          Am Ende wird alles gut.
          1. if (isset($_POST['data']['text']) and strlen(trim($_POST['data']['text']))>0)

            das Vorhandensein und die Belegung des Parameters aus <input name="data[text]"> feststellen.
            aber ist das grundsaetzlich viel anders als:
            if (isset($_POST['data']['text']) && trim($_POST['data']['text'])) ...

            ja, bei '0' beispielsweise.

            Das > 0 nach strlen() kann man aber getrost weglassen.

            1. Hello,

              Das > 0 nach strlen() kann man aber getrost weglassen.

              Ich habe es auch im beispiel nur geschrieben, um deutlich zu machen, dass man so auch auf die Mindestlänge prüfen kann. Das ist aber Philosophie. Bei einem Nachnamen muss man schon bei zwei Zeichen akzeptieren. Ich kenne eine Famile 'Ax' und eine die 'Ey' heißt und wenn ich genügend lange nachdenke, habe ich im bekanntenkreis gewiss noch drei Familien mit einem zweistelligen Nachnamen.

              Harzliche Grüße aus http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. Bei einem Nachnamen muss man schon zwei Zeichen akzeptieren.

                Und wie sieht es mit einem einzelnen (Unicode-)Zeichen aus, das eine ganze Silbe oder ein Wort repräsentiert? :-)

                1. Hello,

                  Und wie sieht es mit einem einzelnen (Unicode-)Zeichen aus, das eine ganze Silbe oder ein Wort repräsentiert? :-)

                  Genau, chinesische Bildzeichen. Ich sagte ja, dass es Philosophie ist. Automatische Überprüfungen sind selbst in großen Seiten namhafter Firmen manchmal der totale Schrott.

                  Harzliche Grüße aus http://www.annerschbarrich.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau
          2. Hello,

            if (isset($_POST['data']['text']) and strlen(trim($_POST['data']['text']))>0)

            das Vorhandensein und die Belegung des Parameters aus <input name="data[text]"> feststellen.
            aber ist das grundsaetzlich viel anders als:
            if (isset($_POST['data']['text']) && trim($_POST['data']['text'])) ...

            Ja, das ist was ganz anderes.
            Bei meiner Version wid die Länge des resultiernden Strings geprüft, bei Deiner der numerische Wert des Strings geprüft. Wenn nun Nullen drinstehen, dann würde Deine Version trotzdem Rabatz nachen.

            Bei eMails würde ich nur feststellen, ob genau ein '@' enthalten ist.
            naja, je nachdem wuerde ich auch noch nach ein paar "boesen" Zeichen schauen ;-)

            Vielleicht noch nach \r\n und \r und n suchen. Die asollten auch nicht drinsehen. Aber welche sollen es sonst noch sein? Böse kann es im wesentlichen nur werden, wenn mehr als ein '@' drinsteht. Dann versucht nämlich ggf. jemand, Dein Script für Spam zu missbrauchen und die Header zu injiziren.

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. Hi,

              Bei meiner Version wid die Länge des resultiernden Strings geprüft, bei Deiner der numerische Wert des Strings geprüft. Wenn nun Nullen drinstehen, dann würde Deine Version trotzdem Rabatz nachen.

              das stimmt natuerlich, allerdings auch "0" waere hier die falsche Eingabe... also exakter !== "" ;-)

              Vielleicht noch nach \r\n und \r und n suchen. Die asollten auch nicht drinsehen. Aber welche sollen es sonst noch sein? Böse kann es im wesentlichen nur werden, wenn mehr als ein '@' drinsteht.

              Ich bin immer etwas aengstlich und beschraenke auf -_a-z0-9, wenns in eine DB geht, naja vielleicht ists paranoid...

              Gruesse, Joachim

              --
              Am Ende wird alles gut.
  2. Hi,

    if(!isset($HTTP_POST_VARS['to'])) $msg .= '- Empfängerfeld fehlt<br>'

    das geht nicht, denn wenn das Formular versendet wurde exisitiert die Variable, auch wenn sie moeglicherweise leer ist.

    $xy = isset($HTTP_POST_VARS["xy"])? trim($HTTP_POST_VARS["xy"]) : false;
    if (!$xy) echo "xy ist leer";

    Bei einer neueren PHP-Version geht $_POST[], und ist im Unterschied zu $HTTP_POST_VARS[] global verfuegbar (also auch innerhalb von Funktionen).

    Gruesse, Joachim

    --
    Am Ende wird alles gut.