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

Formular in Datei speichern

benbas39

Mitglied
Heyho,

ich habe ein kleines Formular, Username und Email als input. Die eingegebenen Dinge soll es in einer Textdatei speichern.
Nun das klappt auch. Wie kann ich testen, ob in der Datei ein Wert doppelt vorhanden ist?

Code:
        $datei = 'php/data.txt';
        $data = 'Username:'. $_POST["username"]."\n".'Email:'.$_POST["email"];
        $handle = fopen($datei, "r+");
        fwrite($handle, $data);
        rewind($handle);
        fclose($handle);
 
Zuletzt bearbeitet:
Werbung:
@bdt600 danke habe ich gemacht, weiß jemand wieso es nicht klappt?

Code:
<?php
    $datei = 'php/data.txt';
    $data = 'Username:'. $_POST["username"]. ' Email:'.$_POST["email"]."\n";
    $file = file($datei);
    $array = array($file);

    if(isset($_POST["submit"])) {
    $fehler = false;
    $fehlertext = "";
   
    if(empty($_POST["username"])) {
        $fehler = TRUE;
        $fehlertext .= '- Bitte gib einen gültigen Usernamen an!'."<br>";
    }
    if(empty($_POST["email"])) {
        $fehler = TRUE;
        $fehlertext .= '- Bitte gib eine gültige Email an, auf der wir dich kontaktieren kännen!'."<br>";
    }
    if(!isset($_POST["confirm"])) {
        $fehler = TRUE;
        $fehlertext .= 'Du musst den Usernamen geaddet haben!'."<br>";
    }
   
    if($fehler) {
        echo $fehlertext;
       
    } elseif(in_array($data, $array)) {
        echo 'Bereits eingetragen!';           
    } else {
        $handle = fopen($datei, "a+");
        fwrite($handle, $data);
        rewind($handle);
        fclose($handle);       
  }
   
}
?>
 
Werbung:
"Klappt nicht" ist keine Problembeschreibung!

Richtig debuggen

1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
 
Hey, erstmal danke.
Ich habe nun alle Schritte durchgeführt, sowie alle Fehlermeldungen behoben.
Code:
<?php

    error_reporting(-1);
    ini_set('display_errors', true);
    $datei = 'php/data.txt';
    $file = file($datei);
    $array = array($file);   
   


    if(isset($_POST["submit"])) {
       
    $data = 'Username:'. $_POST["username"]. ' Email:'.$_POST["email"]."\n";
       
       
    $fehler = false;
    $fehlertext = "";
   
    if(empty($_POST["username"])) {
        $fehler = TRUE;
        $fehlertext .= '- Bitte gib einen gültigen Usernamen an!'."<br>";
    }
    if(empty($_POST["email"])) {
        $fehler = TRUE;
        $fehlertext .= '- Bitte gib eine gültige Email an, auf der wir dich kontaktieren kännen!'."<br>";
    }
    if(!isset($_POST["confirm"])) {
        $fehler = TRUE;
        $fehlertext .= 'Du musst den Usernamen geaddet haben!'."<br>";       
    }
   
    if($fehler) {
        echo $fehlertext;
       
    }
    elseif(in_array($data, $array)) {
        echo 'Bereits eingetragen!';       
    } else {
        $handle = fopen($datei, "a+");
        fwrite($handle, $data);
        fclose($handle);       
  }
   
}
?>

Wäre es jetzt möglich, mir zu helfen :p
 
Also ich denke für den Anfang reicht es wenn du
Code:
file_put_contents('src', json_endcode($_POST)); // Zum Einsetzen der Daten in eine Datei
und
Code:
$array = json_decode(file_get_contents('src')); // Zum Auslesen der Daten in einer Datei
benutzt, dann arbeitest du dich weiter in die Materie ein und was vielleicht sehr interessant wäre ist filter_* (filter_var / filter_input etc.) damit kannst du E-Mails etc. prüfen.
 
Werbung:
Also ich denke für den Anfang reicht es wenn du file_put_contents('src', json_endcode($_POST)); und $array = json_decode(file_get_contents('src')); benutzt, dann arbeitest du dich weiter in die Materie ein und was vielleicht sehr interessant wäre ist filter_* (filter_var / filter_input etc.) damit kannst du E-Mails etc. prüfen.
Danke, dennoch isst es bei meinem Beispiel ja nur ne kleine Sache, die man ändern müsste. Könntest du deine Antwort auf mein Beispiel beziehen :)
 
