Unity Loginsystem mit PHP 500 Error?
Hallo, wisst ihr vielleicht warum dieser Code nicht funktioniert?
Ich habe einen Root Server mit MariaDB, PHP 8.2 und phpMyAdmin.
Das ist mein Servercode:
<?php
$servername = "localhost";
$username = "blabla";
$password = "blabla";
$dbname = "blabla";
// variables submited by user
$loginUser = $_POST["loginUser"];
$loginPass = $_POST["loginPass"];
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Conected successfully, now we will show the users.<br><br>";
$sql = "SELECT password FROM users WHERE username = " . $loginUser;
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while ($row = $result->fetch_assoc()) {
if ($row["password"] == $loginPass) {
echo "login Success";
}
else {
echo "wrong credentials";
}
}
}
else {
echo "Username does not exist";
}
$conn->close();
?>
Das ist mein Unity-Code:
void Start()
{
// A correct website page.
StartCoroutine(Login("testuser", "123456"));
}
IEnumerator Login(string username, string password)
{
WWWForm form = new WWWForm();
form.AddField("loginUser", username);
form.AddField("loginPass", password);
using (UnityWebRequest www = UnityWebRequest.Post("http://blabla/Login.php", form))
{
yield return www.SendWebRequest();
if www.result != UnityWebRequest.Result.Success)
{
Debug.Logwww.error);
}
else
{
Debug.Logwww.downloadHandler.text);
}
}
}
In Unity bekomme ich folgende Fehlermeldung:
Und wenn ich auf das PHP-Dokument im Internet gehe:
Danke für eure Hilfe.
2 Antworten
Aktiviere Error Logging für dein PHP-Skript, um mehr Informationen zum Fehler zu erhalten:
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
Beachte im Übrigen, dass dein Login-Skript nicht sicher ist. Zum einen ermöglichst du einem Anfragenden, SQL-Injections durchzuführen und zum anderen speicherst du Passwörter offensichtlich in Klartextform. Verwende stattdessen Prepared Statements und speichere Passwörter nur als Hash.
Versuche mal:
Username: 'x' UNION SELECT 'geheim' as password
Passwort: geheim
Benutze daher Prepared Statements...
Das du dir password_hash und password_verify benutzen solltest und Passwörter nicht unverschlüsselt speichern solltest wurde schon gesagt.
Soweit so gut, das löst nur leider dein Problem nicht. Das PHP Script scheint syntaktisch korrekt zu sein, also schaue mal ins error.log des Apache, warum der da einen Fehler 500 meldet. Oder in den Netzwerk-Tab im Browser, ob mit dem 500 da eine Ausgabe kommt.
Und du hast noch ein Problem: Im JS vergleichst du nur auf Success, setzt aber im Fehlerfall nicht den HTTP Statuscode im PHP, so dass das immer 200 zurück gibt. Im Fehlerfall solltest du http_response_code(403) im PHP setzen, damit das JS das auch erkennt... wegen deiner ganzen Ausgaben braucht es da wahrscheinlich noch ein ob_start() ganz am Anfang.
Beim SQL Query fehlen die Anführungszeichen. Baue da ein Prepared Statement ein, dann ist es gleich "richtig" behoben. Zum schnell testen:
$sql = "SELECT password FROM users WHERE username = '" . $loginUser . "'";
Danke, hat funktioniert. ich taste mich gerade an php an fuer mein unity login system. Das youtube tutorial ist etwas aelter deswegen.
Die hier bisher erwähnten Fehler/Probleme sind nicht dem Alter zuzuschreiben.
hi hattest recht hab danach das video weitergeguckt und bemerkt das er den fehler selbst behoben hatte ;( haha aber war zu faul um dir nochmal zu antworten
danke fuer die antwort bekomme folgenden fehler