Textdatein

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Textdatein

    hallo,

    ich würde gerne eine Datenbank auf Textdateinbasis erstellen.
    Dazu habe ich ein Formular erstellt das so aussieht.

    PHP-Code:
    <table>
    <
    form action="snaq.php" method=post>
     <
    tr>
      <
    td>Name:</td>
     </
    tr>
     <
    tr
      <
    td><input name="name"></td>
     </
    tr>
     <
    tr>
      <
    td>E-Mail:</td>
     </
    tr>
     <
    tr
      <
    td><input name="email"></td>
     </
    tr>
     <
    tr>
      <
    td>Passwort:</td>
     </
    tr>
     <
    tr
      <
    td><input name="passwort" type="password"></td>
     </
    tr>
     <
    tr>
      <
    td><input type="submit"></td>
     </
    tr>
    </
    form>
    </
    table

    anschließend speicher ich die datein in einer Textdatei.


    PHP-Code:
    $daten $name.";".$email.";".$passwort";
    $datei = fopen("snaq.txt","w");
    fwrite(
    $datei$daten);
    fclose(
    $datei); 

    aber jetzt mein problem.
    Wenn jetzt ein User sein Passwort zb ändern möchte, würde ich zZ alles, Name, E-Mail, Passwort alles neueingeben müssen obwohl ich ja nur das passwort erneuern will und so würde ich einfach die Zeile mit den alten Daten überschreiben
    mit den neuen.

    So jetzt meine Frage.
    kann man aus der textdatei irgendewie das passwort auslesen, so das man nur noch das neue passwort eingeben muss und dann nur der eintrag passwort in der textdatei überschrieben wird?

    Danke schon mal im vorraus für eure Hilfe


    mfg Snaq

  • #2
    Dazu benutzt man einen Random Access File mit fester Page-Größe.

    Verschwendet zwar ein bisschen mehr Speicherplatz, ist aber verteufelt fix.

    Kommentar


    • #3
      PHP-Code:
      $daten $name.';'.$email.';'.$passwort;
      $datei fopen('snaq.txt','w');
      fwrite($datei$daten);
      fclose($datei); 
      probiers mal mit diesem ansatz:

      PHP-Code:
      <?
      $new_entry = '
      <? $name = \'' . $name . '\' ; ?>
      <? $email = \'' . $email . '\' ; ?>
      <? $passwort = \'' . $passwort . '\' ; ?>
      ' ;

      $save=fopen($details,"w");
      fputs($save,"$new_entry");
      fclose($save);
      ?>
      dann kannst du in einem Formular als anfagswerte, folgendes verwenden:

      PHP-Code:
      <? echo $name ; ?>
      <? echo $email ; ?>
      <? echo $passwort ; ?>
      müsste eigentlich gehen.
      Zuletzt geändert von xJonx; 01.03.2006, 23:08.
      Design & Coding with a breeze of madness at xjonx

      Kommentar


      • #4
        @Marcusson: Du zeigst dem Spatz, was eine Kanone ist?

        Um sein Passwort zu ändern, muß ein User entweder eingeloggt sein oder seinen Usernamen dazunennen.
        Anhand des Usernamens findest du in der Datei den richtigen Datensatz (Zeile) und kannst das alte Passwort durch das neue ersetzen.

        Wie findet man nun in einer Textdatei eine bestimmte Zeile?
        a) Entweder man prüft eine nach der anderen, ob sie die gesuchte ist oder
        b) man hat eine geeignete Zugriffsstruktur ("Ändere Zeile xy, denn die ist die richtige!").

        Zu a) könnte das ungefähr so aussehen:
        PHP-Code:
        $daten file('snaq.txt');
        $gefunden false;

        foreach (
        $daten as $zeilennr => $zeilentext) {
          if (
        strpos($zeilentext$username.';') === 0) {
            
        $userdaten explode(';'$zeilentext);
            
        $userdaten[3] = $neuespasswort;
            
        $daten[$zeilennr] = implode(';'$userdaten);
            
        $gefunden true;
            break;
          }
        }

        if (
        $gefunden) {
          
        $datei fopen('snaq.txt''w');
          
        fwrite($dateiimplode(''$daten);
          
        fclose($datei);
          echo 
        'Passwort geändert!';
        } else {
          echo 
        'Username existiert nicht?!';

        Da deine Datei ist im CSV-Format, kann man sie prima in ein Array zimmern, um b) umzusetzen:
        PHP-Code:
        $datei fopen('snaq.txt''r');
        while ((
        $datensatz fgetcsv($datei1000';')) !== false) {
          
        $daten[$datensatz[0]] = $datensatz;
        }
        fclose($datei);

        // kein suchen mehr!
        if (isset($daten[$username])) {
          
        $daten[$username][2] = $neuespasswort;
          
        $datei fopen('snaq.txt''w');
          foreach (
        $daten as $datensatz) {
            
        fputcsv($datei$datensatz';');
          }
          
        fclose($datei);
          echo 
        'Passwort geändert!';
        } else {
          echo 
        'Username existiert nicht?!';

        Bei a) ist das Lesen eleganter, bei b) das Ändern der Daten. Das Schreiben dagegen ist bei beiden gleichermaßen unschön.

        Konkurrente Dateioperationen (Stichworte lost update, inconsistent read) kannst du mit flock() verhindern.

        Kommentar


        • #5
          okay, danke euch alle ich habe es jetzt hinbekommen

          Mfg Snaq

          Kommentar

          Lädt...
          X