Code:
<?php

    error_reporting(-1);
    ini_set('display_errors', true);
    $datei = 'php/data.txt';
    //$file = file($datei);
    //$array = array($file);

    $array = json_decode(file_get_contents($datei), true);
    if (!is_array($array)) $array = array();
   
    if(isset($_POST["submit"], $_POST['username'], $_POST['email'])) {
     
    //$data = 'Username:'. $_POST["username"]. ' Email:'.$_POST["email"]."\n";
    $data = array($_POST['username'], $_POST['email']);
    $fehler = false;
    $fehlertext = "";

    if(empty($_POST["username"])) {
        $fehler = TRUE;
        $fehlertext .= '- Bitte gib einen gültigen Usernamen an!'."<br>";
    }
    if(empty($_POST["email"])) {
        $fehler = TRUE;
        $fehlertext .= '- Bitte gib eine gültige Email an, auf der wir dich kontaktieren kännen!'."<br>";
    }
    if(!isset($_POST["confirm"])) {
        $fehler = TRUE;
        $fehlertext .= 'Du musst den Usernamen geaddet haben!'."<br>";    
    }

    if($fehler) {
        echo $fehlertext;
     
    }
    elseif(count(array_intersect($array, array($data))) != 0) {
        echo 'Bereits eingetragen!';    
    } else {
        //$handle = fopen($datei, "a+");
        //fwrite($handle, $data);
        //fclose($handle);
        array_push($array, $data);
        file_put_contents($datei, json_encode($array));
  }

}
?>
Hier.. du musst noch viel dazu lernen, aber wenn es dir Spass macht, kannst du bereits in kurzer zeit viel Stoff lernen :D aber fürs erste denke ich reicht dieses simple code-Gerüst #so nun hab' ich's nochmals abgeändert
 
Zuletzt bearbeitet:
Werbung:
Warning: array_intersect() [function.array-intersect.php]: Argument #1 is not an array in/home/bhalfarm/www/bhalfarm.myhostpoint.ch/lol/php/savedata.phpon line 35

Warning: array_push() expects parameter 1 to be array, null given in/home/bhalfarm/www/bhalfarm.myhostpoint.ch/lol/php/savedata.phpon line 41
 
Zuletzt bearbeitet:
Werbung:
Und warum machst du das jetzt komplizierter als nötig? file und in_array reichen vollkommen aus!

Du solltest wieder das erste Script nehmen und dann mal überlegen, was du hier veranstaltest:

PHP:
$file = file($datei);
$array = array($file);
 
Und warum machst du das jetzt komplizierter als nötig? file und in_array reichen vollkommen aus!

Du solltest wieder das erste Script nehmen und dann mal überlegen, was du hier veranstaltest:

PHP:
$file = file($datei);
$array = array($file);

Das ist leider nicht das Ziel, er sollte dann ja zukünftig eine Art Datenbank haben, was er damit nicht erreichen kann..
 
Wer redet denn von einer Datenbank? Hat hier bisher keiner gemacht, wäre allerdings besser. File-basierend führt meist zu Problemen. Ansonsten bleibt es dabei, das genannte Problem lässt sich mit file und in_array locker lösen!
 
Werbung:
Ansonsten bleibt es dabei, das genannte Problem lässt sich mit file und in_array locker lösen!
Nun ich komme nicht weiter. Ich lege zuerst ja eine Variable an, die mir die Zeilen der .txt-Datei speichert, dann lege ich eine Variable an, welche mir ein Array speichert. Hmm, ich blicke da gerade nicht durch.
 
PHP:
$file = file($datei);
// in $file stehen jetzt deine Daten, $file ist ein Array!
$array = array($file);
// In $array steht jetzt ein Array mit einem Array, was soll das???
Leute, das sind Grundlagen!!!
 
Werbung:
Also Stand der Dinge. Im Moment werden Nur doppel-Einträge geblockt, bei denen Username und Email gleich sind. Wie änder ich es, dass nach einer Übereinstimmung von z.B nur Username geschaut wird?
 
Du solltest auf eine Datenbank umsteigen, das wird sonst immer aufwändiger

Du muss in eine Schleife das Array durchlaufen und dann z.B. per strpos herausfinden, ob der Name bzw. eMail-Adresse schon vorhanden ist.
 
Zurück
Oben