Andreas: Variablen vergleichen ?

Hallo,
die Variablen username und password enstehen durch ein Formular.
Dann wird die Textdatei geöffnet, wenn die Werte gleich sind soll das Script in die if Schleife gehen, nur macht es dies nicht!
Wenn ich mir beide Variablen anzeigen lasse haben sie den gleichen Inhalt!!

if(isset($username) and (isset($password)))
{
$zeile = @file("Mitglieder/$username.txt");

$username2   = $zeile[0];
$password2   = $zeile[1];

echo $username;
echo $username2;

if($username == $username2)
{
...hier geht das Script nicht rein...
}
}

Gleich noch eine Frage:
Auch wenn die Eingabe leer ist sind hier die Variablen gleich. Das kommt dadurch das die Textdatei nicht gefunden wird.
Wie kann man das noch verhindern?

MfG. Andreas

  1. Hi,

    Dann wird die Textdatei geöffnet, wenn die Werte gleich sind soll das Script in die if Schleife gehen, nur macht es dies nicht!

    Eine Schleife zeichnet sich dadurch aus, daß etwas wiederholt wird.
    if macht aber nur eine Verzweigung, ist also keine Schleife.

    Wenn ich mir beide Variablen anzeigen lasse haben sie den gleichen Inhalt!!

    Wirklich?

    if(isset($username) and (isset($password)))
    {
    $zeile = @file("Mitglieder/$username.txt");

    Die Existenz dieser Datei würde ich vorher abprüfen (file_exists).

    $username2   = $zeile[0];

    Die Datei enthält also zweimal den Usernamen? Einmal im Dateinamen, dann nochmal innendrin?

    $password2   = $zeile[1];
    echo $username;
    echo $username2;

    mach mal
    echo ":".$username.":".$username2.":"
    draus. Dann siehst Du, ob noch Leerzeichen, Zeilenvorschübe usw. drin sind...

    if($username == $username2)

    Du hast doch den Usernamen schon zum Öffnen der passenden Datei benutzt, da brauchst Du ihn hier nicht nochmal abfragen.
    Sinnvoller wäre es, die Passwords zu vergleichen...

    Gleich noch eine Frage:
    Auch wenn die Eingabe leer ist sind hier die Variablen gleich. Das kommt dadurch das die Textdatei nicht gefunden wird.
    Wie kann man das noch verhindern?

    s.o., file_exists
    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
  2. Ei guude wie?

    Irgendwie verstehe ich Deine User- und Passwortabfrage nicht. Du hast also für jeden User eine Textdatei ($username.txt), in der wiederrum der Username plus dem Passwort steht. Warum machst Du nicht eine Textdatei mit allen Usern bzw. warum schreibst Du nicht nur das Passwort in die für einen Benutzer speziell angelegte Textdatei? Und wo in Deinem Skript wird das Passwort auf Gültigkeit überprüft?

    Ich persönlich würde eine Text-Datei für _alle_ User anlegen, so à la:

    user1, passwort1
    user2, passwort2
    ...

    Das Passwort sollte verschlüsselt sein, etwa mit md5(), damit niemand, dem die Textdatei zufällig in die Hände gerät, sich als User einloggen kann.
    Zum Überprüfen der Authentifikation könnte man dann die Datei mittels fopen() öffnen, zeilenweise auslesen (fgets()), ein Array mit dem jeweiligen Usernamen und Passwort füllen (Aufsplitten der ausgelesenen Zeile mittels explode() mit Trennzeichen ",") und dieses Array mit den Eingabedaten vergleichen (das eingegebene Passwort zuerst auch mit dem md5-Algorhitmus krypten).
    Diese Lösung ist glaube ich etwas sinniger, da Du für jeden User nicht eine extra Datei brauchst und Du in einem Rutsch Username und Passwort vergleichen kannst...

    LG ausm Hesseland
    Lemmy

    http://www.olison.com

    --
    Realität ist die Illusion, die durch ein zu geringes Maß an Alkohol entsteht...
  3. Holladiewaldfee,

    Wenn ich mir beide Variablen anzeigen lasse haben sie den gleichen Inhalt!!

    Haben sie nicht ;-)

    if(isset($username) and (isset($password)))
    {
    $zeile = @file("Mitglieder/$username.txt");

    $username2   = $zeile[0];
    $password2   = $zeile[1];

    Man nehme das PHP-Manual und schlage file() nach ...
    Da steht dann irgendwo, daß die Zeilenenden (\n) auch noch in den Variablen mit drin sind ...

    Also:
    $username2 = trim($zeile[0]);
    $password2 = trim($zeile[1]);

    echo $username;
    echo $username2;

    Schau Dir lieber die Ausgabe im Quelltext an und nicht im Browser.

    if($username == $username2)
    {
    ...hier geht das Script nicht rein...

    Klar, denn wie gesagt: $username = $username2."\n";

    Gleich noch eine Frage:
    Auch wenn die Eingabe leer ist sind hier die Variablen gleich. Das kommt dadurch das die Textdatei nicht gefunden wird.
    Wie kann man das noch verhindern?

    && $username!=""

    Ist übrigens ne gewagte Sache! Du solltest kontrollieren, daß keiner so Sachen wie ../../../etc/passwd oder so als Usernamen eingibt (besonders, wenn nachher noch irgendwelche mit der geöffneten Datei in Zusammenhang stehende Ausgaben erfolgen)!

    Ciao,

    Harry

    --
      (There are only 10 types of people in this world: Those who understand binary and those who don't)
  4. hi,
    das Passwort wird natürlich auch geprüft, ich habe jetzt nur diesen Teil hier rein gesetzt da ich hier das Problem hatte.
    Es lag an dem \n ,dieses habe ich jetzt in die zu prüfende Variable mit eingefügt und funktioniert auch.

    Jetzt habe ich ein weiteres Problem:
    So schauen die Zeilen aus mit denen ich die Daten abspeicher:

    if(isset($eintragen))
     {
      $datei_schreiben = fopen("Mitglieder/$username.txt", "w");
      fputs($datei_schreiben,"$user\r$pwort\r\n$bgmenue\r\n$bgmenueklick\r\n$bordermenue\r\n$bordermenue2\r\n");
      fclose($datei_schreiben);
      $loginbereich = "<font color='#003333'>Ihre Daten wurden erfolgreich gespeichert</font>";
     }

    Das Problem ist jetzt, in der zweiten Zeile vor dem Passwort habe ich ein schwarzes Kästchen. Daher kann ich hier auch nicht das Passwort vergleichen.
    Setze ich aber das \n noch hinter \r der $user so wird eine Leerzeile geschrieben.

    Wenn jemand eine bessere Lösung weiß wie ich die Variablen zeilenweise abspeichern kann.
    Bitte denkt daran, das jeder mal angefangen hat und wenn man nicht genau weiß wie man noch vorgehen kann, nützt auch das beste Buch nichts.

    Andreas