Affenformular mit Datenbankanbindung

Hallo zusammen,

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.

Ist das alles über ein Affenformular machbar?

Gruß

was zum teufel ist ein affenformular?

und ja sowas ist möglich. du musst lediglich allen html formelementen im attribut value den entsprechenden wert aus $_POST zuweisen

Moin,

was zum teufel ist ein affenformular?

Das, was Alex da machen will :smile:
http://de.wikipedia.org/wiki/Affenformular

Grüße,
-Efchen

Moin,

Ist das alles über ein Affenformular machbar?

Ja.

Schau auch mal hier: http://de.wikipedia.org/wiki/Affenformular

Freundliche Grüße,
-Efchen

das heißt affenformular? sachen gibts :smile:

Lösung!
Hallo,

hier nun meine Lösung.

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();
}

Ich habe den Code gekürzt.

Gruß

Hi,

if ($_POST[‚speichern‘])

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.

das ist bei einem Affenvormular unnötig.

Gruß
Ingo

Hallo,

vielen Dank für deine Tipps.

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.

Oder gibt es noch eine bessere?

Gruß

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

Hi,

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.

Gruß
Ingo

Und welche Variablen bei Selectabfrage
Hallo zusammen,

und wenn die Daten aus der Datenbank geladen werden? Wie gelangen diese dann wieder in die Formulare zurück?

Ist es dann auch sicherheitstechnisch in Ordnung die Daten wieder den $_POST Variablen zu übergeben?

Gruß

Hi,

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?

hierzu dient htmlspecialchars().

Gruß
Ingo

Man könnte also einen Select-Befehl ausführen und die selektierten Daten an die $_POST Variablen weitergeben ohne Sicherheitsprobleme zu bekommen, oder?

Gruß

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 :smile:

Gruss
Joey

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.

Entschuldigt bitte nochmals.

Gruß

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.

http://de.wikipedia.org/wiki/SQL-Injection

Gruss
Joey

Hi,

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.

Gruß
Ingo

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).