Mit $_SESSION[username'] zeile aus txt Datei ausgeben

Loddar1

Erfahrenes Mitglied
Schönen Sonntag wünsche ich
Ich habe da ein kleines Problem,
ich möchte mit $_SESSION[username'] eine bestimmte zeile aus einer txt-Datei auslesen
und habe bisher diesen Code:
PHP:
<?php
if (!file_exists("$userdatei"))  fclose(fopen("$userdatei","r")); 
$lines = file("$userdatei"); 
$num = sizeof($lines); 
  for ($i=0; $i < $num; $i++) { 
    $lg = explode("|", $lines[$i]);
    $_SESSION['username']=$lg[1]; 
       if ($lg[1] == $_SESSION['username']) { 
   $num--; 
  for ($j=$i; $j < $num; $j++) 
   $lines[$j]=$lines[$j+1];
    } 
  }
?>
Meine txt-Datei sieht so aus:
Code:
1|Admin|passwort|Administrator|admin@mail.de
2|Beta|passwort|Betaname|beta@mail.de
3|Tester|passwort|Testname|tester@mail.de
Egal wie ich mich einlogge, es wird immer der letzte eintrag angezeigt.
kann mir einer meinen Fehler zeigen?

Mit besten Dank im vorraus Loddar1
 
Hallo Loddar1,

erstmal ein drei eher unwichtere Punkte:

- Wieso umschließt du Variablen mit doppelten Anführungszeichen? Ist nicht nötig, die kannst du getrost entfernen.

- Ich würde lieber den Namen [phpf]count[/phpf] nehmen anstatt [phpf]sizeof[/phpf] (beide komplett identisch).

- Was bringt das fopen() und fclose() in der ersten Zeile?

Zu deinem Code:
PHP:
$_SESSION['username']=$lg[1]; 
if ($lg[1] == $_SESSION['username']) {
Du setzt zuerst die Session-Variable auf $lg[1] und dann prüfst du, ob dieser Wert drin ist. Dies immer 'true' ergeben.

Wieso dekrementierst du $i innerhalb der Schleife? Schon möglich, aber ich sehe den Sinn in deinem Code nicht.

Was du willst, soweit ich dich verstanden habe, ist folgendes:

- Lese die Datei in ein Array mittels [phpf]file[/phpf]
- Gehe alle Zeilen durch
- Prüfe für jede Zeile, ob der angegebene Benutzername und der Benutzername in der Zeile identisch ist.
- Wenn ja, prüfe auch das Passwort.
- Ist dies auch identisch, 'spring' aus der Schleife raus mit break o.Ä.
 
- Was bringt das fopen() und fclose() in der ersten Zeile?

Das ist ein touch, wenn man so will.

PHP:
<?php

// Inhalt von users.dat:

// 1|Admin|passwort|Administrator|admin@mail.de
// 2|Beta|passwort|Betaname|beta@mail.de
// 3|Tester|passwort|Testname|tester@mail.de

session_start();
$_SESSION['username'] = 'Beta';

$userdatei = __DIR__ . '/users.dat';

touch($userdatei);

$lines = file($userdatei, FILE_IGNORE_NEW_LINES);
$num   = count($lines);
$data  = null;

for ($i = 0; $i < $num; $i++) {
    $lg = explode('|', $lines[$i]);

    if ($lg[1] === $_SESSION['username']) {
        $data = $lg;
        break;
    }
}

var_dump($data);

// Ausgabe:

// array(5) {
//   [0] =>
//   string(1) "2"
//   [1] =>
//   string(4) "Beta"
//   [2] =>
//   string(8) "passwort"
//   [3] =>
//   string(8) "Betaname"
//   [4] =>
//   string(13) "beta@mail.de"
// }

Besser: Ein Format wie CSV nutzen (und dann etwa fgetcsv in PHP).

Noch besser: Eine Datenbank nutzen.

PS: Sorry, jetzt habe ich schon zu viel Code gepostet. Merke ich gerade leider zu spät.
 
Hallo ComFreek
So richtig verstanden habe ich das nicht was Du meinst****?
Mein Code
PHP:
$_SESSION['username']=$lg[1]; 
if ($lg[1] == $_SESSION['username']) {
und das mit der Schleife und break
Code:
Du setzt zuerst die Session-Variable auf $lg[1] und dann prüfst du, ob dieser Wert drin ist. Dies immer 'true' ergeben.
Wieso dekrementierst du $i innerhalb der Schleife? Schon möglich, aber ich sehe den Sinn in deinem Code nicht.
Hab den Code was ich verstanden habe geändert,
aber stehe immernoch im Loch!
PHP:
$usd = fopen($userdatei,"r"); 
$lines = file($userdatei); 
$num = count($lines); 
  for ($i=0; $i < $num; $i++) { 
    list($id, $nick, $pass, $name, $mail) = explode('|', $lines[$i]); 
       if ($lg[1] == $_SESSION['username']) { 
   $num--; 
  for ($j=$i; $j < $num; $j++) 
   $lines[$j]=$lines[$j+1];
    } 
  } 
fclose($usd);
 
Das fopen/fclose brauchst du nicht. Das ist in file implizit mit enthalten.

So als Tipp: Rück deinen Code sauber ein. Das macht ihn lesbar.

Was das hier soll…

PHP:
   $num--; 
  for ($j=$i; $j < $num; $j++) 
   $lines[$j]=$lines[$j+1];
    }

…wissen wir nicht.

Ansonsten siehe vielleicht meinen vorherigen Post, falls der untergegangen sein sollte.
 
Habe es jetzt so gemacht:
PHP:
if ($num > 0){ 
   for ($i=$num-1; $i>=0; $i--) { 
     $agr = explode ("|", $lines[$i]);
      if ($agr[1] == $_SESSION['username']){
$nr = $agr[0];
$nick = $agr[1];
$pass = $agr[2];
$name = $agr[3];
$email = $agr[4];
     }
}
und es funktioniert!
Danke nochmal an alle
 
mermshaus hat gesagt.:
Das ist ein touch, wenn man so will.
Das dachte ich auch zuerst, aber der Modus 'r' erstellt die Datei nicht, falls sie nicht existiert.

PHP:
$_SESSION['username']=$lg[1]; 
if ($lg[1] == $_SESSION['username']) {

Dieser Code ist einfach totaler Unsinn - vergib mir meine Wortwahl.

Das ist genau das Gleiche wie:
PHP:
$a = 5;
if ($a == 5) {
}
Für das Lernen von Kontrollstrukturen vllt. nützlich, ansonsten Unsinn.
 
Zurück