Formulardaten mit PHP in XML schreiben.

Ok, ich habe jetzt einen Schutz gegen diese SQL-Injections. Seltsamer weise werden die Korrekten Variablen jetzt auch in die Tabelle geschrieben, ausser "str". Woran könnte das liegen? was mache ich Falsch?
Das mit dem Fehlerhandling habe ich nicht hingekriegt,
PHP:
if (!$mysqli->error) {
  printf("Errormessage: %s\n", $mysqli->error);
}
hat nichts gemacht.

Mein Code bis jetzt:
PHP:
<?php
//verbindung wird hergestellt
$db = mysqli_connect("localhost", "php", "passwort", "bell");
//eventuelle fehler werden ausgespuckt
if(!$db)
{
  exit("Verbindungsfehler: ".mysqli_connect_error());
}
//variablen werden auf die Werte des Formulars gesetzt
$vname = $_POST["vorname"];
$name = $_POST["name"];
$str = $_POST["strasse"];
$strnr = $_POST["hausnummer"];
// gegen SQL-Injection
$vnameI = string mysqli::real_escape_string ( string $vname )
$nameI = string mysqli::real_escape_string ( string $name )
$strI = string mysqli::real_escape_string ( string $str )
$strnrI = string mysqli::real_escape_string ( string $strnr )
//endlich alles in DB schreiben
$eintragen = mysqli_query($db, "INSERT INTO daten (VORNAME, NACHNAME, STRASSE, STRASSENNUMMER) VALUES ('$vnameI', '$nameI', '$strI', '$strnrI')");
?>

BELL
 
Hi

Es würde mich sehr wundern, wenn
Code:
$vnameI = string mysqli::real_escape_string ( string $vname )
überhaupt irgendwie funktioniert. Kommen keine Syntaxwarnungen von PHP?

Besser so:
Code:
$vnameI = mysqli::real_escape_string ($vname) ;
(also ohne "string" und mit ";")
(und noch besser wären Prepared Statements, aber ist jetzt auch nicht so wichtig)
 
Hi @sheel

OK, ich habs geändert, aber an meinem Problem hat sich nichts verändert D:

Bell

