PHP Log In Problem

  • Ersteller des Themas Kosta_91
  • Erstellungsdatum
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!";
}
?>
 

nesQuick

Lt. Junior Grade
Dabei seit
Aug. 2007
Beiträge
384
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 ;)
 
K

Kosta_91

Gast
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:
W

Whiz-zarD

Gast
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.

Er speichert Name und Passwort in ein Zwei-Dimensionales Array

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

(schätze ich)
 
Zuletzt bearbeitet:

Ack der III

Ensign
Dabei seit
Mai 2008
Beiträge
168
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:

merv

Lt. Commander
Dabei seit
Juni 2002
Beiträge
1.541
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:
Top