Moin!
Meine frage: ist das so üblich das man scripte in eine externe .php speichert.
kann ich die save.php nicht irgendwie in die index.php einbinden ?
Es gibt grundsätzlich zwei Methoden, um Formulardaten zu verarbeiten:
1. Deine Methode. Script A schreibt das Formular, Script B verarbeitet die Daten. Oder als Extremversion: Script A schreibt das Formular, Script B schickt die Bestätigungsseite zur Kontrolle, Script C prüft die Daten auf Plausibilität, und Script D schreibt die Daten endlich in die Datenbank.
Vorteil dieser Methode: Ein Arbeitsschritt ist in genau einem Script enthalten - Anfänger behalten den Überblick innerhalb eines Scripts.
Nachteil: Man hat tausende Scripte, bei denen man den Gesamtüberblick behalten muß, was schwierig ist. Außerdem muß man mit ziemlicher Sicherheit Code (z.B. HTML-Formulare) doppelt anlegen, was bei Änderungen doppelte Arbeit bedeutet (wenn man es nicht ohnehin vergißt).
2. Die IMHO bessere Methode: Nur eine einzige PHP-Datei für eine große Aufgabe benutzen.
Innerhalb dieses Scriptes wird mit IF-Abfragen geprüft, welche Aktion denn genau gestartet werden soll. Die Aktionen können z.B. vom empfangenen Formular abhängen. Beispiel:
<?php
if ($HTTP_SERVER_VARS['REQUEST_METHOD']=='POST')
{
// Hier Formularprüfung einbauen
formular_ok=true; // Aber nur, wenn das Formular so ok ist
}
if (formular_ok)
{
// Hier die Aktion einbauen: Mail abschicken, Datenbank füllen o.ä.
echo "Ihre Daten wurden verarbeitet.";
}
else
{?>
<form action="<?php echo $PHP_SELF; ?>" method="POST">
<input type="text" name="feld1" value="<?php echo $HTTP_POST_VARS['feld1']; ?>">
<input type="submit" value="Abschicken">
</form>
<?php } ?>
Wenn das Script zum ersten mal aufgerufen wird, wurde kein Formular abgeschickt. Also wird auch die Formularprüfung übersprungen, das Formular kann nicht OK sein, folglich wird das Formular ausgegeben. Da keine Formulardaten abgeschickt wurden, ist $HTTP_POST_VARS leer, und auch der Value des Feldes. Ergebnis: Es wird ein leeres Formular ausgegeben.
Wenn das Formular abgeschickt wird, wird die Formularprüfung aktiv. Am Ende kann die Variable $formular_ok falsch sein. Dann wird erneut das Formular, jetzt mit bereits eingegebenem Inhalt, angezeigt.
Ist die Prüfung erfolgreich, wird kein Formular mehr angezeigt.
Mit dieser Programmierart verhinderst du gleichzeitig, daß man einzelne Skripte direkt aufrufen kann, ohne daß die Voraussetzungen dafür gegeben sind. Was wäre z.B., wenn jemand ein Datenbankeintragskript immer und immer wieder ohne Daten aufrufen würde? Entstehen dann leere Einträge? Mit der All-In-One-Methode würde der Programmteil "Datenbankeintrag" nur dann aufgerufen, wenn wirklich Daten abgeschickt werden, ansonsten kommt ein leeres Formular. Und das macht Sinn. ;)
- Sven Rautenberg