Loginscript ohne MySQL um Passwort-ändern Funktion erweitern

Hi,
vor kurzem habe ich im Internet ein Loginscript gefunden. Und obwohl es ganz gut funktioniert, hat es einen Nachteil: Es fehlt ist eine Passwort-ändern Funktion.

Da ich absolut überhaupt keine Ahnung von php habe, wollte ich fragen, ob mir jemand helfen könnte, den Code zu schreiben.

Ich selbst habe zwar schon ein paar mal probiert die Login und Anmeldedatei zusammen zu stückeln, bekam aber immer eine Fehlermeldung zu sehen.

Hier die beiden relevanten Dateien:

eintragen.php

[code]<?php
$username = $_POST[“username”];
$password = $_POST[“passwort”];
$password2 = $_POST[“passwort2”];

if ($password == $password2)
{
$user_vorhanden = array();
$passwort = md5($password);

$userdatei = fopen (“user.txt”,“r”);
while (!feof($userdatei))
{
$zeile = fgets($userdatei,500);
$userdata = explode("|", $zeile);
array_push ($user_vorhanden,$userdata[0]);
}
fclose($userdatei);

if (in_array($username,$user_vorhanden))
{
echo “Username schon vorhanden
<a href=“eintragen.html”>zurück”;
}

else
{
$userdatei = fopen (“user.txt”,“a”);
fwrite($userdatei, $username);
fwrite($userdatei, “|”);
fwrite($userdatei, $passwort);
fwrite($userdatei, “\n”);
fclose($userdatei);
echo “$username, deine Anmeldung war erfolgreich
<a href=“login.html”>zum Login”;
}
}

else
{
echo "Die Passwörter sind nicht identisch
<a href=“eintragen.html”>zurück ";
}

?> [/code]

login.php

[code]<?php
session_start();
$username = $_POST[“username”];
$passwort = $_POST[“password”];
$passwort = md5($passwort);
$log=0;

$userdatei = fopen (“user.txt”,“r”);
while (!feof($userdatei))
{
$zeile = fgets($userdatei,500);
$userdata = explode("|", $zeile);

if ($userdata[0]==$username and $passwort==trim($userdata[1]))
{
$_SESSION[‘username’] = $username;
echo “Login war erfolgreich. <a href=“geheim.php”>Geschützer Bereich”;
$log = 1;
}
}
fclose($userdatei);

if ($log==0)
{
echo “Zugriff verweigert <a href=“login.html”>Zurück”;
}
?> [/code]

Die Passwort-ändern Datei, bekommt ihr Eingaben hieraus:

[code]
Dein Username:



Dein altes Passwort:


Dein neues Passwort:


Dein neues Passwort wiederholen:


[/code]

Was soll die Passwort-ändern.php machen?

  1. Sie soll Benutzer und altes Passwort überprüfen | wenn falsch Fehlermeldung
  2. Die beiden neuen Passworteingaben miteinander vergleichen | wenn falsch Fehlermeldung
  3. Wenn alles ok ist, die alte Zeile ind er Textdatei löschen und durch die neuen Angaben ersetzen.

Tut mir Leid für den vielen Text, aber ich weiß echt nicht weiter. Wäre toll, wenn ihr mir helfen könntet.

Die Antwort hast du dir schon selbst gegeben.

Ist die Überprüfung ob die Passwörter identisch sind.

$userdatei = fopen ("user.txt","a"); fwrite($userdatei, $username); fwrite($userdatei, "|"); fwrite($userdatei, $passwort); fwrite($userdatei, "\n"); fclose($userdatei);
Schreibt das neue Passwort in die user.txt

if ($userdata[0]==$username and $passwort==trim($userdata[1])) { $_SESSION['username'] = $username;
Überprüft ob Nutzename und Passwort korrekt sind.

Also wäre deine passwort-ändern.php (wobei ich das ‘ä’ dringend rausnehmen würde) vom Aufbau her:

WENN Nutzename und Passwort ==trim
DANN [WENN Passwort1=Passwort2 DANN ändere user.txt SONST echo Fehlermeldung.]

Den Rest der Datei habe ich mal zusammengebastelt, doch wenn ich sie ausführen will, kommt ein Syntaxerror in Zeile 32

Soweit so gut, aber wie lösche ich den alten Eintrag aus der txt-Datei? Welchen Befehl muss ich hierfür in diese Zeile schreiben?

[quote]<?php
session_start();
$username = $_POST[“username”];
$passwort = $_POST[“passwort”];
$neuespasswort = $_POST[“neuespasswort”];
$neuespasswort2 = $_POST[“neuespasswort2”];

$userdatei = fopen (“user.txt”,“r”);
while (!feof($userdatei))
{
$zeile = fgets($userdatei,500);
$userdata = explode("|", $zeile);

if ($userdata[0]==$username and $passwort==trim($userdata[1]))
{
$_SESSION[‘username’] = $username;

if ($neuespasswort == $neuespasswort2)

  $userdatei = fopen ("user.txt","a"); 
  [color=#FF8000]----------------------------[/color]
  fwrite($userdatei, $username); 
  fwrite($userdatei, "|"); 
  fwrite($userdatei, $passwort); 
  fwrite($userdatei, "\n"); 
  fclose($userdatei);
  {
  echo "Dein Passwort wurde erfolgreich geändert. <br> <a href=\"login.html\">Zurück</a>";
  }

else <<< In dieser Zeile befindet sich der Syntaxerror
{
echo “$username, die neuen Passworteingaben sind nicht identisch.
<a href=“aendern.html”>Zurück”;
}
}

else
{
echo "Autorisierung fehlgeschlagen.
<a href=“aendern.html”>Zurück ";
}

?>[/quote]

Was habe ich falsch gemacht? Danke schonmal im Vorraus für weitere Hilfe.

Die { und } solltest du schon an den richtigen Stellen auf und vor allem wieder zu machen.
Wenn das if vor dem else nicht mittels } geschlossen wurde, dann darf hier auch kein else kommen.

Kannst du ein bischen genauer werden? Welche { und } müssen weg, wo müssen welche hin, wann brauche ich { und }? Ich habe noch nie mit php gearbeitet und auch wenn es wahrscheinlich für jemanden der die Grundlagen kennt total einfach ist, ich kenne sie nicht.

Ich habe jetzt mal ein paar { und } weggestrichen, das Problem ist geblieben. Es wäre echt klasse, wenn ihr mir sagen könntet, was ich falsch gemacht habe.

Desweiteren fehlt ja auch immernoch der Befehl, mit dem ich den alten txt-Datei-Eintrag löschen kann. Geht das irgendwie mit “unset”? Und wenn ja, wie kriege ich es hin, dass genau nur diese eine zutreffende Zeile gelöscht wird? (siehe oben)

Danke schonmal im Vorraus für weitere Hilfe.

„rewind“ fällt mir da spontan ein - Aber frag mich jetzt nicht wie man das anwendet. ICh bin noch nicht so weit mit PHP fortgeschritten um mir das aus den Fingern zu saugen :ps:

Egal wie weit du bist, besser als ich biste ganz bestimmt :p

Hat noch jemand eine andere Idee, mit welchem Befehl ich eine bestimmte Zeile, die mit dem Benutzernamen $username beginnt löschen kann?

Den Code habe ich jetzt umgeschrieben, der Syntaxfehler ist weg.

Ich habs hinbekommen.
das ganze wird jetzt erst in ein Array ausgelesen, der bestimmte Eintrag übersprungen, die alte Datei gelöscht und die neue Datei in die alte umbenannt. Und das mit dem Syntaxerror hat sich auch erledigt.

Danke für eure Hilfe.