• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Bestimmte Angaben aus .txt-datei auslesen

Status
Für weitere Antworten geschlossen.

Anonymous

Neues Mitglied
Hallo,

ich habe eine Frage bezüglich des Auslesens bestimmter Angaben aus einer .txt-datei.

Also, folgender Ablauf:

Ich habe ein Skript, wo der Besucher Benutzername und Passwort eingeben kann. Als Empfänger des Formulars steht eine .php-datei (xxx.php). Diese soll die eingegebenen Angaben mit denen aus einer .txt-datei vergleichen.

Da dachte ich mir, öffne einfach mal die .txt-datei:
[php:1:8edd150eae]<?php
fopen(xxx.txt, "r");
?>[/php:1:8edd150eae]

So, jetzt habe ich allerdings das Problem, dass ich nicht weiss, wie ich Angaben aus dieser Datei auslese.

Wenn zum Beispiel in der auszulesenden Datei xxx.txt folgendes steht:
Code:
Benutzername: Max Mustermann
Passwort: Musterpasswort

1. Wie lese ich diese beiden Angaben aus?
2. Wie vergleiche ich diese mit den angegebenen Angaben?

Ich würde mich sehr über hilfreiche Antworten freuen.
 
Bei unseren User-Dateien stehen jeweils in einer Zeile Login, verschlüsseltes Passwort und echter Name. Die Werte sind durch Doppelpunkt voneinander getrennt.

Um dann ein Login durchzuführen benutzen wir folgenden Code:
[php:1:e3b0984e02]<?php
$login = $_REQUEST['login'];
$password = $_REQUEST['password'];
$success = false;

$users = file('users');
foreach ($users as $line) {
$line = trim($line);
if ($line == '' || $line{0} == '#') continue;

$a = explode(':', $line, 3);
if (sizeof($a) < 2) continue;

$l = trim($a[0]);
if ($l == $login) {
$pwd = trim($a[1]);
$salt = substr($pwd, 0, 2);
if (crypt($password, $salt) == $pwd) {
$success = true;
$username = isset($a[2]) ? trim($a[2]) : $l;
break;
}
}

}

if ($success) {
echo 'Willkommen, '.$username;
}
?>[/php:1:e3b0984e02]

Die s bitte einfach wegdenken. Was macht das Forum denn da für einen Murks draus ?! ;ugl
 
Sorry, aber irgendwie kommen die immer rein, wenn ich das Forumlar abschicke. Habs ein paar mal probiert... Was mach ich falsch ?!
 
Das ist wohl normal bei PHP-Codes..

Das habe ich auch schon öfters gesehen.

Naja, back to topic:

Könntest du mir das etwas erklären?
 
Login und Passwort werden zuerst aus den Request-Parametern rausgelesen.
Die Datei wird geöffnet, und dann in einer Schleife zeilenweise durchgegangen.
Wenn eine Zeile leer ist oder mit einer Raute anfängt, dann wird sie ignoriert.
Andernfalls wird die Zeile in ihre Bestandteile (Login, Passwort, Real-Name) aufgesplittet (mit explode). Wenn das Login dem per Parameter entspricht, wird getestet, ob das Kennwort identisch ist. Da die Kennwörter aus Sicherheitsgründen per crypt() verschlüsselt sind, wird die Funktion auch auf das übergebene Passwort angewendet.
Im Erfolgsfall wird $success auf true und $username auf den Real-Namen (falls vorhanden) oder den Login gesetzt.

Eine typische Kennwort Datei sieht dann in etwa so aus:
Code:
# Kommentar
charlie07 : 12TFeV5TjycnM : Charlie Brown
ltm : 13uQ4UN3jBJM6
 
naja, ich verstehs auch nich ganz, aber eig. muss man doch nur eine öffnen.php datei, eine users.txt und eine prüfen.php datei erstellen.


der code wurde dazu ja scho genannt...


oder sehe ich das falsch?
 
ich mache es normalerweise so:

// Datei öffnen
$file = fopen(xxx.txt, "r");


// innhalt der datei in variable speichern
$string = fread(file ,filesize('xxx.txt'));


