Array nur einmal in txt-Datei speichern
Hagen
- php
0 Sven Rautenberg0 Hagen0 Hagen0 Sven Rautenberg
0 Tom1tk
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
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
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
... 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
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
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
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
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
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