Formularscript PHP - Pflichtfelder festlegen?
mayer
- php
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> '.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;
?>
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
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
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
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
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.
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
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? :-)
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
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
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
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