Ok, jetzt wird gar nichts mer in die Teblle geschrieben... :(

HI,

Es war doch nur ein TIppfehler meinerseits. Die Strasse wird aber trotzdem noch nicht übertragen.

Danke, BELL
 
Zuletzt bearbeitet von einem Moderator:
Dann wird das Feld vermutlich nicht richtig übertragen, weil es vielleicht im HTML-Code anders heißt. Ein var_dump($_POST); wird da vermutlich hilfreich sein. Allgemein zum Thema Debugging: http://php-de.github.io/jumpto/faq/#debugging In deinem ersten Beitrag hier im Thread heißt das Feld "straße" und nicht "strasse".

Noch ein etwas anderer Vorschlag:

PHP:
$db = mysqli_connect("localhost", "php", "passwort", "bell");

if (!$db) {
    die("Verbindungsfehler: " . mysqli_connect_error());
}

$eintragen = mysqli_query($db, "
    INSERT INTO
            daten
        (
            VORNAME,
            NACHNAME,
            STRASSE,
            STRASSENNUMMER
        )
    VALUES
        (
            '" . mysqli_real_escape_string($db, $_POST['vorname'])    . "',
            '" . mysqli_real_escape_string($db, $_POST['name'])       . "',
            '" . mysqli_real_escape_string($db, $_POST['strasse'])    . "',
            '" . mysqli_real_escape_string($db, $_POST['hausnummer']) . "'
        )
");
 
OK, das mit strasse stimt so und es hat sich sonst auch nichts getan. Ich poste hier jetzt einmel den gesamten code Stand jetzt:

Code:
<form action="f2.php" method="post">
<!-- Formular -->
 <div style="margin-left:auto;
margin-right:auto;
width: 600px;
height: 450px;"><font face="Arial" size="6">Ihr Vorname:  <input type="text" name="vorname" placeholder="Max" autofocus style="width: 300px; height: 36px; font-size: 30px; font-family: Arial;"/></font>
 <br>
 <br>
 <font face="Arial" size="6">Ihr Name: <input type="text" name="name" placeholder="Mustermann" style="width: 300px; height: 36px; font-size: 30px; font-family: Arial;"/></font>
 <br>
 <br>
 <font face="Arial" size="6">Ihre Straße: <input type="text" name="strasse" placeholder="Musterstraße" style="width: 300px; height: 36px; font-size: 30px; font-family: Arial;"/></font>
 <br>
 <br>
 <font face="Arial" size="6">Ihre Hausnummer: <input type="number" name="hausnummer" placeholder="42" min="0" step="1" style="width: 300px; height: 36px; font-size: 30px; font-family: Arial;"/></font>
 <br>
 <br>
 <br>
 <input type="image" src="Absenden.png" alt="Absenden"></div>
</form>
</div>
</div>
<!-- Formulardaten werden in MYSQL Database "bell", Tabelle "daten" geschrieben -->
<?php
$db = mysqli_connect("localhost", "php", "passwort", "bell");
if (!$db) {
  die("Verbindungsfehler: " . mysqli_connect_error());
}
$eintragen = mysqli_query($db, "
  INSERT INTO
  daten
  (
  VORNAME,
  NACHNAME,
  STRASSE,
  STRASSENNUMMER
  )
  VALUES
  (
  '" . mysqli_real_escape_string($db, $_POST['vorname'])  . "',
  '" . mysqli_real_escape_string($db, $_POST['name'])  . "',
  '" . mysqli_real_escape_string($db, $_POST['strasse'])  . "',
  '" . mysqli_real_escape_string($db, $_POST['hausnummer']) . "'
  )
");
?>

Natürlich ist das nur, was dzu gehört.

Danke fürs lesen, BELL
 
Wie ist das STRASSE-Feld in der Datenbank denn definiert? Welchen Datentypen hat das und so?

Im Zweifel immer debuggen. Lass dir den fertigen Query-String zum Beispiel mal anzeigen.
 
Hier die Liste mit den Datentypen (aus der Konsole):
Code:
+-------------------+-------------+------+-----+---------+----------------+
| Field  | Type  | Null | Key | Default | Extra  |
+-------------------+-------------+------+-----+---------+----------------+
| BESTELLUNGSNUMMER | int(11)  | NO  | PRI | NULL  | auto_increment |
| VORNAME  | varchar(50) | YES  |  | NULL  |  |
| NACHNAME  | varchar(50) | YES  |  | NULL  |  |
| STRASSE  | varchar(70) | YES  |  | NULL  |  |
| STRASSENNUMMER  | int(11)  | YES  |  | NULL  |  |
+-------------------+-------------+------+-----+---------+----------------+

Bei echo wird nichts ausgegeben :(

D.H.: ein varchar mit 70 Zeichen höchstlänge.

Bell
 
Zuletzt bearbeitet:
Ich meinte:

PHP:
$query = "
  INSERT INTO
  daten
  (
  VORNAME,
  NACHNAME,
  STRASSE,
  STRASSENNUMMER
  )
  VALUES
  (
  '" . mysqli_real_escape_string($db, $_POST['vorname'])  . "',
  '" . mysqli_real_escape_string($db, $_POST['name'])  . "',
  '" . mysqli_real_escape_string($db, $_POST['strasse'])  . "',
  '" . mysqli_real_escape_string($db, $_POST['hausnummer']) . "'
  )
");

var_dump($query);

Auch die Datenbank liefert Fehlerausgaben:

- http://phpforum.de/forum/showthread.php?t=240643 (musst etwas scrollen)
 
Ok der neue code ist:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
</style>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>BELL - Brötchen Einfach Liefern Lassen!</title>
<br>
<div style="margin-left:auto;
margin-right:auto;
width: 1650px;
height: 450px;
background-color: #FFFFFF;">
<br>
<div style="margin-left:auto;
margin-right:auto;
width: 1600px;
height: 400px;
background-color: #77D4FF;">
<img style="margin: auto; width: 1600px;" src="Logo.png" alt="Logo">
</div>
</div>
</head>
<body bgcolor="#77D4FF">

<br>
<br>

<div style="margin-left:auto;
margin-right:auto;
width: 700px;
height: 500px;
background-color: #FFFFFF;">
<br>
<div style="margin-left:auto;
margin-right:auto;
width: 650px;
height: 450px;">
<br>
<form action="f2.php" method="post">
 <div style="margin-left:auto;
margin-right:auto;
width: 600px;
height: 450px;"><font face="Arial" size="6">Ihr Vorname:  <input type="text" name="vorname" placeholder="Max" autofocus style="width: 300px; height: 36px; font-size: 30px; font-family: Arial;"/></font>
 <br>
 <br>
 <font face="Arial" size="6">Ihr Name: <input type="text" name="name" placeholder="Mustermann" style="width: 300px; height: 36px; font-size: 30px; font-family: Arial;"/></font>
 <br>
 <br>
 <font face="Arial" size="6">Ihre Straße: <input type="text" name="straße" placeholder="Musterstraße" style="width: 300px; height: 36px; font-size: 30px; font-family: Arial;"/></font>
 <br>
 <br>
 <font face="Arial" size="6">Ihre Hausnummer: <input type="number" name="hausnummer" placeholder="42" min="0" step="1" style="width: 300px; height: 36px; font-size: 30px; font-family: Arial;"/></font>
 <br>
 <br>
 <br>
 <input type="image" src="Absenden.png" alt="Absenden"></div>
</form>
</div>
</div>

<br>
<div style="margin-left:auto;
margin-right:auto;
width: 650px;
height: 130px;
background-color: #FFFFFF;">
<br>
<div style="margin-left:auto;
margin-right:auto;
width: 600px;
height: 100px;
background-color: #FFFFFF;">
<a href="/iisstart.htm">
<img style="margin: auto; width: 600px;" src="Back.png" alt="Zurück zur Hauptseite">
</a>
</div>
</div>
<br>
<?php
$db = mysqli_connect("localhost", "php", "passwort", "bell");
if(!$db)
{
  exit("Verbindungsfehler: ".mysqli_connect_error());
}
$query = "
 INSERT INTO
 daten
 (
 VORNAME,
 NACHNAME,
 STRASSE,
 STRASSENNUMMER
 )
 VALUES
 (
 '" . mysqli_real_escape_string($db, $_POST['vorname'])  . "',
 '" . mysqli_real_escape_string($db, $_POST['name'])  . "',
 '" . mysqli_real_escape_string($db, $_POST['straße'])  . "',
 '" . mysqli_real_escape_string($db, $_POST['hausnummer']) . "'
 )
";
mysqli_query($db, $query)
  or trigger_error('Fehler in Query "' . $sql . '". Fehlermeldung: ' . mysqli_error($db), E_USER_ERROR);
var_dump($query);
?>


</body>
</html>

Und als Ausgabe gibt es mir:
Code:
string(143) " INSERT INTO daten ( VORNAME, NACHNAME, STRASSE, STRASSENNUMMER ) VALUES ( 'sefseg', 'wartgr', 'waedef', '56' ) "

Danke für die Antwort, bell
 
Zurück