Sorry für OT, aber… Bin ich der einzige der bei „md5“ eher an Minecraft als an Passwörter denkt?
Login-Skript
- Bud
- Thread is marked as Resolved.
-
-
MineDraft5?
-
Wenn du verstanden hast, warum man Passwörter hashed, wäre| jetzt ein guter Zeitpunkt, etwas über Security zu lernen:
-
PHP
Display More<?php // Starte die Sitzung und überprüfe, ob der Benutzer bereits angemeldet ist session_start(); if (isset($_SESSION['user'])) { header('location: dashboard.php'); exit(); } // Verbinde zur Datenbank $db = mysqli_connect('localhost', 'benutzername', 'passwort', 'datenbankname'); // Verarbeite das Anmeldeformular if (isset($_POST['login_btn'])) { // Hole die Eingaben des Benutzers $username = mysqli_real_escape_string($db, $_POST['username']); $password = mysqli_real_escape_string($db, $_POST['password']); // Prüfe, ob die Felder ausgefüllt sind if (empty($username)) { $errors['username'] = 'Bitte gib deinen Benutzernamen ein'; } if (empty($password)) { $errors['password'] = 'Bitte gib dein Passwort ein'; } // Wenn keine Fehler vorliegen, versuche den Benutzer anzumelden if (count($errors) == 0) { // Erstelle eine vorbereitete Anweisung $stmt = mysqli_prepare($db, 'SELECT * FROM users WHERE username=? AND user_type IN ("admin", "leader", "user")'); // Binde die Parameter an die Anweisung mysqli_stmt_bind_param($stmt, 's', $username); // Führe die Anweisung aus mysqli_stmt_execute($stmt); // Binde die Ergebnisvariablen mysqli_stmt_bind_result($stmt, $id, $username, $email, $hashed_password, $user_type); // Fetch das Ergebnis if (mysqli_stmt_fetch($stmt)) { // Überprüfe das Passwort if (password_verify($password, $hashed_password)) { // Anmeldung erfolgreich $_SESSION['user'] = [ 'id' => $id, 'username' => $username, 'email' => $email, 'user_type' => $user_type ]; header('location: dashboard.php'); } else { // Falsches Passwort $errors['password'] = 'Dein Passwort ist falsch'; } } else { // Kein Benutzer mit diesem Namen gefunden $errors['username'] = 'Es gibt keinen Benutzer mit diesem Namen'; } // Schließe die vorbereitete Anweisung mysqli_stmt_close($stmt); } } ?> <!DOCTYPE html> <html> <head> <title>Anmelden für Bud</title> </head> <body> <div> <h1>Anmelden</h1> <form action="login.php" method="post"> <label for="username">Benutzername:</label><br> <input type="text" name="username" value="<?php echo isset($_POST['username']) ? htmlspecialchars($_POST['username']) : ''; ?>"><br> <?php if (isset($errors['username'])) { ?> <div><?php echo $errors['username']; ?></div> <?php } ?> <label for="password">Passwort:</label><br> <input type="password" name="password"><br> <?php if (isset($errors['password'])) { ?> <div><?php echo $errors['password']; ?></div> <?php } ?> <button type="submit" name="login_btn">Anmelden</button> </form> </div> </body> </html>
-
Eine Anmerkung habe ich noch
Wozu den Username durch mysqli_real_escape_string jagen, wenn du anschließend prepared Statement benutzt?
Und password durch mysqli_real_escape_string jagen sieht mir auch nicht so sinnvoll aus.
-
Deswegen, Ende 😂
Ich bin kein php Profi 🤦♂️😂
Aber wenn ich das jetzt so lese könnte man das tatsächlich weg lassen aber da ich mir da nicht sicher war habe ich es so gemacht, wie ich es am sichersten fänd.
Aber gerne lerne ich immer neues dazu. Gerne an ein paar Beispielcodes 🤗😚
https://www.php.net/manual/de/mysqli.real-escape-string.php
Allerdings finde ich keine Anmerkungen, dass es unnötig wird.
Aber dennoch: Bin natürlich immer froh, wenn viel know how zusammen kommt. So lernt man am besten:)
-
https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php
Steht glaub hier, das gebundene Parameter nicht escaped werden müssen
-
Joar auch gerade nachgelesen:)
-
Ich melde mich mal kurz mit einer kurzen Zwischenfrage. Ich versuche wiederzugeben, wann eine MySQL Tabelle das letzte mal aktualisiert wurde:
Code$db = mysqli_connect("ip","user","pw","db"); $netcup = "SHOW TABLE STATUS LIKE 'netcup' "; $result = mysql_query ($netcup, $db)); echo "Letztmalig aktualisiert am " . date("d.m.Y H:i", $result);
Aber allerdings wird einfach nichts ausgegeben. Woran liegt das?
-
Aber allerdings wird einfach nichts ausgegeben. Woran liegt das?
Weil du nicht eine Row auswählst wo Date hat...
https://dev.mysql.com/doc/refm…en/show-table-status.html
Die Verfügbaren columns kommen auch auf die Engine drauf an. Vlt mal deine Abfrage über phpmyadmin ausführen oder var_dump($result) und schauen was überhaupt zurück kommt -
Aber allerdings wird einfach nichts ausgegeben. Woran liegt das?
Wenn du den mysqli Treiber benutzt, heißt die Query Funktion mysqli_query() und nicht mysql_query
-
Wenn du den mysqli Treiber benutzt, heißt die Query Funktion mysqli_query() und nicht mysql_query
Dummer Fehler, danke für den Hinweis, hat aber leider keine Besserung gebracht...
Weil du nicht eine Row auswählst wo Date hat...
https://dev.mysql.com/doc/refm…en/show-table-status.html
Die Verfügbaren columns kommen auch auf die Engine drauf an. Vlt mal deine Abfrage über phpmyadmin ausführen oder var_dump($result) und schauen was überhaupt zurück kommtIch hab aufgrund deines Kommentars mal einen neuen Versuch gestartet, allerdings bricht mein kompletter Code nach dem Script ab, und natürlich funktioniert er auch nicht... Wo ist mein Fehler?
-
hat aber leider keine Besserung gebracht...
l_
li_
Du mixt in deinem Codebeispiel wieder die Treiber durcheinander.
Ist das echter Code? Wenn nein, poste bitte Teile deines echten Codes.
Womit editierst du deinen Code eigentlich? Der veraltete mysql Treiber müsste eigentlich durch eine IDE als solcher angezeigt werden.
-
Du mixt in deinem Codebeispiel wieder die Treiber durcheinander.
Verdammt, ich war zu langsam, habs beim posten gesehen, und wollte es noch schnell ausbessern
Ist das echter Code? Wenn nein, poste bitte Teile deines echten Codes.
Der Code stimmt 1:1, mit Ausnahme des Tabellennamen nitram.
Womit editierst du deinen Code eigentlich? Der veraltete mysql Treiber müsste eigentlich durch eine IDE als solcher angezeigt werden.
Zuhause Dreamweaver, jetzt in der Arbeit am Laptop nutze ich das WCP^^
-
Zuhause Dreamweaver, jetzt in der Arbeit am Laptop nutze ich das WCP^^
Gerade als Anfänger würde dir eine gut eingerichtete Dev-Umgebung wahrscheinlich deutlich weiter helfen.
Als IDE könnte man PHPStorm oder Webstorm nehmen. Und dann einen lokalen Dev-Webserver installieren, auf dem dann auch jegliche Debugausgaben aktiviert sind.
Warum ist das besser? Eine gute IDE weißt dich gut auf Syntax und Logik Fehler hin. Während der Dev-Webserver mit Debugausgaben dir alle Fehler anzeigt und nicht einfach verschluckt. Die Fehlermeldungen, die der anzeigt kannst du dann auch googlen, das hilft enorm weiter.
-
Gerade als Anfänger würde dir eine gut eingerichtete Dev-Umgebung wahrscheinlich deutlich weiter helfen.
Als IDE könnte man PHPStorm oder Webstorm nehmen. Und dann einen lokalen Dev-Webserver installieren, auf dem dann auch jegliche Debugausgaben aktiviert sind.
Warum ist das besser? Eine gute IDE weißt dich gut auf Syntax und Logik Fehler hin. Während der Dev-Webserver mit Debugausgaben dir alle Fehler anzeigt und nicht einfach verschluckt. Die Fehlermeldungen, die der anzeigt kannst du dann auch googlen, das hilft enorm weiter.
Ich schau mir das die Tage mal zuhause an, aber Danke dir schon mal für den Hinweis
-
Ansonsten kann ich VS Code empfehlen: https://code.visualstudio.com/docs/languages/php
Ist kostenfrei, Open Source, mit einem riesigen Plugin Marktplatz für zig Sprachen, läuft unter Windows, Linux und Mac.
Der MySQLi PHP Treiber ist nicht sonderlich gesprächig, da hilft ein Aufruf der Methode mysqli_error
https://www.php.net/manual/de/mysqli.error.php
Für alle übrigen Fehler kann es hilfreich sein, in den ersten Anweisungen das Error Reporting hochzudrehen:
-
PHP
Display More<?php $mysqli = new mysqli("serverip", "user", "pw", "datenbank"); if ($mysqli->connect_errno) { die("Verbindung fehlgeschlagen: " . $mysqli->connect_error); } $sql = "SHOW TABLE STATUS LIKE 'tabellenname'"; $statement = $mysqli->prepare($sql); $statement->execute(); $result = $statement->get_result(); if($result){ $row = $result->fetch_object(); echo $row->Update_time; } ?>
Mail in eine Datei.
-
-
Das kann aber eigentlich nicht sein. Ich hatte das extra auf nem nc-Hosting getestet.
Bei einem der Platzhalter das anführungszeichen entfernt?
Schalt mal unter den php Einstellungen Display error ein.