• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Formular kleiner Fehler?

Entweder mit einem INSERT und 2 anschließenden UPDATE oder du übergibst dem zweiten und dritte Formular jeweils die Daten aller vorhergehenden Formulare, zB über hidden Inputs.
Meines Erachtens sind beide Vorschläge nicht gut. Bei einem Insert mit folgenden Updates kann es zu unvollständigen oder inkonsistenten Daten kommen, wenn der Benutzer nach der ersten Seite aufhört. Hidden-Inputs blähen die Daten unnötig auf, die hin- und her gesendet werden. Zudem kann es (natürlich lösbare) Probleme geben mit der Darstellung der Daten bei Umlauten.

Viel einfacher wäre, sich die Eingaben von Formular 1 und 2 im Session Array $_SESSION zu speichern und am Ende beim Submit von Formular 3 alles in einem Rutsch in die DB zu schreiben.
 
Kling auch sehr gut!
1.

Das heißt ich muss in Formular 1 vor <html> folgendes schreiben:
<?php

session_start();
session_destroy();
$_SESSION = array();
?>

Dann sendet HTML-Formular 1 die Benutzerdaten an PHP Programm 1 oder HTML-Formular 2?
Was muss in PHP Programm 1 / HTML-Formular 2 stehene damit die Daten bis zum (letzten) PHP Programm gesendet werden und dann an die Datenbank übergeben werden?


2.

Der PHP Code funktioniert ja nun.
Aber ich möchte auch ein Datum sowie die Uhrzeit der Eintragung mitsenden.
Wie stelle ich das an?
Habe folgendes ausprobier, funktioniert aber nicht:

<?php
$eintragungsdatum = date("d.m.Y",$timestamp);
$eintragungszeit = date("H:i",$timestamp);
if (isset($_POST["gesendet"]))
{
mysql_connect("host","benutzername","passwort");
mysql_select_db("dbname");
$sqlab = "insert into tabelle1"
. "(firma, "
. "anrede, "
. "vornamebenutzer, "
. "namebenutzer,"
. "email, "
. "telefonarea, "
. "telefon,"
. "strbenutzer, "
. "hausnummerbenutzer, "
. "plzbenutzer, "
. "$eintragungsdatum, "
. "$eintragungszeit, "
. "ortbenutzer) values "
. "('" . $_POST["firma"] . "', "
. "'" . $_POST["anrede"] . "', "
. "'" . $_POST["vornamebenutzer"] . "', "
. "'" . $_POST["namebenutzer"] . "', "
. "'" . $_POST["email"] . "', "
. "'" . $_POST["telefonarea"] . "', "
. "'" . $_POST["telefon"] . "', "
. "'" . $_POST["strbenutzer"] . "', "
. "'" . $_POST["hausnummerbenutzer"] . "', "
. "'" . $_POST["plzbenutzer"] . "', "
. "'" . $_POST["$eintragungsdatum"] . "', "
. "'" . $_POST["$eintragungszeit"] . "', "
. "'" . $_POST["ortbenutzer"] . "')";
mysql_query($sqlab);
$num = mysql_affected_rows();
if ($num>0)
{
echo "<p style='color='#ff000''>Es wurde 1 Datensatz hinzugefügt</p>";
}
else
{
echo "<p style='color='#ff0000''>Es ist ein Fehler aufgetreten, es wurde kein Datensatz hinzugefügt</p>";
}
}
?>
 
Zuletzt bearbeitet:
$_POST["$eintragungszeit"] <-- sicher, dass das so stimmt? Mit CURRENT_DATE() und CURRENT_TIME() solltest Du zum gewünschten Ergebnis kommen.
PHP:
<?php
if (isset($_POST["gesendet"])) {
     mysql_connect("host","benutzername","passwort");
     mysql_select_db("dbname");
     $sqlab = "INSERT INTO tabelle1"
               . "(firma, "
               . "anrede, "
               . "vornamebenutzer, "
               . "namebenutzer,"
               . "email, "
               . "telefonarea, "
               . "telefon," 
               . "strbenutzer, "
               . "hausnummerbenutzer, "
               . "plzbenutzer, "
               . "eintragungsdatum, "
               . "eintragungszeit, "
               . "ortbenutzer) VALUES "
               . "('" . $_POST["firma"] . "', "
               . "'" . $_POST["anrede"] . "', "
               . "'" . $_POST["vornamebenutzer"] . "', "
               . "'" . $_POST["namebenutzer"] . "', "
               . "'" . $_POST["email"] . "', "
               . "'" . $_POST["telefonarea"] . "', "
               . "'" . $_POST["telefon"] . "', "
               . "'" . $_POST["strbenutzer"] . "', "
               . "'" . $_POST["hausnummerbenutzer"] . "', "
               . "'" . $_POST["plzbenutzer"] . "', "
               . "CURRENT_DATE(), "
               . "CURRENT_TIME(), "
               . "'" . $_POST["ortbenutzer"] . "')";
     mysql_query($sqlab);
     $num = mysql_affected_rows();
     if ($num>0) {
         echo "<p style='color='#ff000''>Es wurde 1 Datensatz hinzugefügt</p>";
     } else {
         echo "<p style='color='#ff0000''>Es ist ein Fehler aufgetreten, es wurde kein Datensatz hinzugefügt</p>";
     }
}
?>
 
