PHP Login-Script

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
Hallo Community,

ich habe folgendes Problem. Ich habe ein Login-Script geschrieben das auch soweit ganz gut funktioniert, zumindest wenn man die Anmeldedaten manuell in das Script schreibt. Sobald ich meine bereits erstellte Datenbank heranziehe um Anmeldeinformationen direkt aus der Datenbank zu entnehmen funktioniert der Login nicht mehr. Ich vermute das es sich nur um einen kleinen Fehler handelt aber ich finde ihn einfach nicht. Nochmal ein paar Eckdaten: Ja ich habe bereits eine funktionierende Datenbank mit registrierten Nutzern und die Verbindung zur Datenbank funktioniert auch.

Hier das Script:

<?php
session_start();
$pdo = new PDO('mysql:host=localhost;dbname=MyWebsite', 'root', '');
?>
<?php
if (isset($_POST["Email"]) && isset($_POST["Passwort"])) {
if ($_POST["Email"] == $Email &&
$_POST["Passwort"] == $Passwort) {
$url = (isset($_GET["url"])) ? nl2br($_GET["url"]) : "Mac_Version.html";
header("Location: $url");
}
}
?>


<html>
<head>
<title> Gesch&uuml;tzter Bereich</title>
</head>
<body>
<form method="post">
E-Mail: <input type="text" name="benutzer" size="10" /><br/>
Passwort: <input type="password" name="passwort" size="10" /><br/>
<input type="submit" value="Login"/>
</form>
</body>
</html>

Vielen Dank schon mal im Voraus :)
 

Josh_

deaktivierter Benutzer
Registriert
02.03.16
Beiträge
15
Wo bekommst du den die Daten aus der DB her? Was soll das nl2br für die URL?

Das schaut für mich unvollständig aus.
 

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
Unvollständig wird es nicht sein da ich ja schon gesagt hatte das dass Script an sich funktioniert sobald man die Anmeldedaten manuell im Script einträgt.

Ich glaube das der Fehler in dieser Zeile liegt:

