Hagen: Array nur einmal in txt-Datei speichern

Hallo liebe ´www´ler´,

ich habe ein Script geschrieben in dem sich jeder in eine Liste eintragen kann der an einem von mir veranstalteten Wettbewerb teilnehmen möchte. Diese Script läuft auch soweit ganz gut nur leider kann man sich doppelt dort eintragen und ich möchte das dies nur einmal möglich ist da diese Liste dann acuh per inlude auf der Seite ausgegeben wird. Hättet ihr da ne Idee ?

Hier das Script:

<?
// Usermails
$Peter = "Peter";
$Petermail = "Peter@gmx.de";

// Mailadresse checken und in Datei battle_nicks.txt schreiben für Peter
foreach ($nick as $conta) { if ($conta == $Peter) { if ($mail == $Petermail) {echo ("Danke du wurdest erfolgreich der Liste hinzugefügt...");
$filename = 'battle_nicks.txt';
foreach ($nick as $conta) { $somecontent = "$conta\n"; }

if (is_writable($filename)) {

if (!$handle = fopen($filename, "a")) {
         print "Sorry, es gab einen Fehler";
         exit;
   }

if (!fwrite($handle, $somecontent)) {
       print "Sorry, es gab einen Fehler";
       exit;
   }

fclose($handle);

} else {
   print "Sorry, es gab einen Fehler";
}}}
if ($conta == $Peter) { if ($mail != $Petermail) {echo ("Sorry, deine Mailadresse konnte leider nicht identifiziert werden...");}}}
?>

Die User müssen sich in einem Sprungmenü auswählen und anschließend ihre Mailadresse die sie in meinem Forum angegeben haben eintragen. Dann tritt die oben aufgeführte Datei in Kraft. Ich brauch jetzt nur noch einen Befehl der bewirkt das man sich nur einmal in die Textdatei schreiben lassen kann...

Würde mich über Antworten sehr freuen...

MFG