// datei schliessen
fclose(file);


// jede zeile der datei einzeln in ein array speichern(aufgrund des return zeichen "\n"
$zeilen_array = explode("\n", $string);


// loop variable initialisieren
$i=0;


// über die zeilen durchschleifen so lange bis eine leere zeile kommt(dh. solange bis nichts mehr steht)

do
{
// im array $satzteile speichern wir jeweile im ersten feld alles was vor dem doppelpunkt steht und im 2ten das was dahinter kommt.

$satzteile = explode(':', $zeilen_array[$i]);

// username ist klarerweise immer der 2te teil im ersten steht ja nur "Benutzername:" und ist somit uninteressant.
Ich nehme dann auch noch leerzeichen am anfang und am ende des usernamen weg, mit der funktion trim();

$username[$i] = trim($satzteile[1]);

// in der zeile nach der username-zeile im 2ten teil(dh, nach dem doppelpunkt) steht wiederum das password

$satzteile = explode(':', $zeilen_array[$i+1]);
$password[$i] = trim($satzteile[1]);


// jetzt die loop variable 2 mal erhöhen da wir ja berreit auch die 2te zeile ausgelesen haben.
$i++;
$i++;

} while($pieces[$i]!="");


was ich somit erhalte sind 2 arrays:
$username
$password

wobei ich jeweils in zeile 0 von $username den username finde, und in der gleichen zeile in $password das dazugehörige password.

dh.
username password
-----------------------------------------
$username[0] <-> $password[0]
$username[2] <-> $password[2]
$username[4] <-> $password[4]
$username[6] <-> $password[6]

etc.

Grüße
 
mach doch einfach NAME|PW|INFOS und dann mit explode() ? ^^
der code wäre wesentlich kleiner und übersichtlicher ^^

ich würde;
<- bei anmeldung eine name.php erstellen, inhalt:
$userdaten = "name|pwinmd5|u.s.w.";
dann
if(!file_exists($_POST["request_name"]) { DIE }
include("$_POST["request_name");
$usr_request = explode("|", $userdaten);
if($userdaten[0] == md5($_POST['pw'])) { GO ON } else { DIE }
echo "hallo $userdaten[0]";
habs nicht getestet, müsste aber so gehen xPP
 
Das ist ja in etwa das, was auch in meinem Code oben gemacht wird. Da sind halt zusätzlich noch einige Abfragen drinne, um z.B. leere Zeilen oder Kommentarzeilen zu überspringen. Und wir benutzen nicht MD5 sondern halt crypt. Das hat den Vorteil, dass zwei gleiche Kennwörter nicht auf den selben Hashwert abgebildet werden wenn der Salt anders gewählt ist.

Was ist denn an dem Code oben nicht klar? Werdet mal konkreter, dann bemühe ich mich, das genauer zu erklären. Im Prinzip ist das Vorgehen so wie Baddii beschrieben hat. Zuerst eine Seite mit einem Login-Formular, das hat als Action dann ein PHP Skript, das den oben geposteten Code, oder eins der anderen Skripte ausführt.
 
aus selfphp:

Befehl
array explode(string separator, string string [, int limit])

Version
PHP 3, PHP 4 >= 4.0b1

Beschreibung

Mit explode() zerlegt man eine Zeichenkette (string) anhand eines vordefinierten
Trennzeichens (separator). Der Parameter limit ist optional und bewirkt, dass nur
maximal limit Elemente im Ergebnis-Array zurückgegeben werden; das letzte
Element des Ergebnis-Arrays enthält dann den Rest des Strings. Alle Elemente
des zuvor zerlegten Strings werden in einem Array zurückgegeben - der
ursprüngliche String bleibt erhalten.

Siehe auch:

* split()
* implode()


Beispiel

<?PHP
$string = "PHP ¾ - Die Befehlsreferenz";
echo $string;
echo "
";
$array = explode(" ",$string);
for($x=0;$x<count($array);$x++){
echo $array[$x];
}
?>

Ausgabe

PHP ¾ - Die Befehlsreferenz
PHP3/4-DieBefehlsreferenz

Grüße
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben