Forum: PC-Programmierung PHP Formulardaten verarbeiten


von Stefan (Gast)


Lesenswert?

Hallo,

ich habe eine PHP Datei (index.php), die mir über ein Template 
(maintemplate.tpl) eine Seite mit einem Kontaktformular ausgibt. Die 
Daten aus dem Kontaktformular werden an eine weitere PHP Datei 
(send.php) geschickt, dort verarbeitet und als Mail verschickt. Danach 
wird eine Dankesseite ausgegeben. Soweit funktioniert alles sehr gut.
Jetzt möchte ich bei fehlerhafter Eingabe der E-Mail Adresse oder leerem 
Textfeld eine Fehlermeldung ausgeben. Die Fehler werden in der send.php 
Datei ermittelt, funktioniert auch, und sollen dann wieder über die 
index.php ausgegeben werden. Ich habe Probleme, die Fehlermeldung über 
"preg_replace" wieder an die Ausgabeseite zu geben, da gibt es immer 
wieder Fehler.
Kann mir jemand einen Rat diesbezüglich geben bzw. wie programmiert man 
ein solches Formular typischerweise?

Vielen Dank
Stefan

von Peter (Gast)


Lesenswert?

mach doch beides in einer Datei dann ist das Problem weg. Wenn dir das 
nicht gefällt kannst du auch noch eine 3. Datei anlegen in welchen der 
Formular und der Fehlertext erzeugt wird und dise bindest du dann in die 
index und send per include ein.

von Franz B. (byte)


Lesenswert?

Fehlermeldung? Quellcode?

Herangehensweisen gibts mehrere.

* Über eine Datei. Man wertet über GET/POST den Status der Seite aus. 
Wird die Seite blank aufgerufen => Template "Eingabe".
Werden Daten übergeben => Daten überprüfen
  Daten OK => Senden und Template "danke" ausgeben
  Daten NOK => Template "Eingabe" mit Fehler ausgeben (zusätzliche Var 
{error} oder ähnliches)

* Mehrere Dateien... ähnlich wie oben, nur wird hier id. regel auf die 
erste Seite zurückverwiesen und mit Sessions gearbeitet.

von Stefan (Gast)


Lesenswert?

Vielen Dank erstmal für die schnelle Antworten!!

Vom Prinzip hab ich es verstanden, jedoch funktioniert es in der Praxis 
nicht.
Ich habe hier ausschnittsweise den Quellcode:

______________________________________________________________________ 
__

kontakt.php:
___________

<form action="send.php" method="post">

Kontaktformular

<table border="0" cellpadding="0" cellspacing="5">
<tr>
<td>Name:</td>
<td></td>
<td><input name="name" type="text" id="vorname" tabindex="1" size="35" 
maxlength="100"/></td>
</tr>

<tr>
<td>E-Mail:</td>
<td></td>
<td><input name="mail" type="text" class="[%class_mail%]" id="email" 
tabindex="2" size="35" maxlength="100" /></td>
</tr>

<tr>
<td>Betreff:</td>
<td></td>
<td><input name="betreffzeile" style="width:340px" type="text" 
id="betreff" tabindex="3" size="60" maxlength="100"/></td>
</tr>

</table>

<textarea name="text" style="width:485px" cols="40" rows="8" 
class="[%class_text%]" id="anfrage" tabindex="4" ></textarea>

<table border="0" cellpadding="0" cellspacing="5">

<tr>
<td><input class="checkbox" name="mailcopy" type="checkbox" 
id="mail_copy" value="1" tabindex="5"  /></td>
<td>Sie möchten eine Kopie dieser Nachricht erhalten</td>
</tr>

</table>


<input name="kontakt" type="submit" class="button"  value="Absenden" 
tabindex="6" />&nbsp;&nbsp;&nbsp;<input type="reset" class="button" 
value="Löschen" tabindex="7" />

______________________________________________________________________ 
__


send.php:
___________


