www.mikrocontroller.net

Forum: PC-Programmierung PHP Formulardaten verarbeiten


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Franz B. (byte)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Franz B. (byte)
Datum:

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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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();
}

...

Autor: Hans Schnorg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Hilfe!!!
Gruß
Stefan

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.