Formularüberprüfung vor Absenden in Verbindung mit Inxmail
ChrisS
- php
Hallo, ich mal wieder :)
Bin mal wieder an einem Formular, dass an Inxmail (einem E-Mail Client) übergeben werden soll:
PHP:
if (empty($email)):
$fehler .= "Bitte geben Sie Ihre E-Mail Adresse an.<br />";
$weiter = 0;
endif;
if (!empty($email)):
if (!check_email($email)):
$fehler .= "Bitte die Mailadresse auf ihre Richtigkeit prüfen.<br />";
$weiter = 0;
endif;
endif;
}
Formular:
<form name="Bestellung" action="http://s103.inxserver.de/subscription/" method="post">
<input type="hidden" value="GM_3030" name="INXMAIL_SUBSCRIPTION" />
<input type="hidden" value="http://www.xxx/erfolg.html" name="INXMAIL_HTTP_REDIRECT" />
<input type="hidden" value="http://www.xxx.php" name="INXMAIL_HTTP_REDIRECT_ERROR" />
<fieldset>
<div class="hinweis">
[code lang=php]<?php
// vorhandene Fehler ausgeben
echo '<p class="fehler_aussen">', $fehler , '</p>';
// wenn Formular erfolgreich abgeschickt wurde
if ($weiter == 1)
{
echo '<p class="erfolg">', 'Vielen Dank. Sie erhalten in Kürze eine Mail zur Bestätigung Ihrer E-Mail Adresse. Bitte klicken Sie auf den darin enthaltenen Link.' , '</p>'; }
# ansonsten Formular ausgeben
else {
?>
</div>
<div class="rowElem">
<label for="email">E-Mail *</label>
<input type="text" name="email" id="email" size="32" value="<? echo $email ?>" />
</div>
<div class="rowElem" id="div_absenden">
<input type="submit" value="Abschicken" name="abschicken" /> <input type="hidden" name="weiter" value="1">
</div>
<div>
</div>
</fieldset>
</form>
[/code]
Ich habe hier leider das Problem, dass das Formular zwar nicht abgeschickt wird, wenn nicht die Pflichtfelder ausgefüllt werden, es werden aber auch keine Fehler ausgegeben (auf der selben Seite).
Kann ich das irgendwie steuern, dass das Formular zuerst überprüft wird (also die Fehler auf der Seite ausgegeben werden), und dann erst abgeschickt wird?
Der Fehler muss irgendwo daran
<input type="hidden" value="http://www.xxx.html" name="INXMAIL_HTTP_REDIRECT_ERROR" />
liegen, denn wenn ich die Zeile entferne, kommt folgende Fehlermeldung auf der nächsten Seite.
<b>Error in request: Missing parameter INXMAIL_HTTP_REDIRECT_ERROR</b>
Auf die gleiche Seite zu verlinken mit "value" habe ich auch schon probiert, das klappt auch nicht...
Kann mir wer helfen?
Danke und Grüße
ChrisS
Hallo,
Ich habe hier leider das Problem, dass das Formular zwar nicht abgeschickt wird, wenn nicht die Pflichtfelder ausgefüllt werden,
Wie hast du das "Nicht-Abschicken" geprüft? Ich denke, das wird nach action="http://s103.inxserver.de/subscription/" geschickt.
es werden aber auch keine Fehler ausgegeben (auf der selben Seite).
Natürlich nicht, wenn du das Formular an eine fremde Seite schickst, hast du keine Kontrolle mehr.
Kann ich das irgendwie steuern, dass das Formular zuerst überprüft wird (also die Fehler auf der Seite ausgegeben werden), und dann erst abgeschickt wird?
Vor dem Abschicken geht's nur mit Javascript:
function chkFormular ()
{
...
// alle okay
return 1; // Formular abschicken
...
// fehler
return 0; // Formular nicht abschicken
}
<form ... onSubmit="return chkFormular()">
...
</form>
Und wenn der Leser Javascript ausgeschaltet hat, geht's doch ab ins Nirwana. Es sei denn, du zeigst die Absendeschaltfläche nur an, wenn Javascript aktiv ist mit document.write().
Kalle
Hallo Kalle
Wie hast du das "Nicht-Abschicken" geprüft? Ich denke, das wird nach action="http://s103.inxserver.de/subscription/" geschickt.
Indem bei komplett ausgefüllten Feldern ja auf die "Danke-Seite" geleitet wird. Falls ein Pflichtfeld fehlt, wird auf die Error-Seite (die ja die selbe Seite wie das Formular ist) geleitet. Daher sehe ich, dass das Formular nicht abgeschickt wurde.
Kann ich das irgendwie steuern, dass das Formular zuerst überprüft wird (also die Fehler auf der Seite ausgegeben werden), und dann erst abgeschickt wird?
Vor dem Abschicken geht's nur mit Javascript:
[code lang=javascript]function chkFormular ()
OK falsch formuliert,
ich wills nicht vor dem Abschicken überprüfen, sondern die fehler sollen nach Klick auf Absenden Button auf der gleichen Seite ausgegeben werden.
Jetzt ist es so, wenn ich eine externe Seite als value angebe (z.b. value="http://www.xxx.de/error.html", dann gelangt der User auch auf diese Seite, wenn das Formular nicht komplett ausgefüllt wurde.
Es muss doch aber durch PHP möglich sein, die Felder direkt auf der gleichen Seite zu prüfen und nur wenn alles ok ist, auf die Danke-Seite...
Thx schon mal.
Greetz
ChrisS
Hi zusammen,
noch ein Zusatz:
Ich habe nun versucht, das form action dynamisch nach Formularüberprüfung aufzurufen. Nun werden zwar vorab die Fehler ausgegeben, aber das Formular wird nicht an das "action" geschickt, wenn alles eingegeben wurde.
Kann vielleicht jemand einen Blick drauf werfen?
Danke und Grüße
ChrisS
<?php
## allgemeine und überall verfügbare Funktionen
function mache_sicher($wert)
{
$wert = trim($wert); // Entferne Leerzeichen an Anfang und Ende
$wert = strip_tags($wert); // HTML-Code entfernen
$wert = stripslashes($wert); // Entfernen von Backslashes
return $wert; // Rückgabe der bearbeiteten Variable
}
// Mailadresse prüfen
function check_email($email)
{ return eregi("^[_a-z0-9-]([-_.]?[a-z0-9])*@[a-z0-9]([-_.]?[a-z0-9])+[.][a-z0-9]+$",$email); }
// Postvariablen aufarbeiten, damit sie keinen Schaden anrichten können
$senden = mache_sicher($_POST['senden']);
$weiter = mache_sicher($_POST['weiter']);
$firma = mache_sicher($_POST['firma']);
$anrede = mache_sicher($_POST['anrede']);
$name = mache_sicher($_POST['name']);
$email = mache_sicher($_POST['email']);
$mailpflicht = 0;
$action = '';
# Wenn der Submit-Button betätigt wurde und die Kontrollvariable $weiter == 1 ist, führe Code aus
if (isset($_POST['senden']) && $weiter == 1)
{
// Wenn $weiter leer oder keine Zahl ist, wurde das Formular mit Sicherheit manipuliert.
if (empty($weiter) || !is_numeric($weiter)):
die("Fehler in der Datenverarbeitung. Der Vorgang wird abgebrochen");
$weiter = 0;
endif;
// ------------ Prüfe Feld Firma --------------
// wenn Firma leer --> Fehler ausgeben
if (empty($firma)):
$fehler .= "Bitte geben Sie Ihr Unternehmen an.<br />";
$weiter = 0;
endif;
// ------------ Prüfe Feld Anrede --------------
// Anrede darf nicht leer sein.
if (empty($anrede)):
$fehler .= "Bitte geben Sie Ihre Anrede an.<br />";
$weiter = 0;
endif;
// ------------ Prüfe Feld Name --------------
// wenn Name leer --> Fehler ausgeben
if (empty($name)):
$fehler .= "Bitte geben Sie Ihren Nachnamen an.<br />";
$weiter = 0;
endif;
// ------------------- Prüfe E-Mail --------------
// Wenn Feld nicht leer --> E-Mail prüfen
if (empty($email)):
$fehler .= "Bitte geben Sie Ihre E-Mail Adresse an.<br />";
$weiter = 0;
endif;
// Falsche E-Mail Syntax --> Fehler ausgeben
if (!empty($email)):
if (!check_email($email)):
$fehler .= "Bitte die Mailadresse auf ihre Richtigkeit prüfen.<br />";
$weiter = 0;
endif;
endif;
}
// ------------ verschicken des Formulares -----------
if ($weiter == 1)
{
$action = 'http://s103.inxserver.de/inxmail8/subscription/servlet';
}
?>
Form Code:
<form name="Bestellung" action="<? echo $action ?>" method="post" class="jqtransform" >
<input type="hidden" value="GM_3030_Gratis" name="INXMAIL_SUBSCRIPTION" />
<input type="hidden" value="http://www.test.de/gratis_download_danke.html" name="INXMAIL_HTTP_REDIRECT" />
<input type="hidden" value="http://www.test.de/gratis_download.php" name="INXMAIL_HTTP_REDIRECT_ERROR" />
<input type="hidden" value="ISO-8859-1" name="INXMAIL_CHARSET">
<fieldset>
<div class="hinweis">
<?php
// vorhandene Fehler ausgeben
echo '<p class="fehler_aussen">', $fehler , '</p>';
// wenn Formular erfolgreich abgeschickt wurde
if ($weiter == 1)
{
$action = 'http://s103.inxserver.de/inxmail8/subscription/servlet';
}
# ansonsten Formular ausgeben
else {
?>
</div>
<div class="rowElem">
<label for="firma">Firma *</label>
<input type="text" name="name1" id="firma" size="32" value="<? echo $firma ?>" />
</div>
<div class="rowElem">
<label for="anrede">Anrede *</label>
<select name="anrede">
<option value="">-- bitte wählen --</option>
<option <? echo ($anrede=="Herr") ? "SELECTED":""?>>Herr</option>
<option <? echo ($anrede=="Frau") ? "SELECTED":""?>>Frau</option>
</select>
</div>
<div class="rowElem">
<label for="name">Nachname *</label>
<input type="text" name="nachname" id="name" size="16" value="<? echo $name ?>" />
</div>
<div class="rowElem">
<label for="email">E-Mail *</label>
<input type="text" name="email" id="email" size="32" value="<? echo $email ?>" />
</div>
<div class="rowElem" id="div_absenden">
<input type="submit" value="Abschicken" name="senden" /> <input type="hidden" name="weiter" value="1">
</div>
</fieldset>
</form>
Bin für jede Anregung dankbar...
Grüße
ChrisS