# [GELÖST] Formular in MySQL Datenbank speichern funktioniert nicht



## Sn0w1 (12. Juni 2012)

*[GELÖST] Formular in MySQL Datenbank speichern funktioniert nicht*

Hello together, ich mal wieder...

Ich hab nun also folgenden Html formular code, saved as newsletter.html:


```
<form method="post" action="newsletter.php">
        <tr>
        <td>Vorname:</td>
        <td><input type="text" name="vorname" /></td>
        </tr>
        <br />
        <tr>
        <td>Nachname:</td>
        <td><input type="text" name="nachname" /></td>
        </tr>
        <br />
        <tr>
        <td>E-Mail Adresse:</td>
        <td><input type="text" name="mail" /></td>
        </tr>
        <tr>
        <td>Straße und Hausnummer:</td>
        <td><input type="text" name="strasse" /></td>
        </tr>
        <br />
        <tr>
        <td>Postleitzahl:</td>
        <td><input type="text" name="plz" /></td>
        </tr>
        <tr>
        <td>Ort:</td>
        <td><input type="text" name="ort" /></td>
        </tr>
        <br />
        <br />
        <td><input type="submit" value="Senden" /><input type="reset" value="Abbrechen" /></td>
```
Und folgenden php code saved as newsletter.php (ja username und passwort sind richtig eingetragen in zeile 2^^):


```
<?php
$verbindung = mysql_connect("localhost", "username", "passwort")
or die ("Falscher Benutzer, Passwort oder Server!");

mysql_select_db("beefsteak")
or die ("Verbindung zur Datenbank war nicht möglich!");

$vorname = $_POST["vorname"];
$nachname = $_POST["nachname"];
$mail = $_POST["mail"];
$strasse = $_POST["strasse"];
$plz = $_POST["plz"];
$ort = $_POST["ort"];

$eintrag = "INSERT INTO newsletter
(Vorname, Nachname, E-Mail Adresse, Straße/Hausnummer, PLZ, Ort)

VALUES
('$vorname', '$nachname', '$mail', '$strasse', '$plz', '$ort')";

$eintragen = mysql_query($eintrag);

if ($eintragen == true) {
    echo "OK"
}     else
{
    echo "no"
}
mysql_close($verbindung);
?>
```
Leider bekomme ich immer ein no durch die letzte if abfrage.. Das müsste heißen, das zwar eig alles geht aber er den eintrag nicht macht. Und nun stell ich mir die Frage obs an mir oder am Code liegt... Falls mal wer rüberschauen will..


----------



## Spacerat (12. Juni 2012)

Zuerstmal: escapen! Bitte escape unbedingt die Daten (z.B. Mit mysql_real_escape_string()), die in die Datenbank geschrieben werden, da sonst injections ohne Weiteres möglich sind. Die Resultate möchte ich gar nicht näher erläutern!

Dann: variablen nicht im String schreiben, sondern z.B. So: 

