PHP Log In Problem

  • Ersteller Ersteller Kosta_91
  • Erstellt am Erstellt am
K

Kosta_91

Gast
Ich habe ein kleines PHP-Script geschriebn, und welches man sich auf folgender Homepage
einloggen kann(www.kim-kosta.de), jedoch kommt immer "Sie sind angemeldet" obwohl der
BN und PW falsch eingegeben wurden. Woran kann das liegen?
Hier das Script:

<?php
$a=$BName;
$b=$Passwort;
$c=fopen("c:\inetpub\wwwroot\Benutzerdaten.txt","r");
$i=1;
if($c)
{
while (!feof($c))
{
$d=fgets($c,1000);
$e=explode(";",$d);
$e[$i][0];
$e[$i][1];
$i++;
}
$flag=false;
for ($f=0;$f<=$i;$f++)
{
if ($a == $e[$i][0] && $b == $e[$i][1])
{
$flag=true;
break;
}
}
if($flag)
{
echo "Sie sind angemeldet";
}
else
{
echo "Sie sind falsch!";
}
}
else
{
echo "Fehler beim Öffnen der Datei!";
}
?>
 
Das sieht aus wie ein C Programmierer der PHP schreibt ^^ Wieso haben deine variablen alle nur einen buchstaben? Das macht das debuggen ganz ganz schwer. Scha udir doch einfach mal folgendes an: http://tut.php-quake.net/de/login.html ;)
 
was sind code-tags?
die internet Seite ist leider mit SQL Verbunden, was ich aber nicht machen möchte.
Ich verwende nur einen Buchstaben, da es übersichtlicher ist.
Aber wieso zeigt er mir dann an, das ich erfolgreich eingeloggt bin obwohl ich was
falsches eingegeben habe? Ist etwas an meiner if-Abfrage falsch?
 
Zuletzt bearbeitet:
Setz dich lieber hin und les ein Programmierbuch für Anfänger.
Ein Buchstabe für eine Variable ist nicht übersichtlich.
Soll ein anderer diesen Quälcode lesen, fragt er sich, was der Mist soll.

Warum willst du das nicht per (My)SQL machen, wenn eine Datenbank schon vorhanden ist?
Einfacher geht es dann kaum. Dann brauchst du diesen Quatsch mit zwei-Dimensionalen Arrays nicht.
SQL Abfragen sind auch zuverlässiger und schneller als Datei-Operationen bei PHP.

cx01 schrieb:
Und was ist der Sinn hiervon?

Er speichert Name und Passwort in ein Zwei-Dimensionales Array

$e[$i][0]; <- Name
$e[$i][1]; <- Passwort

(schätze ich)
 
Zuletzt bearbeitet:
So funktioniert es schon eher:
PHP:
<?php
$a=$BName;
$b=$Passwort;
$c=fopen("c:\inetpub\wwwroot\Benutzerdaten.txt","r");
$i=0;
if($c)
{
  while (!feof($c))
  {
    $d=fgets($c,1000);
    $e[$i]=explode(";",$d); //mit $e[$i] wird immer ein neuer Eintrag erstellt, anstatt der alte überschrieben
    $i++;
  }
  $flag=false;
  for ($f=0;$f<$i;$f++)
  {
    if($a == $e[$f][0] && $b == $e[$f][1]) //und hier war vorher $e[$i]
    {
      $flag=true;
      break;
    }
  }
  if($flag)
  {
    echo "Sie sind angemeldet";
  }
  else
  {
    echo "Sie sind falsch!";
  }
}
else
{
  echo "Fehler beim Öffnen der Datei!";
}
?>
Ein weiteres Problem ist aber die Funktion fgets(). Denn in der Dokumentation steht:
[...] Die Zeile endet an einem Zeilenumbruch (welcher im Rückgabewert enthalten ist) [...]
Dadurch wird an fast jedes Passwort (bis auf das letzte) der Zeilenumbruch gesetzt, wodurch das gespeicherte Passwort verfälscht wird.
Also entweder die "Benutzerdaten.txt" so umschreiben, dass am Ende jeder Zeile nochmal das Zeichen ";" steht oder versuchen den Zeilenumbruch zu entfernen.

Edit: Das wäre so möglich:
PHP:
$e[$i][1] = str_replace("\r", "", $e[$i][1]);
$e[$i][1] = str_replace("\n", "", $e[$i][1]);
 
Zuletzt bearbeitet:
Und bitte ganz schnell die Datei Benutzerdaten.txt aus dem öffentlichen Bereich des Webservers nehmen und irgendwo speichern, wo sie niemand externes einfach einsehen kann.

Zum Thema Login kann ich auch nur empfehlen, dass ganze in eine Datenbank zu legen. Die Passwörter dann aber nicht im Klartext, sondern gehashed [1] speichern.

[1] http://de.wikipedia.org/wiki/Hash#Anschauliche_Erkl.C3.A4rung
 
Zuletzt bearbeitet:
Zurück
Oben