if (isset($_POST["Email"]) && isset($_POST["Passwort"])) {
if ($_POST["Email"] == $Email &&
$_POST["Passwort"] == $Passwort)

Die Informationen aus der Datenbank sollen aus der Spalte $Passwort und $Email entnommen werden doch das will irgendwie nicht klappen.

Ach und das nl2br ist jetzt mal ganz grob gesagt ein Bestandteil meiner Session so das die URL nach erfolgreichem Login quasi ein wenig verändert wird.
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Ich glaube das der Fehler in dieser Zeile liegt:

if (isset($_POST["Email"]) && isset($_POST["Passwort"])) {
if ($_POST["Email"] == $Email &&
$_POST["Passwort"] == $Passwort)
Ja, du verwendest "Email" und "Passwort" als Key für das POST-Array. Im HTML-Formular sind die aber "benutzer" und "passwort".

Die Informationen aus der Datenbank sollen aus der Spalte $Passwort und $Email entnommen werden doch das will irgendwie nicht klappen.
Wo fragst du denn die Datenbank ab? Davon ist nichts zu sehen.

Ach und das nl2br ist jetzt mal ganz grob gesagt ein Bestandteil meiner Session so das die URL nach erfolgreichem Login quasi ein wenig verändert wird.
Eine URL enthält keine Zeilenumbrüche (mir ist jedenfalls noch keine unter gekommen). Warum also willst du die in <br> umwandeln?
 
  • Like
Reaktionen: Josh_

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
Also erst einmal hast du recht damit das ich die Datenbank tatsächlich nicht abgefragt habe nach den Informationen...
Die Abfrage an sich bewirke ich ja durch den mysql query code oder nicht ?
Hätte es jetzt so gemacht:

mysql_query ("SELECT email, passwort FROM adressen");

Also ich wähle die jeweiligen Spalten aus der jeweiligen Tabelle aus richtig ?
An welche Stelle müsste ich das ganze denn schreiben und wären bei der Abfrage noch zusätzliche Abfragen nötig ?

Das Problem beim HTML Formular habe ich bereits behoben so das da nichts mehr vom Benutzer steht sondern nur noch die E-Mail Adresse.
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Die Abfrage an sich bewirke ich ja durch den mysql query code oder nicht ?
Ja, Daten aus einer MySQL Datenbank liest man per SQL-Query aus.

Hätte es jetzt so gemacht:

mysql_query ("SELECT email, passwort FROM adressen");
So liest du alle vorhanden Einträge aus. Du kannst dann in diesen Einträgen nachschauen, ob die eingegebenen Werte vorhanden sind. Allerdings musst du nicht die ganze Tabelle auslesen, sondern du kannst die Abfrage gleich auf die eingegebene Email Adresse einschränken. Wenn dann kein Datensatz zurückkommt, gibt es den Benutzer nicht. Bei der einschränkenden Abfrage solltest du unbedingt „prepared statements“ verwenden, ansonsten besteht die Gefahr, dass ein Bösewicht an deiner Datenbank herumfummelt.
Übrigens, im Code oben erstellst du ein PDO-Objekt. Warum machst du die Abfrage dann nicht über das PDO-Objekt?
 

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
Habe jetzt erstmal versucht ob der Login an sich funktioniert doch es kommt leider zu einer Fehlermeldung.
Hier nochmal das Script:

<?php
session_start();
$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'drago10');
mysql_query ("SELECT email, passwort FROM adressen");
?>
<?php
if (isset($_POST["Email"]) && isset($_POST["Passwort"])) {
if ($_POST["Email"] == $Email &&
$_POST["Passwort"] == $Passwort) {
$url = (isset($_GET["url"])) ? nl2br($_GET["url"]) : "Mac_Version.html";
header("Location: $url");
}
}
?>


<html>
<head>
<title> Gesch&uuml;tzter Bereich</title>
</head>
<body>
<form method="post">
E-Mail: <input type="text" name="email" size="10" /><br/>
Passwort: <input type="password" name="passwort" size="10" /><br/>
<input type="submit" value="Login"/>
</form>
</body>
</html>


Das sind die Fehlermeldungen:

Warning: mysql_query(): Access denied for user ''@'localhost' (using password: NO) in /Library/WebServer/Documents/LoginTest.php on line 4

Warning: mysql_query(): A link to the server could not be established in /Library/WebServer/Documents/LoginTest.php on line 4

Was habe ich jetzt grob vergessen ?
 

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
Also Kollege jetzt hör mir mal zu. Allem anschein nach bist du nicht der hellste Stift in der Packung denn das sind Scripte aus Büchern die auch funktionieren. Das EINZIGE was nicht funktioniert ist sich die Informationen aus der Datenbank zu holen. Daran muss halt gearbeitet werden. Aber aussagen wie "das macht von oben bis unten keinen Sinn" reflektieren deine inkompetenz da ich stark vermute das die Autoren der Bücher ein wenig mehr Ahnung haben werden als du und bevor du das nächste mal irgendwas schreibst würde ich mir drei mal überlegen wie Konstruktiv deine Kritik ist ansonsten kannst du gerne anderen Leuten auf den Sack gehen. Ich nehme meine Informationen ausschließlich aus Büchern also schick mir nicht irgendwelche Links
 

Josh_

deaktivierter Benutzer
Registriert
02.03.16
Beiträge
15
Dann hast du die Scripte falsch abgetippt. Du erzeugst hier eine PDO-Klasse und willst dann mit der MySQL-Extension drauf zugreifen, dass das nicht funktionieren kann, ist eigentlich klar.

Dein nl2br für URLs ist immer noch Mist, sorry, wenn das so im Buch steht, werfe das Buch weg.

Deine übergebenen POST-Variablen heißen auch anders als deine Variablen, welche du im Skript benutzt (Stichwort Groß- und Kleinschreibung).

&uuml; ist auch veraltet, wenn du es richtig machst, kannst du auch einfach ein ü benutzten.

Warum du eine Session startest, welche gar nicht benutzt wird, ist mir auch schleierhaft.
 
Zuletzt bearbeitet:

Martin Wendel

Redakteur & Moderator
AT Administration
AT Moderation
AT Redaktion
Registriert
06.04.08
Beiträge
45.134
Also Kollege jetzt hör mir mal zu. Allem anschein nach bist du nicht der hellste Stift in der Packung denn das sind Scripte aus Büchern die auch funktionieren. Das EINZIGE was nicht funktioniert ist sich die Informationen aus der Datenbank zu holen. Daran muss halt gearbeitet werden. Aber aussagen wie "das macht von oben bis unten keinen Sinn" reflektieren deine inkompetenz da ich stark vermute das die Autoren der Bücher ein wenig mehr Ahnung haben werden als du und bevor du das nächste mal irgendwas schreibst würde ich mir drei mal überlegen wie Konstruktiv deine Kritik ist ansonsten kannst du gerne anderen Leuten auf den Sack gehen. Ich nehme meine Informationen ausschließlich aus Büchern also schick mir nicht irgendwelche Links
Mod Info
Einen solchen Ton solltest du dir hier auf Apfeltalk ganz schnell wieder abgewöhnen.
 
  • Like
Reaktionen: timmy38233

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Also Kollege jetzt hör mir mal zu. Allem anschein nach bist du nicht der hellste Stift in der Packung
Uiuiui, ich weiß nicht, aber mir schwirrt dabei so ein Sprichwort mit Glashaus und Steinen durch den Kopf.

denn das sind Scripte aus Büchern die auch funktionieren.
Sieht aber auch so aus, als ob die einzelnen Teile aus verschiedenen Büchern mit unterschiedlichen Lösungswegen stammen.

Das EINZIGE was nicht funktioniert ist sich die Informationen aus der Datenbank zu holen.
Glaubst du.
  • Verbindungsaufbau zur Datenbank funktioniert nicht.
  • Das Ergebnis der Datenbankabfrage wird ignoriert.
  • Die Überprüfung, ob Werte im POST-Array vorhanden sind funktioniert nicht.
  • Der Vergleich der Werte im POST-Array mit, tja mit was vergleichst du da eigentlich, wird nicht funktionieren.

Aber aussagen wie "das macht von oben bis unten keinen Sinn" reflektieren deine inkompetenz
Nein, es ist die bittere Wahrheit.

da ich stark vermute das die Autoren der Bücher ein wenig mehr Ahnung haben werden
Ich gehe ganz stark davon aus, dass die Autoren der Bücher das Script so nicht geschrieben haben.

Ich nehme meine Informationen ausschließlich aus Büchern
Na dann wirst du dort sicherlich auch eine Lösung finden. Ich habe jedenfalls keine Lust mehr dir zu helfen.