Arrayelement anhand seines Values löschen
scorn
- php
0 Andreas Korthaus0 scorn0 Andreas Korthaus0 norbert =:-)
Hallo,
ich möchte für einen Newsletter die Möglichkeit geben, sich auszutragen, die Adressen sind in einer Textdatei gespeichert, ich lese sie mit file() in einen Array.
Nun meine Frage:
mit in_array() kann ich ein Arrayelement anhand seines Values finden.
mit unset() kann ich ein Arrayelement anhand seines Schlüssels löschen.
Wie kann ich aber nun alle Arrayelemente mit einem bestimmten Wert (der Emailadresse) löschen?
danke,
scorn
Hi!
ich möchte für einen Newsletter die Möglichkeit geben, sich auszutragen, die Adressen sind in einer Textdatei gespeichert, ich lese sie mit file() in einen Array.
Nun meine Frage:
mit in_array() kann ich ein Arrayelement anhand seines Values finden.
mit unset() kann ich ein Arrayelement anhand seines Schlüssels löschen.
Wie kann ich aber nun alle Arrayelemente mit einem bestimmten Wert (der Emailadresse) löschen?
Gucke Dir mal die Funktion array_search() an. Bedenke nur das Du nach einem file() den Zeilenumbruch in jedem Element hast.
Grüße
Andreas
Hallo,
Gucke Dir mal die Funktion array_search() an. Bedenke nur das Du nach einem file() den Zeilenumbruch in jedem Element hast.
Aah, danke, dass wollte ich eigentlich fragen, hatte es aber vergessen. Ich hatte, dass nämlich erst so gemacht:
$addys = file("newsletter.txt");
$inhalt = "";
foreach ($addys as $temp) {
if(temp!=$email . ";") { $inhalt .= $temp . "\n"; }
else { echo "Adresse geloescht!"; }
}
Das funktionierte nicht, wenn ich aber schreiben würde
foreach ($addys as $temp) {
if(temp!=$email . ";\n") { $inhalt .= $temp; }
else { echo "Adresse geloescht!"; }
}
dann müsste es klappen, oder?
Aber ich mach es mit array_search, das klingt einfacher.
Bloß eine Frage: Was tut array_search, wenn zwei arrayelemente den selben Wert haben?
Obwohl eigentlich ist es mit foreach einfacher, denn das:
if(isset($_POST['abmelden'])) {
$addys = file("newsletter.txt");
$key = array_search($email.";\n", $addys);
if($key) {
unset($key);
$news = fopen("newsletter.txt","w");
fputs($news, $addys);
fclose($news);
echo "Wir lassen dich jetzt in Ruhe!";
}
else { echo "Deine Emailadresse ist hier nicht vorhanden."; }
}
kann ich ja so nicht schreiben, sonst schreib ich in das txt-dokument ja bloß "array". ich müsste doch eh erst alle werte in einer variablen zusammenfassen... ich glaub ich machs mit foreach.
Hallo,
was zum Teufel is hier falsch, ich bin müde und tauge nicht zum PHP-Coder:
if(isset($_POST['abmelden'])) {
$addys = file("newsletter.txt");
$inhalt = "";
foreach ($addys as $temp) {
if(temp!=$email . ";\n") { $inhalt .= $temp; }
else { $i = "was"; }
}
if($i=="was") {
$newsl = fopen("newsletter.txt","w");
fwrite($newsl,$inhalt);
fclose($newsl);
echo "Wir lassen dich jetzt in Ruhe!";
echo $inhalt;
}
else { echo "Deine Emailadresse ist hier nicht vorhanden. <a href="newsinfo.html" target="_blank" onClick="window.open('newsinfo.html','Information','width=200,height=300';return false" title="Tips, wie du deine Emailadresse löschen kannst, obwohl es hier nicht klappt.">Info</a>"; }
}
Auch wenn die Emailadresse vorhanden ist, schreibt er den else-part auf. Wieso??
hütlichst
scorn
Hi!
Wieso schreibst Du ; in die Textdatei? Außerdem gucke Dir die Funktion trim() an.
Grüße
Andreas
Hut sei mit euch!
Wieso schreibst Du ; in die Textdatei? Außerdem gucke Dir die Funktion trim() an.
; schreib ich, damit ich die Adressen direkt in meinen Mailer kopieren kann.
Ich dachte, die trim() entfernt nur Leerzeichen, danke.
scorn
Aber ändern tut sich so oder so nichts,
der Fehler muss doch irgendwo in der foreach-Sache liegen, ich find ihn bloß nicht!?
Hi!
Aber ändern tut sich so oder so nichts,
der Fehler muss doch irgendwo in der foreach-Sache liegen, ich find ihn bloß nicht!?
if(temp...
fällt Dir was auf? Nur müsste das einen Fehler geben.
Wenns das auch nicht war dann musst Du halt mal ein bisschen probieren, vereinfache das Script so lange bis Du den Fehler hast!
Grüße
Andreas
Hallo,
danke für deine Hilfe, endlich funktioniert es, preiset den Herrn.
Halleluja:
if(isset($_POST['email'])) {
echo "<span style="color:red;">";
if(isset($_POST['anmelden'])) {
$muster = "[1](.{0,1}[_a-zA-Z0-9-])*@([a-zA-Z0-9-]{2,}.){0,}[a-zA-Z0-9-]{3,}(.[a-zA-Z]{2,4}){1,2}$";
if($email!="news@lett.er" AND ereg($muster, $email)) {
$addys = fopen("newsletter.txt","a+");
fputs($addys,$email.";\n");
fclose($addys);
echo "Du wirst von nun an von uns belästigt!";
}
else {
echo "Mailadresse nicht korrekt, oder nicht geändert!";
}
}
if(isset($_POST['abmelden'])) {
$addys = file("newsletter.txt");
$inhalt = "";
foreach ($addys as $temp) {
if($temp==$email.";\n") { $fund = "ja"; }
else { $inhalt .= $temp; }
}
if($fund=="ja") {
$newsl = fopen("newsletter.txt","w");
fwrite($newsl,$inhalt);
fclose($newsl);
echo "Wir lassen dich jetzt in Ruhe!";
}
else { echo "Diese Emailaresse ist hier nicht angemeldet! <a href="newsinfo.html" target="_blank" onClick="window.open('newsinfo.html','Information','width=200,height=300';return false" title="Tips, wie du deine Emailadresse löschen kannst, obwohl es hier nicht klappt.">Info..</a>"; }
}
echo "</span><br>";
}
danke,
scorn
_a-zA-Z0-9- ↩︎
Hallo!
Hast Du das $ nur vergessen zu kopieren, oder kannst wirklcih daran liegen ($temp)?
if(temp!=$email . ";\n")
if(isset($_POST['abmelden']))
{
$addys = file("newsletter.txt");
$inhalt = "";
foreach ($addys as $temp)
{
if(temp!=$email . ";\n")
{
$inhalt .= $temp;
}
else
{
$i = "was";
}
}
if($i=="was")
{
$newsl = fopen("newsletter.txt","w");
fwrite($newsl,$inhalt);
fclose($newsl);
echo "Wir lassen dich jetzt in Ruhe!";
echo $inhalt;
}
else
{
echo "Deine Emailadresse ist hier nicht vorhanden. <a href="newsinfo.html" target="_blank" onClick="window.open('newsinfo.html','Information','width=200,height=300';return false" title="Tips, wie du deine Emailadresse löschen kannst, obwohl es hier nicht klappt.">Info</a>";
}
}
mfg
norbert =:-)