Michél: PhP speicherung von eingegebenen Daten

Guten Morgen an alle,

steht mal wieder vor einem Problem

ich habe ein Formular erstellt dieses sendet die Daten an PHP und soll die Daten dann in Zeilenabständen in einer TXT speichern soweit so gut

ich bekomme es einfach nicht hin das er mir die Daten untereinander schreibt.

dann kommt noch hinzu das ich bei falscher eingabe bsp. kenntwort  das er mir wieder geben soll falsches Passwort und wenn die Daten richtig eingegeben wurden soll er willkommen oder so ausgeben
ich hoffe ihr könnt mir einen Tipp geben

danke im voraus
``
anbei quelltext von php und html formular.
Php

<html>
<body>
<?php
$datei = fopen("praxis.txt","a");
if (!$datei) // entspricht if($datei == false)
{
   echo "<p>Datei konnte nicht zum Schreiben geöffnet werden</p>";
   exit;
}
$benutzername = $_POST["benutzername"];
$kennwort = $_POST["kennwort"];

fputs ($datei, "$benutzername $kennwort;");
echo "<p>Willkommen</p>";
echo "$benutzername";
echo "$kennwort;";

fclose($datei);

?>
Zurück zum <a href="praxis.html">Einloggen</a>
</body>
</html>

Html

<html>
<body>
Bitte geben Sie folgende Daten ein:
<form action = "praxis.php" method = "post">
  <p><input size="20" name="benutzername"> Benutzername</p>
  <p><input size="20" name="kennwort"> Kennwort</p>

<input type="submit" value="Senden">
    <input type="reset">
</form>
</body>
</html>

  1. Kommando zurück ich muss die php datei so um schreiben das er die im txt document die daten erkennt und dann wieder gibt  wilkommen .... bla bla.

  2. Lieber Michél,

    steht mal wieder vor einem Problem

    das Problem lautet "Unleserlichkeit aufgrund fehlender Interpunktion". Im Ernst: Es fiel mir ziemlich schwer, den genauen Sinn Deines Postings zu verstehen, da Du fast ganz ohne Satzzeichen schreibst! Das ist keine gute Idee, wenn Du hier Hilfe suchst.

    ich bekomme es einfach nicht hin das er mir die Daten untereinander schreibt.
    [...]
    fputs ($datei, "$benutzername $kennwort;");

    1.) Die eingegebenen Daten schreibst Du "unbehandelt" in eine Textdatei. Unbehandelt ist das nicht ohne Risiko. In diesem Falle scheint es aber technisch kein Risiko zu geben, außer, dass Du ja ein Leerzeichen als Trenner benötigst. Und wenn der Browser nun mehrere solche Trennzeichen als "Benutzername" oder "Kennwort" sendet?

    2.) "$benutzername $kennwort" - Siehst Du hier irgendwo Zeilenumbrüche? "\n" ist ein Zeilenumbruch. Für Windows-Kompatibilität nimmst Du besser "\r\n":

    fputs ($datei, "$benutzername\r\n$kennwort\r\n";

    dann kommt noch hinzu das ich bei falscher eingabe bsp. kenntwort  das er mir wieder geben soll falsches Passwort und wenn die Daten richtig eingegeben wurden soll er willkommen oder so ausgeben

    Siehst Du, dass das schwer zu lesen ist?

    3.) Woher willst Du wissen, welches "ein richtiger Benutzername" bzw. "ein richtiges Kennwort" ist? Alles, was Du bisher machst, ist das hier:

    $datei = fopen("praxis.txt","a");
    [...]
    $benutzername = $_POST["benutzername"];
    $kennwort = $_POST["kennwort"];

    Du ermittelst ausschließlich Benutzereingaben, keinesfalls jedoch irgendwelche Vorgaben...

    4.) Du solltest Deinen Anforderungen entsprechend ("Zeilenumbruch hat besondere Bedeutung") die eingegebenen Daten filtern:

    $benutzername = preg_replace("~[\r\n]~", '', $_POST["benutzername"]);  
    $kennwort = preg_replace("~[\r\n]~", '', $_POST["kennwort"]);
    

    Wenn Du das willst, kannst Du für einen Zeilenumbruch auch "Ersatz" verwenden, der dann später wieder zu einem Zeilenumbruch zurückgewandelt wird, aber hier ist das sinnfrei, da ein Benutzername und ein Kennwort keine Zeilenumbrüche haben sollte.

    Zurück zum <a href="praxis.html">Einloggen</a>

    Einen Login-Mechanismus kannst Du so nicht verlässlich umsetzen, da Du hier ja im Grunde verlangst, dass der Benutzer jedesmal diese Login-Daten beim Aufruf Deiner Seite explizit sendet. Egal, welche weitere "geschützte" Seite er sehen möchte. Dafür haben "die bei PHP" den Session-Mechanismus erfunden, mit dem man das PHP überlässt, um nur noch die Rahmenbedingungen dafür zu schaffen. Lesetipps zu Sessions:

    * Quakenet-Tutorial zu Sessions
    * Jochen Stärk PHP-Tutorial Sessions

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  3. ich bekomme es einfach nicht hin das er mir die Daten untereinander schreibt.

    Das Stichwort Zeilenumbruch gab`s ja schon. Allerdings ist es besser, die userdaten comma separated als Datensatz zu speichern, also

    fputs ($datei, "$benutzername,$kennwort\r\n");

    dann kommt noch hinzu das ich bei falscher eingabe bsp. kenntwort  das er mir wieder geben soll falsches Passwort und wenn die Daten richtig eingegeben wurden soll er willkommen oder so ausgeben

    Das sollte dann kein Prob mehr sein.

    echo "<p>Datei konnte nicht zum Schreiben geöffnet werden</p>";

    Diese Fehlermeldung ist für den user sinnlos. Vernünftig wäre sowas wie "Ihre Daten konnten nicht gespeichert werden, bitte versuchen Sie es erneut" oder "Das Login ist zur Zeit nicht möglich, bitte versuchen Sie es später nochmal". Oder du machst gleich ein sinnvolles error handling, denn das Leben des users wird ja wohl nicht davon abhängen, daß er mit Namen begrüßt wird.

    $benutzername = $_POST["benutzername"];
    $kennwort = $_POST["kennwort"];

    Durch dieses Scheunentor paßt locker ein A-380.
    Außerdem juck mal hier: http://aktuell.de.selfhtml.org/artikel/programmiertechnik/dateisperren/php.htm

    ~JJ