if(isset($_POST['kontakt']))
   check_data();


function check_data()
{
   if(empty($_POST['mail']) or empty($_POST['text']))

HIER SOLLTE DIE ANWEISUNG STEHEN, DAS FELD [%class_mail%] AUS DER 
kontakt.php ZU ERSETZEN:
z.B. (oder so ähnlich!?)

$class_mail_error = "formular";
$page = preg_replace("/\[\%class_mail\%\]/", $class_mail_error, $page);
echo $page;


   else
      check_mail();
}

______________________________________________________________________ 
__

Die Seite aktualisiert sich nicht mit der neuen Variable 
($class_mail_error ), da kommt dann ein weißer Bildschirm. Ich habe 
schon einiges versucht und irgendwie will es nicht funktionieren!?

Vielen Dank für Euere Hilfe!!!
Stefan

von Franz B. (byte)


Lesenswert?

Ich verstehe den Sinn dieses Konstruktes nicht ganz. Arbeitest du jetzt 
mit Templates oder nicht? Warum ist die Form in einem php-File?

von Stefan (Gast)


Lesenswert?

Ich habe die Sache hier vereinfacht dargestellt, so dass ich das 
Kontaktformular in der kontakt.php aufrufe und die Daten an die send.php 
schicke. In der send.php wird dann überprüft, ob die Daten soweit 
korrekt sind, sind sie es nicht, dann soll sich die kontakt.php mit der 
neuen Variable [%class_mail%] = "formular" aktualisiert darstellen.

Das Kontaktformular wird über index.php?page=kontakt aufgerufen, 
dahinter verbirgt sich dann auch das Template. Ich wollte das hier aber 
nicht ganz ausführen, da es zu komplex ist.

Mein Problem besteht darin, dass ich über die send.php ein Feld 
[%class_mail%] in der kontakt.php aktualisieren möchte und das 
funktioniert nicht:

kontakt.php:
_________

<form action="send.php" method="post">

Kontaktformular
...
<td><input name="mail" type="text" class="[%class_mail%]" id="email"
tabindex="2" size="35" maxlength="100" /></td>
</tr>
...

send.php:
_________

...
function check_data()
{
   if(empty($_POST['mail']))

HIER SOLLTE DIE ANWEISUNG STEHEN, DAS FELD [%class_mail%] AUS DER
kontakt.php ZU ERSETZEN:
z.B. (oder so ähnlich!?)

$class_mail_error = "formular";
$page = preg_replace("/\[\%class_mail\%\]/", $class_mail_error, $page);
echo $page;


   else
      check_mail();
}

...

von Hans Schnorg (Gast)


Lesenswert?

DU kannst oben in '<form action="send.php"..' als Ziel die "index.php" 
reinschreiben: '<form action="index.php"..', dann werden die Eingaben an 
die "index.php" gesendet.

In der index.php musst du die Information ermitteln, was gerade zu tun 
ist: wenn noch keine Eingaben vorliegen, dann zeigst du die Eingabeform. 
Wenn Eingaben vorliegen, dann zeigst du entweder die Eingabeform mit 
Fehlermeldungen, oder sendest die Mail und sagst "Vielen Dank!". 
Übernimm bitte nicht Benutzereingaben ungeprüft in Mail-Kopfzeilen, 
ansonsten können Spammer dein Kontaktformular zum Senden von Spam 
missbrauchen.

preg_replace() würde ich weglassen (am Anfang zu kompliziert), sondern 
vielmehr die Fehler einfach ausgeben (z.B. als <ol>-Liste). Ohne Fehler 
ist die Liste leer und damit unsichtbar. Natürlich kannst du auch einen 
Template-Platzhalter ersetzen, da bietet sich str_replace() an 
(einfacher).

viel Spaß noch,
  hans schnorg

von Stefan (Gast)


Lesenswert?

Vielen Dank für die Hilfe!!!
Gruß
Stefan

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.