Nochmal mein DB Eintrag

Wipeout

Erfahrenes Mitglied
Folgender Code soll einfach nur die Daten in die DB eintragen

PHP:
<?
$name = $_POST['name'];
$email = $_POST['email'];
$url = $_POST['url'];
$nachricht = $_POST['nachricht'];
$db = new mysqli($host,$username,$password,$database);
    if (mysqli_connect_errno())
        {
            echo ' <h1 id="fehler">Konnte keine Verbindung zur Datenbank herstellen</h1> ';
        }
    $sql = "INSERT INTO gaestebuch (Name,Email,Webseite,Text) VALUES (".$name.",".$email.",".$url.",".$nachricht.")";
    $ergebnis = $db->query($sql);
    if (!$ergebnis)
        {
            echo ' <h1 id="fehler">Die SQL Abfrage ist fehlerhaft " '.$db->error;
        }
?>

als Fehler kriege ich

Die SQL Abfrage ist fehlerhaft " 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 '@test.de,,jhkkhjkkhj)' at line 1

Ich finde nur irgendwie keinen wirklichen Fehler oder ich bin mal wieder blind ;)
 
Hi

a) Lass dir $sql einfach einmal mit echo ausgeben
b) SQL-Injections kann man bei deiner Vorgehenweise wunderbar machen.
Informier dich über Prepared Statements.
 
Hallo,

sorry, will dir echt nicht zu nahe treten, aber dein Code ist ein gutes Beispiel dafür, wie man es nicht macht. Wegen solchen Eskapaden hat PHP einen schlechten Ruf, und wozu? Zu recht! :)

Das hier sieht nicht nur viel übersichtlicher aus sondern erledigt den Job auch in einer einigermaßen sicheren Weise:

PHP:
ini_set( 'display_errors', 1 );
error_reporting( -1 );
$db = new mysqli( $host, $username, $password, $database );

if ( mysqli_connect_errno() ) {
printf( "Connect failed: %s\n", mysqli_connect_error() );
exit();
}

if ( $stmt = $db->prepare("INSERT INTO gaestebuch (Name,Email,Webseite,Text) VALUES (?, ?, ?, ?)") )
{
  $stmt->bind_param("ssss", $name, $email, $url, $nachricht);
  $stmt->execute();
  $stmt->close();
}
else
{
  die( "MySQLi error: " . $db->error );
}

EDIT: Es muss natürlich $db->error heißen, und nicht $stmt->error, denn $stmt ist im else-Fall false oder null.
 
Zuletzt bearbeitet:
Zurück