Einrag in Datenbank
Christian
- php
0 Ilja0 Tom0 Thomas Luethi0 Tom
0 Götz
Hallo
Ich möchte gern Werte aus einem Formular in eine Datenbank eitragen.Aber irgendwie krieg ich des nich hin krieg zwar kontackt zu meiner Datenbank aber er trägt nichts ein!hier mein quellcode
datenbank.php:
<?$db = @MYSQL_CONNECT(localhost,root)
or die ("Konnte keine Verbindung zur Datenbank herstellen");
$db_check = @MYSQL_SELECT_DB(handys);
if($db) echo "Verbindung zur Datenbank wurde hergestellt";
$result = mysql_db_query("INSERT $hersteller
INTO handys");
");
?>
und eintrag.html:
<html>
<head>
<title>
Handysuche
</title>
</head>
<body>
<form name="form1" action="datenbank.php">
<input name="hersteller" size="40" maxlength="60" value="" /><input type="submit" value="Abschicken" />
</form>
Also weiss jemand was ich falsch mache????
danke im voraus
yo,
INSERT INTO Tabellename (Spalte1, Spalte2..) VALUES (Wert1, Wert2....), wobei Not Null und Primary spalten immer werte benötigen.
Ilja
Hello,
INSERT INTO Tabellename (Spalte1, Spalte2..) VALUES (Wert1, Wert2....), wobei Not Null und Primary spalten immer werte benötigen.
und auch wenn ich wieder gelyncht werde... Anfänger sollten die andere Syntax benutzen:
$hersteller = stripslashes($_POST['hersteller'];
$typ = stripslashes($_POST['typ'];
$sql = "Insert into $table ";
$sql .= "set ";
$sql .= "hersteller = '".mysql_escape_string($hersteller)."'";
$sql .= ",typ = '".mysql_escape_string($typ)."'";
$res = mysql_query($sql, $con);
if ($res)
{
echo "erfolgreich hinzugefügt";
}
else
{
echo "Fehler aufgetreten: ".mysql_error();
}
Das Escapen nicht vergessen.
Die Häkchen nicht vergessen für die Feldwerte, auch für Zahlen!
Die Fehlerbehandlung nicht vergessen.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo,
und auch wenn ich wieder gelyncht werde... Anfänger sollten die andere Syntax benutzen:
Von mir wirst Du deswegen nicht gelyncht - im Gegenteil.
Ich applaudiere!
"Deine" Syntax ist viel intuitiver.
Nur: Die schliessenden Klammern bei stripslashes() hast Du vergessen.
Das Escapen nicht vergessen.
Die Häkchen nicht vergessen für die Feldwerte, auch für Zahlen!
Die Fehlerbehandlung nicht vergessen.
Wie wahr, wie wahr!
Wobei ich das Escapen etwas frueher machen wuerde:
Statt:
$hersteller = stripslashes($_POST['hersteller']);
/* ... */
$sql = "INSERT INTO $table SET";
$sql .= "hersteller = '".mysql_escape_string($hersteller)."'";
schreibe ich eher:
$hersteller = mysql_escape_string(stripslashes($_POST['hersteller']));
/* ... */
$sql = "INSERT INTO $table SET";
$sql .= "hersteller = '$hersteller'";
u.s.w. - das finde ich einfach uebersichtlicher.
Ist aber reine Geschmackssache.
mfg
Thomas
Hello Thomas,
Nur: Die schliessenden Klammern bei stripslashes() hast Du vergessen.
Irgendwas fehlt immer *umpf*
Das Escapen nicht vergessen.
Die Häkchen nicht vergessen für die Feldwerte, auch für Zahlen!
Die Fehlerbehandlung nicht vergessen.Wie wahr, wie wahr!
Wobei ich das Escapen etwas frueher machen wuerde:
Statt:
$hersteller = stripslashes($_POST['hersteller']);
/* ... */
$sql = "INSERT INTO $table SET";
$sql .= "hersteller = '".mysql_escape_string($hersteller)."'";schreibe ich eher:
$hersteller = mysql_escape_string(stripslashes($_POST['hersteller']));
Jein.
Das war natürlich mal wieder arg verkürzt von mir.
Man muss davon ausgehen, dass man nach dem stripslashes(), falls es denn notwendig ist, mit den Datenwerten noch eine Weile im Script weiterarbeitet und sie dann erst nach der Verarbeitung an die Speichern-Funktion übergibt.
Ich propagiere ja sowieso Arrays und da kann man das dann locker mit einer Schleife erledigen und hat überhaupt keine Schreibarbeit mehr.
/* ... */
$sql = "INSERT INTO $table SET";
$sql .= "hersteller = '$hersteller'";
Das ist dann wunderbar lesbar. Insofern hast Du recht. Für mein eigenes Tut werde ich das vielleicht so machen. da sieht man dann viel besser, was passiert.
Übrinens nochmal drauf rumgeritten:
Auch Zahlen sollte man in Häkchen übergeben, wenn sie nicht aus dem Script stammen. Da war neulich jemand, der ziemlich nervig gefragt hat, wieso.
Weil das Query sonst ziemlich leicht injizierbar ist. Das bedeutet, dass man mittles schlauer Tricks über das Webfomular die ganze Datenbank manipulieren kann. Die Wahrscheinlichkeit, das auszuschließen, besteht in der Kombination der Häkchen für ALLE Werte außer NULL und dem Escapen.
NULL ___muss___ man daher auch im Script generieren und darf es niemals direkt aus dem HTTP-Stream entnehmen.
So, nun reichts für heute. Nun wird nun noch mitgelesen.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Christian!
$result = mysql_db_query("INSERT $hersteller INTO handys");
Also weiss jemand was ich falsch mache????
Ja, du läßt Dir keine Fehler ausgeben.
Außerdem ist Dein SQL-Befehl "nicht so ganz" richtig.
Du solltest Dir erstmal das MYSQL-Manual und das PHP-Manual (Stichwort: $_GET und $_POST) am besten mal ein wenig anschauen.
Lesetip: http://www.mysql.com/doc/en/INSERT.html bzw. http://de2.php.net/manual/en/language.variables.predefined.php
MfG
Götz