Formulardaten in MySQL speichern: Alter wird nicht gespeichert
ChackZz
- php
0 Der Martin
0 dedlfix
0 Snafu0 Dennis
Hallo, ich habe in PHP und HTML ein formular gecodet. Die eingegebenen Daten sollen in einer MySQL-Datenbank gespeichert werden. Das klappt auch soweit problemlos, einzig die Altersangabe wird nicht übernommen, sondern es erscheint in der Tabelle eine 0.
Ich weiß ehrlich gesagt nicht, ob es ein PHP-Problem ist oder direkt ein MySQL-Problem.
Die Daten des entsprechendes Feldes:
Feld: altersangabe
Typ: INT
Länge: 11
Kollation:
Attribute:
Null: Null
Standard: NULL
Extra:
Kommentare
und zum Abschluss noch der Code:
<body>
<?php
//Formular abgeschickt?
if($_POST['flag']==1)
{
//leerstellen entfernen
$_POST['name']=trim($_POST['name']);
$_POST['vorname']=trim($_POST['vorname']);
$_POST['nick']=trim($_POST['nick']);
$_POST['altersangabe']=trim($_POST['altersangabe']);
$_POST['kommentar']=trim($_POST['kommentar']);
//html entfernen
$_POST['name']=strip_tags($_POST['name']);
$_POST['vorname']=strip_tags($_POST['vorname']);
$_POST['nick']=strip_tags($_POST['nick']);
$_POST['altersangabe']=strip_tags($_POST['altersangabe']);
$_POST['kommentar']=strip_tags($_POST['kommentar']);
//Testen ob alle Felder ausgefüllt sind
if(!$_POST['name'])
{$fehler="Bitte geben Sie ihren Namen ein! <br>";}
if(!$_POST['vorname'])
{$fehler="Bitte geben sie ihren Vornamen ein! <br>";}
if(!$_POST['altersangabe'])
{$fehler="Bitte geben sie Ihr Alter ein! <br>";}
if ($fehler)
{
$meldung="<h2><font color=red>".$fehler."</font></h2>";
unset($_POST['flag']);
}
else
{
//sql-String bauen
$tabellenname="formular";
$sql="INSERT INTO $tabellenname (name, vorname, nick, altersangabe, kommentar, datum) values ('".$_POST['name']."', '".$_POST['vorname']."', '".$_POST['nick']."', '".$_POST['alterangabe']."', '".$_POST['kommentar']."', now())";
//verbinden zur datenbank
$link = mysql_connect("localhost", "USERNAME", "PASSWORT");
mysql_select_db("usr_web1_1", $link);
mysql_query($sql, $link);
$meldung="<h2><font color=green>Ihr Eintrag wurde gespeichert!</font></h2>";
}
//Ausgeben der Meldung
echo $meldung;
}
if(!$_POST['flag'])
{
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="hidden" name="flag" value="1" />
<p>Ihr Name: <br />
<input type="text" name="name" value="<?php echo $_POST['name']; ?>" /></p>
<p>Vorname: <br />
<input type="text" name="vorname" value="<?php echo $_POST['vorname']; ?>" /></p>
<p>ggf. Nickname:<br />
<input type="text" name="nick" value="<?php echo $_POST['nick']; ?>" /></p>
<p>Alter:<br />
<input type="text" name="altersangabe" value="<?php echo $_POST['alter']; ?>" /></p>
<p>ggf. Kommentar:<br />
<textarea name="kommentar">
<?php echo $_POST['kommentar']; ?>
</textarea>
</p>
<input type="submit" value=" eintragen " /> <input type="reset" value="zurücksetzen" />
</form>
<?php
}
?>
</html>
Hallo,
Hallo, ich habe in PHP und HTML ein formular gecodet. Die eingegebenen Daten sollen in einer MySQL-Datenbank gespeichert werden. Das klappt auch soweit problemlos, einzig die Altersangabe wird nicht übernommen, sondern es erscheint in der Tabelle eine 0.
hast du denn den Beispielcode einfach per Copy&Paste hier reinkopiert?
Dann ist mir klar, woran es liegt:
$_POST['altersangabe']=trim($_POST['altersangabe']);
Hier war's vermutlich noch okay.
$sql="INSERT INTO $tabellenname (name, vorname, nick, altersangabe, kommentar, datum) values ('".$_POST['name']."', '".$_POST['vorname']."', '".$_POST['nick']."', '".$_POST['alterangabe']."', '".$_POST['kommentar']."', now())";
Und dann achte mal drauf, was du hier wirklich in die DB schreiben möchtest!
Herrje, man muss auch auf Fehlermeldungen und Notices achten! Du versuchst hier offensichtlich, auf eine nicht existierende Variable $_POST['alterangabe'] zuzugreifen. Den Wert ergänzt PHP gnädig mit 0, aber dafür gibt's eine Notice, die man ernst nehmen sollte.
So long,
Martin
echo $begrüßung;
Herrje, man muss auch auf Fehlermeldungen und Notices achten! Du versuchst hier offensichtlich, auf eine nicht existierende Variable $_POST['alterangabe'] zuzugreifen. Den Wert ergänzt PHP gnädig mit 0, aber dafür gibt's eine Notice, die man ernst nehmen sollte.
Notices sind per Default in PHP unterdrückt. Man muss das error_reporting erst selbst auf E_ALL stellen, damit diese wichtigen Meldungen sichtbar werden. (display_errors muss natürlich auch eingeschaltet sein)
echo "$verabschiedung $name";
Schau mal genau hin. Du verwendest 3 Variablennamen.
$_POST['altersangabe']=trim($_POST['altersangabe']);
^^^^^^^^^^^^
$sql="... (..., altersangabe,...) ...'".$_POST['alterangabe']."...";
^^^^^^^^^^^
<input type="text" name="altersangabe" value="<?php echo $_POST['alter']; ?>" /></p>
^^^^^^
Hi ChackZz,
$_POST['name']=trim($_POST['name']);
$_POST['vorname']=trim($_POST['vorname']);
$_POST['nick']=trim($_POST['nick']);
$_POST['altersangabe']=trim($_POST['altersangabe']);
$_POST['kommentar']=trim($_POST['kommentar']);
//html entfernen
$_POST['name']=strip_tags($_POST['name']);
$_POST['vorname']=strip_tags($_POST['vorname']);
$_POST['nick']=strip_tags($_POST['nick']);
$_POST['altersangabe']=strip_tags($_POST['altersangabe']);
$_POST['kommentar']=strip_tags($_POST['kommentar']);
Du kannst übrigens auch schreiben:
$_POST['name'] = strip_tags(trim($_POST['name']));
Das kommt aufs Gleiche hinaus ;-) Die superglobalen Variablen $_POST und $_GET zu modifizieren halte ich übrigens nicht für empfehlenswert, da dies beim späteren Einarbeiten in das Script zu Verwirrungen führen kann. Hier wären lokale Variablen (z.B. $name) besser angebracht, alternativ bearbeitest du die Daten erst da, wo sie wirklich eingesetzt werden.
$sql="INSERT INTO $tabellenname (name, vorname, nick, altersangabe, kommentar, datum) values ('".$_POST['name']."', '".$_POST['vorname']."', '".$_POST['nick']."', '".$_POST['alterangabe']."', '".$_POST['kommentar']."', now())";
Was dein Problem ist, haben dir Martin und Snafu ja bereits gesagt - aber du hast noch etwas ganz anderes, nämlich eine dicke Sicherheitslücke. Dein Script ist in dieser Form anfällig für SQL-Injections.
Das hatte ich kürzlich erst erläutert, die anderen dort genannten Tipps kannst du teilweise auch beherzigen. Zwar verwendest du ein Affenformular, aber du gibst die $_POST-Werte ohne Verwendung von htmlspecialchars() o.ä. im HTML-Quellcode aus. Damit könntest du gegen XSS-Attacken anfällig sein, auch wenn du hier so wie es aussieht strip_tags() verwendet hast. Davon würde ich eher abraten, da strip_tags() sich u.U. recht merkwürdig verhält, wie du im Archiv nachlesen kannst.
Viele Grüße,
~ Dennis.