Ja SUPER das funktioniert einwandfrei DANKE :D

Nun bleibt nur noch die Frage zur SQL Injection offen: und wären Sessions die beste Variante?

1.

Das heißt ich muss in Formular 1 vor <html> folgendes schreiben:
<?php

session_start();
session_destroy();
$_SESSION = array();
?>

Dann sendet HTML-Formular 1 die Benutzerdaten an PHP Programm 1 oder HTML-Formular 2?
Was muss in PHP Programm 1 / HTML-Formular 2 stehene damit die Daten bis zum (letzten) PHP Programm gesendet werden und dann an die Datenbank übergeben werden?
 
Zuletzt bearbeitet:
Session Distroy darfst natürlich nicht machen und das $_SESSION existiert automatisch nach session_start
PHP:
   while (list($key,$value) = each($_POST)) { $_SESSION[$key] = $value; }
So kopierst einfach die Form-Daten in das Session Array
 
Hey danke für die Antwort,
was heißt das genau?
Soll ich die Daten von Formular 1 und 2 und 3 wie beispielsweise anrede ... wohnort... telefon
zwischen kopieren ?

z.Bsp.:

while (list($key,$value) = each($_POST)) anrede, wohnort, telefon { $_SESSION[$key] = $value; }

und soll ich das mit der Session in die HTML Datei (Eingabeformular) oder die PHP Datei (dort habe ich die Daten voerst gesendet- siehe mein PHP Code) ?
 
Genau, du sollst das aus allen 3 Formularen nach $_SESSION kopieren und beim 3 Formular machst dann nach dem Copy einen DB-Update/Insert, wobei du die Werte von $_SESSION nimmst. Wenn ein User vor-oder zurückblättert kannst die Daten aus dem $_SESSION wieder ins Formular schreiben, dann sieht er die alten Eingaben. Nach dem DB-Insert musst halt die Felder im $_SESSION löschen, sonst würden die wieder angezeigt, wenn er nochmals ein Formular aufruft.
 
Also folgendermaßen? Wo soll while (list($key,$value) = each($_POST)) firma, vornamebenutzer, namebenutzer { $_SESSION[$key] = $value; } hin? :
HTML Formular 1

<?php

session_start();
$_SESSION = array(firma);
?>

<head>
<title>HTML Formular 1</title>
</head>
<body>

<form action = "test2.html" method = "post">
<label for="Firma">Firma</label>
<br>
<input name="firma" value="" style="width:320px;" type="text" />

<p><input type="submit" name="gesendet" />
<input type="reset" /></p>
</form>

</body>
</html>

HTML Formular 2

<?php

session_start();
$_SESSION = array(firma, vorname);
?>

<head>
<title>HTML Formluar 2</title>
</head>
<body>

<h1>Konto 2 erstellen</h1>

<form action = "test3.html" method = "post">
<p>
<label for="Vorname">Vorname
</label>
<br>
<input name="vornamebenutzer" value="" class="" style="width: 155px" type="text">

</p>
<p><input type="submit" name="gesendet" />
<input type="reset" /></p>
</form>

</body>
</html>

HTML Formular 3

<?php

session_start();
$_SESSION = array(firma, vorname, name);
?>

<head>
<title>HTML Formular 3</title>
</head>

<body>
<form action = "phpprogramm1.php" method = "post">
<p> <label for="Name">
Name
</label>
<br>
<input name="namebenutzer" value="" class="" style="width: 155px" type="text">

</p>
<p><input type="submit" name="gesendet" />
<input type="reset" /></p>
</form>

</body>
</html>

phpprogramm1.php




<?php
if (isset($_POST["gesendet"]))
{
mysql_connect("host","benutzer","pw");
mysql_select_db("dbname");
$sqlab = "insert into tabelle1"
. "(firma, "
. "vornamebenutzer, "
. "namebenutzer) values "
. "('" . $_POST["firma"] . "', "
. "'" . $_POST["vornamebenutzer"] . "', "
. "'" . $_POST["namebenutzer"] . "')";
mysql_query($sqlab);
$num = mysql_affected_rows();
if ($num>0)
{
echo "<p style='color='#ff000''>Es wurde 1 Datensatz hinzugefügt</p>";
}
else
{
echo "<p style='color='#ff0000''>Es ist ein Fehler aufgetreten, es wurde kein Datensatz hinzugefügt</p>";
}
}
?>




<body>
</body>
</html>
 
Zuletzt bearbeitet:
Oder was müsste ich mit hidden oder andersweitig machen damit die daten zum nächsten formular übertragen werden und wieder zum nächsten und dann gemeinsam in der DB gespeichert werden?
Danke für eure Hilfe
 
Zurück
Oben