Peter

  1. Moin!

    Die User müssen sich in einem Sprungmenü auswählen und anschließend ihre Mailadresse die sie in meinem Forum angegeben haben eintragen. Dann tritt die oben aufgeführte Datei in Kraft. Ich brauch jetzt nur noch einen Befehl der bewirkt das man sich nur einmal in die Textdatei schreiben lassen kann...

    Wenn du wissen willst, ob eine Information in der Datei schon drinsteht, mußt du nachgucken, ob die Information schon in der Datei drinsteht - und nicht einfach nur neue Informationen hinten anhängen.

    - Sven Rautenberg

    --
    Die SelfHTML-Developer sagen Dankeschön für aktuell 20885,68 Euro Spendengelder!
    1. Hey Sven,

      Wenn du wissen willst, ob eine Information in der Datei schon drinsteht, mußt du nachgucken, ob die Information schon in der Datei drinsteht - und nicht einfach nur neue Informationen hinten anhängen.

      Das ist mir auch klar ich hab mir das so vorgestellt... wenn die Information in der Daeti steht wird sie nicht mehr hineingeschrieben und eine Fehlermeldung ausgegeben. Sollte dies aber nicht der Fall sein und die Information steht nicht drin dann muss das Script die Information schreiben...

      Meine Frage jetzt: Wie mach ich das, also welchen Code muss ich dazu benutzen ? Hab gehört das kann man irgendwie mit einem Datum machen... ?

      MFG

      Hagen

      1. ... wollte noch hinzufügen wenn eine Information aus einem bestimmten Array schon drin steht z.B.: Hagen steht in der txt-Datei dann darf dieser Array dort nicht mehr abgespeichert werden...

        MFG

        Hagen

      2. Moin!

        Wenn du wissen willst, ob eine Information in der Datei schon drinsteht, mußt du nachgucken, ob die Information schon in der Datei drinsteht - und nicht einfach nur neue Informationen hinten anhängen.

        Meine Frage jetzt: Wie mach ich das, also welchen Code muss ich dazu benutzen ? Hab gehört das kann man irgendwie mit einem Datum machen... ?

        Datei aufmachen, alles einlesen, Datei zumachen. Gucken, ob der Eintrag schon drinsteht. Wenn ja: Meldung. Wenn nein, Datei zum Schreiben neu öffnen...

        Wozu das Datum? Datum von was?

        - Sven Rautenberg

        --
        Die SelfHTML-Developer sagen Dankeschön für aktuell 20885,68 Euro Spendengelder!
        1. Hey Sven,

          Datei aufmachen, alles einlesen, Datei zumachen. Gucken, ob der Eintrag schon drinsteht. Wenn ja: Meldung. Wenn nein, Datei zum Schreiben neu öffnen...

          kann ich das dann mit fopen machen ? also

          $fp = (datei.txt);
          fopen = ($fp)); {
          Anweisungsblock
          }
          fclose;
          usw. ?

          nur wo soll ich da die Anweisung hinschreiben das er wenn der Eintrag vorhanden ist auch nicht in die Datei schreibt und wenn ja in die Datei schreibt ?

          MFG

          Hagen

          1. Moin!

            Datei aufmachen, alles einlesen, Datei zumachen. Gucken, ob der Eintrag schon drinsteht. Wenn ja: Meldung. Wenn nein, Datei zum Schreiben neu öffnen...

            kann ich das dann mit fopen machen ?

            Ich habe genau geschrieben, was du machen sollst. Natürlich nicht in phpisch, sondern in deutsch. Bleibt also die Aufgabe für dich, die Anweisungen in Programmiersprache umzusetzen.

            also

            $fp = (datei.txt);

            Hä? Sinn?

            fopen = ($fp)); {
            Anweisungsblock
            }
            fclose;
            usw. ?

            Ja, würde helfen.

            nur wo soll ich da die Anweisung hinschreiben das er wenn der Eintrag vorhanden ist auch nicht in die Datei schreibt und wenn ja in die Datei schreibt ?

            Wie ich schon schrieb: Datei aufmachen, einlesen, zumachen. (Hilfsanmerkung: Es gibt Arrays, die sich für das Einlesen gut eignen.)

            Gucken, ob der Eintrag schon drin ist.

            Wenn ja: Meldung ausgeben.

            Wenn nein: Datei zum Schreiben neu öffnen...

            - Sven Rautenberg

            --
            Die SelfHTML-Developer sagen Dankeschön für aktuell 20885,68 Euro Spendengelder!
          2. Hi!

            kann ich das dann mit fopen machen ? also

            $fp = (datei.txt);
            fopen = ($fp)); {
            Anweisungsblock
            }
            fclose;
            usw. ?

            Naja, Du kennst das Manual zu PHP?

            Dateiinhalt in Array lesen: http://de3.php.net/file
            Was sind Arrays? http://de3.php.net/types.array
            Text in Datei schreiben: http://de3.php.net/fwrite

            Grüße
            Andreas

  2. Hallo zurück,

    ich hab das selbige schon mal für nen Newsletter geschrieben: Ich speichere hier die Personen-Daten in nem Array in nem Text-File:

    <?php $benutzer[]=array(id=>"0",name=>"Peter",email=>"peter@peter.de"); ?>
    <?php $benutzer[]=array(id=>"1",name=>"Heinz",email=>"Heiz@peter.de"); ?>
    <?php $benutzer[]=array(id=>"2",name=>"Max",email=>"Max@peter.de"); ?>

    Dieses Textfile (user_daten.php) speicherst Du ausserhalb deines HTTP_Roots, damit keiner damit Unfug machen kann.
    Bei einer Neueintragung geht das dann so:

    foreach($benutzer as $lauf_id){
    if ($lauf_id[email]==$forumular_email)$nachricht="Du bist schon eingetragen";
    }

    /*
    .
    .
    .

    HIER WEITERE ABFRAGUNGEN z.b. EMAIL OK???? Alle im Fehlerfall $nachricht="Fehler....";
    .
    .
    .
    .
    */

    if ($nachricht==""){//Falls $nachricht NICHT leer ist, wird nix geschrieben
    //Textfile öffnen und eine neue Zeiel hinzufügen (komplett mit <?php  ?>
    //z.B.

    $eintragungs_id ="0";
    $eintragungs_id=count($benutzer);
    #Datei öffnen
    $data = fopen("../pathToDir/user_daten.php","a+");
      flock($data,LOCK_SH);
      $daten = "<?php $beutzer[]=array(id=>"$eintragungs_id",name=>"$name",email=>"$email");?>\n";
     #Daten schreiben
      fwrite ($data,$daten);
      unset ($daten);

    #Newsletterdatei schließen
     flock($data,LOCK_UN);
     fclose($data);
    }

    Klar soweit? Ich speichere dann noch ein Datum im Array, verschiedene andere Benutzerdaten usw.... Je nach Lust und Laune...

    Dann die Ausgabe in deiner HTML Seite:

    #Erstmal Daten includen
    include "../pathToDir/user_daten.php";

    #Dann ausgeben
    foreach ($benutzer as $id){
    ##Hier Abfragen, welche id's ausgegeben werden sollen z.B.
    if ($schluessel[id]!="0" && $schluessel[id]!=""){
    print ("Name: ".$id[name]."   Email: ".$id[email]."<br>\n");
    }//Ende if
    }//Ende foreach

    Dann wird dir ne Liste mit allen Eingetragenen ausgegeben, aber nur Name und EMail, kein Datum, keine IP, und was Du sonst noch alles so mit abspeichern möchtest.

    Bie mir funktioniert das wunderbar. Ach ja, Du kannst Deinen Benutzern dann auch die Möglichkeit geben sich wieder rauszulöschen, dann eben das ganze TExtfile neu schreiben, und sobald $benutzer[email]==$formular_email, dann schreibst Du ne leere Zeile (oder gar nix)....

    Greets Tom1tk

    Hoffe das hilft weiter...

    Bei Fragen kannst mir auch ne E-Mail schicken, KEIN SPAM