$sql = "INSERT INTO newsletter (feld1, feld2) VALUES ('".mysql_real_escape_string($var1)."', .mysql_real_escape_string($var1)."');";
(achte drauf, dass für die Variablen erst ein ' , dann direkt ein " bzw umgekehrt am Stringende steht)

Und dann per mysql_query. Am besten so:

$result = mysql_query($sql) or die(mysql_error());

Was die Query also ausführt und im Fehlerfall den mysql-Error zurückgibt, was Aufschluss über den Fehler gibt.

Ps: keine Leerzichen bei Feldnamen in einer Tabelle! 'E-Mail adresse' geht also nicht.


----------



## Sn0w1 (12. Juni 2012)

*AW: Formular in MySQL Datenbank speichern funktioniert nicht*

So der php code sieht nun so aus:


```
<?php
$verbindung = mysql_connect("localhost", "beefsteak_1", "12345")
or die ("Falscher Benutzer, Passwort oder Server!");

mysql_select_db("beefsteak_1")
or die ("Verbindung zur Datenbank war nicht möglich!");

$vorname = $_POST["vorname"];
$nachname = $_POST["nachname"];
$mail = $_POST["mail"];
$strasse = $_POST["strasse"];
$plz = $_POST["plz"];
$ort = $_POST["ort"];

$eintrag = "INSERT INTO newsletter
(Vorname, Nachname, E-Mail, Strasse/Hausnummer, PLZ, Ort)

VALUES
('".mysql_real_escape_string($vorname)."', '".mysql_real_escape_string($nachname)."', '".mysql_real_escape_string($mail)."', '".mysql_real_escape_string($strasse)."', '".mysql_real_escape_string($plz)."', '".mysql_real_escape_string($ort)."');";

$eintragen = mysql_query($eintrag)
or die(mysql_error());

if ($eintragen == true) {
    echo "OK";
}     else
{
    echo "Fail";
}
mysql_close($verbindung);
?>
```

Mit folgendem mysql_error:

You have an error in your SQL syntax; check the manual that corresponds  to your MySQL server version for the right syntax to use near '-Mail,  Strasse/Hausnummer, PLZ, Ort)  VALUES ('Max', 'Mustermann', 'max@t-' at line 2

Vllt hilft das ja zur Fehlerbehebung..


So long
Sn0w1


----------



## Spacerat (12. Juni 2012)

*AW: Formular in MySQL Datenbank speichern funktioniert nicht*

Das hätte ich sagen müssen: - und / (bzw. generell Sonderzeichen) sind bei Spalten-/Tabellennamen ebenfalls nicht erlaubt. Hast du die Tabelle in der Datenbank angelegt? Wie sieht das da überhaupt aus? 

Die Insert-Zeile würde ich z.B. so machen:



> (vorname, nachname, email, strasseHausnummer, plz, ort)


----------



## Sn0w1 (12. Juni 2012)

*AW: Formular in MySQL Datenbank speichern funktioniert nicht*

Ich tippel das mal fix um.. Hab mir sowas ähnliches gedacht. Aber was der User eingibt z.B. ein t-online.de wäre in ordnung, oder?


----------



## Spacerat (12. Juni 2012)

*AW: Formular in MySQL Datenbank speichern funktioniert nicht*

Das ist ok, ja  Es geht nur um die Bezeichnungen der Spalten in den Tabellen.


----------



## Sn0w1 (12. Juni 2012)

*AW: Formular in MySQL Datenbank speichern funktioniert nicht*

Code aktuell:

```
<?php
$verbindung = mysql_connect("localhost", "beefsteak_1", "12345")
or die ("Falscher Benutzer, Passwort oder Server!");

mysql_select_db("beefsteak_1")
or die ("Verbindung zur Datenbank war nicht möglich!");

$vorname = $_POST["vorname"];
$nachname = $_POST["nachname"];
$mail = $_POST["mail"];
$strasse = $_POST["strasse"];
$plz = $_POST["plz"];
$ort = $_POST["ort"];

$eintrag = "INSERT INTO newsletter
(Vorname, Nachname, Mail, Strasse, PLZ, Ort)

VALUES
('".mysql_real_escape_string($vorname)."', '".mysql_real_escape_string($nachname)."', '".mysql_real_escape_string($mail)."', '".mysql_real_escape_string($strasse)."', '".mysql_real_escape_string($plz)."', '".mysql_real_escape_string($ort)."');";

$eintragen = mysql_query($eintrag)
or die(mysql_error());

mysql_close($verbindung);
?>
```

Und wunder oh Wunder... Es funktioniert.. Danke für den Tipp mit den Sonderzeichen, wäre ich vllt in 20 Jahren drauf gekommen.. ^^


----------



## JimSim (14. Juni 2012)

*AW: [GELÖST] Formular in MySQL Datenbank speichern funktioniert nicht*

Es gibt eigentlich keinen Grund warum man nicht prepared Statements verwenden sollte... Weil mit Prepared Statements gibts keine sql injection.
also:

```
$sql = 'INSERT INTO tabelle (wert1, wert2, wert3) VALUES ( ?, ?, ?)';
$stmt = $db->prepare($sql);
if(!$stmt) {
     return $db->error;
}
$stmt->bind_param('iss', $wert1, $wert2, $wert3);
if(!$stmt->execute()) {
    return $stmt->error;
}
```

Bei bind_param musst du als ersten Wert für jede Variable den Typen angeben (s für String i für Integer). In dem Beispiel also $wert1 als Integer $wert2 und $wert3 als String.


Je nachdem was du mit den Daten machst, sollte man aber evtl noch auf javascript injection achten...

EDIT: $db ist bei dir $verbindung


----------



## Sn0w1 (14. Juni 2012)

*AW: [GELÖST] Formular in MySQL Datenbank speichern funktioniert nicht*

Hat sich ja jetzt bereits erledigt ^^


----------

