ich möchte ein Affenformular mit einer Datenbank kombinieren.
Der Anwender gibt also Daten in das Formular ein und drückt den Submitbutton. Die Daten werden auf Fehler geprüft und wenn Fehler auftreten, wird der Anwender darauf hingewiesen. Der Anwender korrigiert, dann die Daten. Sobald alle Daten korrekt sind erfolgt die Speicherung in die Datenbank. Soweit ist das klar.
Aber noch zusätzlich soll der Nutzer die Datennochmals in das Formular zur Nachbearbeitung laden können.
Auf der Seite befindet sich ein Speichern-Button. Sobald dieser gedrückt wird eine Prüfung auf Vollständigkeit der Daten durchgeführt.
if ($\_POST['speichern'])
{
Prüfung, ob Pflichtfelder ausgefühllt sind
if (empty($\_POST['anrede'])) $fehler .= "Sie haben keine Anrede ausgewählt.
";
if (empty($\_POST['name'])) $fehler .= "Sie haben keinen Namen eingegeben.
";
if (empty($\_POST['vorname'])) $fehler .= "Sie haben keinen Vornamen eingegeben.
";
#Als nächstes wird dann geprüft, ob ein neuer Eintrag in die DB #gemacht werden muss oder nur eine Aktualisierung des bestehenden #Eintrages.
#Das wird über die Kundenauswahl durchgeführt. Wenn ein Kunde #ausgewählt ist dann aktualisieren, wenn nicht dann neu anlegen.
#In diesem Fall ist ein Kunde bereits ausgewählt.
#Durch die Prüfung der $fehler Variablen kann nun ermittelt werden, ob #alle Eingaben korrekt durchgeführt wurden.
if (!empty($\_SESSION['kundenauswahl']) AND empty($fehler))
{
$mysqli-\>query($updatepersdaten);
echo $mysqli-\>error;
}
#Mein Anliegen war eben auch noch, dass bei einer falschen Eingabe die #Werte wieder in die Eingabefelder übernommen werden damit der #Anwender diese nachkorrigieren kann.
#Wenn die Fehlervariable gefüllt ist, wurde ein Fehler verursacht. Damit #die Daten nicht verloren gehen, werden diese in die gleichen Variablen #gespeichert, die auch weiter unten im HTML-Code im Value-Tag #vorkommen.
if (!empty($fehler))
{
$vnfeld['anrede'] = $\_POST['anrede'];
$vnfeld['name'] = $\_POST['name'];
$vnfeld['vorname'] = $\_POST['vorname'];
$vnfeld['gebdatum'] = $\_POST['gebdatum'];
echo $fehler;
}
}
Beim Aufruf der Daten wird lediglich überprüft, ob die $fehler Variable leer. Dann werden die Daten geladen.
if (empty($fehler))
{
$vn=$mysqli-\>query("SELECT \*,DATE\_FORMAT(gebdatum,'%d.%m.%Y') AS gebdatum FROM persdaten WHERE id\_vn='{$\_SESSION['kundenauswahl']}';");
$vnfeld=$vn-\>fetch\_array();
}
um keine Fehler-Notice zu kassieren sollte besser if isset(($_POST[‚speichern‘])) notiert werden.
if (empty($_POST[‚anrede‘])) $fehler .= "Sie haben keine
Anrede ausgewählt.
";
auch das wirft ggf. eine Notice, wenn nicht zuvor $fehler=’’; notiert wurde.
Damit #die Daten nicht verloren gehen, werden
diese in die gleichen Variablen #gespeichert, die auch weiter
unten im HTML-Code im Value-Tag #vorkommen.
Damit #die Daten nicht verloren gehen, werden
diese in die gleichen Variablen #gespeichert, die auch weiter
unten im HTML-Code im Value-Tag #vorkommen.
das ist bei einem Affenvormular unnötig.
Es ist bei einem Affenformular unnötigt, wenn nicht eine Datenbank mit im Spiel ist.
Nochmal. Es sollen Daten aus einem Formular geprüft und bei korrekter Eingabe in die Datenbank gespeichert und die gespeicherten Daten in den Formularfelder nochmals angezeigt werden. Wenn aber die Daten falsch sind soll der Anwender darauf hingewiesen werden, es sollen keine Daten in die DB gespeichert werden, die Daten aber dennoch in den Formularfeldern angezeigt werden.
Unter diesen Umständen gibt es evtl. die Möglichkeit über eine $_SESSION Variable oder die von mir genannte.
es ist in der tat nicht zwingend notwendig die daten in einer neuen varibale zu speichern. da sich das formular noch mal selbst aufruft ist design und verarbeitung logischerweise in der selben datei. beim abschicken wird alles in $_POST gespeichert. von daher ist es auch durchaus möglich im value-attribut auch $_POST[‚Name‘] statt $Name zu verwenden.
P.S. vergiss die Datenvalidierung nicht und übernimm blos nicht ungeprüft die Daten weder ins Formular noch in die Datenbank
Es ist bei einem Affenformular unnötigt, wenn nicht eine
Datenbank mit im Spiel ist.
was mit den Daten geschieht, ist doch völlig unerheblich. Wie bereits gesagt wurde, stehen die Daten im $_POST-Array zur verfügung und können ausgewertet und je nach Ergebnis entweder gespeichert oder wieder im Formular eingetragen werden. Ich nutze hierzu eine kleine, universelle Funktion: http://www.1ngo.de/web/formmailer.html#Eingaben
Dieses Script könntest Du genauso gut auch für die Speicherung in einer Datenbank anstatt mail() verwenden, dann natürlich über mysql_escape_string() abgesichert.
und wenn die Daten aus der Datenbank geladen werden? Wie
gelangen diese dann wieder in die Formulare zurück?
so ganz verstehe ich Dein Problem nicht. Du kannst die vom User eingegebenen Daten über das $_POST-Array wieder ausgeben oder auch nicht eingegebene Daten aus der Datenbank ins Formular schreiben.
Ist es dann auch sicherheitstechnisch in Ordnung die Daten
wieder den $_POST Variablen zu übergeben?
Man könnte also einen Select-Befehl ausführen und die selektierten Daten an die $_POST Variablen weitergeben ohne Sicherheitsprobleme zu bekommen, oder?
Man könnte also einen Select-Befehl ausführen und die
selektierten Daten an die $_POST Variablen weitergeben ohne
Sicherheitsprobleme zu bekommen, oder?
Warum soll das nicht gehen? Es sind ganz normale Variablen, die nur von PHP Prozess gesetzt werden statt von deinem Programm.
Im Übrigen: Versuch macht klug.
Anstatt seitenweise im Forum zu posten wärst du schon viel weiter wenn du Dinge einfach mal ausprobierst. Ganz nebenbei ist der Lerneffekt auch höher. Echo + print_r sind dein Freund
Entschuldigung. Ich hatte mich leider schon beim Eingangspost undeutlich ausgedrückt und damit den Thread unnötig in die Länge gezogen.
Natürlich kann bei einem Affenformular über die $_POST Variablen der Wert nochmals im Formular angezeigt werden. Für mich war eben auch die Frage ob die $_POST Variablen auch sicher sind oder eben doch übergeben werden sollen. Und das kann ich auch nicht wirklich prüfen.
Hi,
$_POST,$_COOKIE,$_GET + $_REQUEST Variablen oder kurz: ALLES was von Benutzer kommt ist ein Sicherheitsproblem.
Selbst $_SESSION Variablen sollte man nicht trauen wenn man nicht genau weiß wo sie abgelegt sind.
Daher müssen diese Variablen alle vor der Verwendung oder Speicherung überprüft werden - insbesondere wenn du daraus SQL Statements bastelst. Da hat man sich schnell eine SQL Injection zugezogen.
Für mich war eben auch die Frage ob die $_POST Variablen
auch sicher sind oder eben doch übergeben werden sollen.
überleg’ doch selber mal: der User gibt einen Wert ein und bekommt genau diesen wieder in sein Formular eingetragen. Gibt er Murks ein, darf er sich nicht wundern, wenn er diesen wieder zurück bekommt.
Um die Seite zu auch für andere zu manipulieren, müsste er dieses Formular nachbauen und hierüber HTML-Code an Deine Seite senden lassen. „Unsicher“ wäre das auch noch nicht, aber unschön, wenn über einen Link auf Deine Seite diese kompromittierend dargestellt würde. Um genau dies auszuschließen, dient htmlspecialchars().
Unsicher dagegen kann nur die serverseitige Verarbeitung von ungeprüften bzw. unmaskierten Eingaben sein.
Für
mich war eben auch die Frage ob die $_POST Variablen auch
sicher sind oder eben doch übergeben werden sollen. Und das
kann ich auch nicht wirklich prüfen.
Merke: Jede Benutzereingabe ist grundsätzlich böse, bis das Gegenteil bewiesen ist. Ich selbst habe mir eine Klasse geschrieben, welche die Parameter auf verschiedene Sachen prüfen kann. htmlspecialchars oder für mysql mysql_real_escape_string können ggf nicht ausreichend sein. Daher prüfe ich auch immer ob es ein Integer ist (sofern es natürlich auch eine Zahl ist) oder ob der Wert einem aus einer Liste vorgegebener ist (z.b. wenn man die Sortierung asc oder desc über get-Parameter macht. Ein anderer Wert ist bekanntlich nicht möglich).