Warum kann dieser php code keine Verbindung zur Datenbank herstellen?
Ich sitze hier und verzweifle förmlich daran, warum sich die eingegebenen Daten aus:
<!DOCTYPE html>
<html>
<head>
<h1>Der Weg ins Paradies</h1>
<link rel="stylesheet" href="GL.css">
</head>
<p>Die Welt dadraußen ist trist, doch <br> sein kein Schaf, sei ein Wolf</p>
<form method="post" action="Registrierungsseite.php">
<p><label>Name:<br><input type="text" name="Name"></label></p>
<p><label>E-Mail:<br><input type="text" name="Mail"></label></p>
<p><label>Passwort:<br><input type="password" name="Passwort"></label></p>
<p><label>IBAN:<br><input type="text" name="IBAN"></label></p>
<p><input type="submit" value="Registrieren"></p>
</form>
</body>
</html>
nicht in der MySQL-Datenbank wiederfinden.
Meine PHP-Datei ist diese hier:
<?php
// Get the form data
$name = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];
$iban = $_POST['iban'];
// Connect to the MySQL database
$db = mysqli_connect("localhost", "root", "", "paradies");
// Check if the connection was successful
if (mysqli_connect_errno()) {
// If the connection failed, display an error message and exit
echo "Failed to connect to MySQL: " . mysqli_connect_error();
exit;
}
// Insert the form data into the MySQL database
$query = "INSERT INTO paradies (name, email, password,iban) VALUES ('$name', '$email', '$password', '$iban')";
if (mysqli_query($db, $query)) {
// If the insert was successful, redirect the user to the login page
header("Location: GL.php");
exit;
}
else {
// If the insert failed, display an error message
echo "Error: " . $query . "<br>" . mysqli_error($db);
}
// Close the MySQL connection
mysqli_close($db);
?>
Ich sehe den Fehler einfach nicht, da sobald man die Daten absendet, es zwar zur PHP-Datei weitergeleitet wird, dann jedoch lediglich der Code zu sehen ist. Die Datenbank hat dann natürlich auch keinen Eintrag.
Danke im Voraus.
2 Antworten
Es scheint, dass das Formular-Element mit dem Namen 'Name' als "name" in PHP genutzt wird, aber im HTML als "Name" angegeben wurde. Ebenso ist es mit den anderen Formularelementen.
Überprüf mal, ob die Namen in PHP und HTML übereinstimmen. Außerdem stelle sicher, dass die Datenbank "paradies" mit einem richtigen Benutzernamen und Passwort auf "localhost" erreichbar ist.
Also - das Formular wird richtig angezeigt, aber wenn du es abschickst, wird der Quellcode des PHP-Files angezeigt?
Falls das so ist, lässt du das entweder nicht über einen Webserver laufen (sondern einfach übers Filesystem, file://...), oder der Webserver weiß nichts mit .php-Dateien anzufangen, d.h. ist nicht für PHP konfiguriert oder erwartet eine andere Endung.
Du verwendest abgesehen davon im PHP-File die Label-Namen in Kleinbuchstaben, hast die im Formular aber mit großem ersten Buchstaben definiert.
Ich würde Sachen aus einem Formular niemals direkt in ein SQL-Statement schreiben, das ist ein sehr gutes Einfallstor für SQL Injection.
Vor dem Redirect solltest du die Datenbank-Verbindung zumachen; ist nicht unbedingt nötig, da PHP das auch automatisch machst, wäre aber sauberer.
Ich würde die Zugangsdaten zum SQL-Server in eine Include-Datei packen, die vom PHP-Skript eingelesen wird. Damit verhindert man, dass die Zugangsdaten nach außen gegeben werden, wenn - wie hier - mal der Web-Server nicht so ganz funktioniert und den Source des PHP-Skripts ausgibt.
Danke auch dir für deine Tipps, werde ich umsetzten
Danke für die Hilfe, hab echt zu wenig geschlafen <3
Noch zwei weitere Fehler lassen sich im head-Element des Dokuments finden.
Zur Datenspeicherung lässt sich noch ergänzen, dass ein Passwort keinesfalls im Klartext abgespeichert werden sollte. Ein Hash des Passworts, wie ihn die password_hash-Funktion generiert, wäre zu bevorzugen.
Um Kodierungsprobleme u.a. Injectionmöglichkeiten zu vermeiden, wäre ebenfalls zu empfehlen, an den jeweiligen Schnittstellen eine einheitlich solide Zeichenkodierung vorzugeben. Für die Datenbank könnte man utf8mb4 einstellen, nach Verbindungsaufbau die Kodierung für die Kommunikation setzen (mysqli_set_charset) und im head des HTML-Dokuments einen meta-Tag hinzufügen.