Newsletter - geht nur an eine Person

08154711

Erfahrenes Mitglied
Hi,
Habe Script, klappt auch alles bis auf die Tatsache das der Newsletter nur an diePerson verschickt wir die an oberster Stelle steht :confused:
Vielleicht hat jemand einen Tipp?
PHP:
<?php 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#
#   Newsletter Script version 1.0 - 21.03.2008
#   
#   © 2008 Rudomazin Yury - rudomazin@gmail.com
#
#   Version 1.1 - vom 15.04.2008
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

# # # # # # # # #  #  KONFIGURATION  # # # # # # # # # # # # # # # #
$adminname="1"; // Benutzername für den Login
$adminpw="1"; // Passwort für den Login
$adminmail="info@info.de";  // deine Email Adresse für den Emai-Versand - idealerweise webmaster@deine-domain.de
$stehenlassen=172800; // 48 std in sekunden - Zeit in der die Anmeldungen und Löschungen bestätigt werden müssen
$db="newsletter.txt"; // CHMOD 777 hier werden die Benuzterdaten gespeichert..
$eintrage_pro_seite="50"; // wieviele angemeldete Benutzer sollen im Admin-Bereich / Seite eingeblendet werden..  Blätterfunktion...
# # # # # # # # #  KONFIGURATION ENDE  # # # # # # # # # # # # # # #


session_start();
$zeit=time ();
$nichtmehrgueltig=$zeit-$stehenlassen;
$nl=chr(13).chr(10);
$action=$_GET['action'];
$xdb='PGJyIC8+PGJyIC8+PGJyIC8+PGJyIC8+PGJyIC8+PHA+PGEgaHJlZj0iaHR0cDovL3d3dy53ZWJkZXNpZ24ucnVkb21hemluLmRlLyIgdGFyZ2V0PSJfYmxhbmsiPlNjcmlwdCB2b24gREVSVVMgV2ViZGVzaWduPC9hPjwvcD4=';

if($action=="logout"){ // Admin logout
    session_unset ("logedin");
    session_destroy();
    header("Location: http://".$_SERVER['HTTP_HOST']);
} elseif($action=="login"){ // Admin login
    $name = $_POST['name'];
    $pw = $_POST['pw'];
    if($name==$adminname && $pw==$adminpw){
        ini_set("session.use_cookies", "0");
        $_SESSION["logedin"] = true;
        header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']."?action=admin");
    } else {
        header("Location: http://".$_SERVER['HTTP_HOST']);
    }
}

#include("../../../inc/header.php"); // hier evtl den header einbinden

// nicht rechtzeitig bestätigte Anmeldungen löschen und nicht rechtzeitig bestätigte Löschungen auf "normal" setzen
$alter_inhalt=file($db);
$output=fopen($db, "w");
if ($output){
    flock($output,2);
    foreach($alter_inhalt as $zeile){
        $inhalt=explode("|",$zeile);
        if($inhalt[5]=="" || ($inhalt[5]>$nichtmehrgueltig && $inhalt[3]=="rein") || ($inhalt[5]>$nichtmehrgueltig && $inhalt[3]=="raus")){
            fputs($output, $zeile);
        } elseif ($inhalt[5]<$nichtmehrgueltig && $inhalt[3]=="raus"){
            $zeile=$inhalt[0]."|".$inhalt[1]."|".$inhalt[2]."|".$inhalt[3]."||||".$nl;
            fputs($output, $zeile);
        }
    }
    flock($output,3);
    fclose($output);
} else {
    echo "<p>Datei konnte nicht zum Schreiben ge&ouml;ffnet werden, bitte ändern sie die Zugriffsrechte!</p>";
}

if($action=="rein"){  // Anmeldung
    $email=$_GET['email'];
    $vname=$_GET['vname'];
    $name=$_GET['name'];
    if(empty($email) || empty($vname) || empty($name)) {
        echo "<p>Du musst deinen Namen, deinen Vornamen und eine Email-Adresse angeben!</p>";
        echo '<form action="#" method="get"> 
                    <table width="100%" cellpadding="3" cellspacing="1">
                        <tr><td width="140" align="right">Nachname:</td><td align="left"><input type="text" name="name" value="'.$name.'" style="width:100%;" /></td></tr>
                        <tr><td align="right">Vorname:</td><td align="left"><input type="text" name="vname" value="'.$vname.'" style="width:100%" /></td></tr>
                        <tr><td align="right">E-Mail:</td><td align="left"><input type="text" name="email" value="'.$email.'" style="width:100%" /></td></tr>
                        <tr><td>&nbsp;</td><td>anmelden: <input type="radio" name="action" value="rein" checked="checked" /> abmelden: <input type="radio" name="action" value="raus" /></td></tr>
                        <tr><td>&nbsp;</td><td align="left"><input type="submit" name="submit" value="absenden" style="width:100%" /></td></tr>
                    </table>
                </form>';
    } else {
        $inhalt = file($db);
        foreach($inhalt as $zeile){
            $inhalt=explode("|",$zeile);
            if($inhalt[0]==$email) $err=true;
        }
        if(isset($err)){
            echo "<p>Die Email Adresse $email befindet sich bereits im Verteiler</p>";
        } else {
            $output = fopen($db,"a");
            if ($output){
                flock($output,2);
                srand(microtime()*1000000);
                $code=rand(10000,99999);
                fputs ($output, "$email|$vname|$name|rein|$code|$zeit|$nl");
                flock($output,3);
                fclose($output);
                mail($email,"Newsletter Anmeldung ".$_SERVER['HTTP_HOST'],"Hallo $vname $name, \n\ndeine Email Adresse $email wurde von dir oder jemandem Fremden in unserem Newsletter-Verteiler unter ".$_SERVER['HTTP_HOST']." eingetragen. \n\nWenn du die Aufnahme wirklich w&uuml;nschst, musst Du diesen Link anklicken http://".$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']."?action=reinconfirm&code=$code .\n\nSolltest Du dich doch umentschieden haben, oder es liegt ein Irrtum vor, ignoriere einfach diese Email, der Eintrag wird ohne das dieser bestätigt wurde nach 48 Stunden automatisch gelöscht. \n\nmfg Admin von ".$_SERVER['HTTP_HOST'],"From: $adminmail");
                echo "<p>Vielen Dank, $vname $name f&uuml;r deine Anmeldung.<br />Deine Email $email wurde im Verteiler zur Aufnahme vorgemerkt.</p><p>Du wirst in K&uuml;rze eine Email mit einem Best&auml;tigungslink erhalten. Erst nach dem du diesen angeklickt hast, wird deine Email Adresse vollst&auml;ndig in den Verteiler augenommen.</p><p>Diesen Link solltest Du binnen von n&auml;chten 48 Stunden angeklickt haben, sonst wird deine Newsletter-Anmeldung automatisch gel&ouml;scht.</p>";
            }
        }
    }
} elseif($action=="raus") { // Abmeldung
    $email=$_GET['email'];
    if(!empty($email)){
        $inhalt = file($db);
        foreach($inhalt as $zeile){
            $inhalt=explode("|",$zeile);
            if($inhalt[0]==$email) $err=true;
        }
        if(!isset($err)){
            echo "<p>Die Email Adresse $email befindet sich nicht im Verteiler</p>";
        } else {
            $alter_inhalt=file($db);
            $output=fopen($db, "w");
            if($output){
                flock($output,2);
                srand(microtime()*1000000);
                $code=rand(10000,99999);
                foreach($alter_inhalt as $zeile){
                    $inhalt=explode("|",$zeile);
                    if($inhalt[0]==$email){
                        $zeile=$inhalt[0]."|".$inhalt[1]."|".$inhalt[2]."|raus|".$code."|".$zeit."|".$nl;
                        mail($inhalt[0],"Newsletter Abmeldung ".$_SERVER['HTTP_HOST'],"Hallo $vname $name, \n\ndu oder jemand Fremde hat deine Email Adresse ".$inhalt[0]." zum l&ouml;schen aus unserem Newsletter-Verteiler unter ".$_SERVER['HTTP_HOST']." vorgemerkt. \n\nWenn du die Abmeldung wirklich w&uuml;nschst, musst Du diesen Link anklicken http://".$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']."?action=rausconfirm&code=$code .\n\nSolltest Du dich doch umentschieden haben, oder es liegt ein Irrtum vor, ignoriere einfach diese Email. \n\nmfg Admin von ".$_SERVER['HTTP_HOST']."","From: $adminmail");
                        echo "<p>Halo $inhalt[1] $inhalt[2].<br />Deine Email $email wurde zum l&ouml;schen aus dem Verteiler vorgemerkt.</p><p>Du wirst in K&uuml;rze eine Email mit einem Best&auml;tigungslink erhalten. Erst wenn du diesen angeklickt hast, wird deine Email Adresse vollst&auml;ndig aus dem Verteiler gel&ouml;scht.</p>";
                    }
                    fputs($output, $zeile);
                }
                flock($output,3);
                fclose($output);
            }
        }
    } 
} elseif($action=="reinconfirm"){ // Anmeldung Bestätigung
    $code=$_GET['code'];
    if(!empty($code)){
        $alter_inhalt=file($db);
        $output=fopen($db,"w");
        if($output){
            flock($output,2);
            foreach($alter_inhalt as $zeile){
                $inhalt=explode("|",$zeile);
                if($inhalt[3]=="rein" && $inhalt[4]==$code){
                    $zeile=$inhalt[0]."|".$inhalt[1]."|".$inhalt[2]."||||".$nl;
                    echo "<p>Deine Newsletter Anmeldung wurde best&auml;tigt. Du wirst nun unsere Newsletter empfangen!</p>";
                } 
                fputs($output, $zeile);
            }
            flock($output,3);
            fclose($output);
        }
    } 
} elseif($action=="rausconfirm"){ // Abmeldung Bestätigung
    $code=$_GET['code'];
    if(!empty($code)){
        $alter_inhalt=file($db);
        $output=fopen($db,"w");
        if($output){
            flock($output,2);
            foreach($alter_inhalt as $zeile){
                $inhalt=explode("|",$zeile);
                if($inhalt[3]!="raus" && $inhalt[4]!=$code){
                    fputs($output, $zeile);
                } else {
                    echo "<p>Deine Newsletter Abmeldung wurde best&auml;tigt. Du wirst nun keine Newsletter mehr empfangen!</p>";
                }
            }
            flock($output,3);
            fclose($output);
        }
    } 
} elseif($action=="admin"){ // Admin eingeloggt
    if($_SESSION["logedin"] == true) {
        $alter_inhalt=file($db);
        $eintraege=count($alter_inhalt);
        (!isset($_GET['page'])) ? $seite="1" : $seite=$_GET['page'];
        $seiten=$eintraege/$eintrage_pro_seite;              //Anzahl der Seiten errechnen
        $abeintrag = $seite * $eintrage_pro_seite - $eintrage_pro_seite;
        echo '<p>Sie sind eingeloggt!</p><p><a href="'.$_SERVER['SCRIPT_NAME'].'?action=schreiben">Neuen Newsletter versenden</a> | <a href="'.$_SERVER['SCRIPT_NAME'].'?action=logout">ausloggen</a></p>';
        echo '<p>Folgende Newsletter Empf&auml;nger sind angemeldet:</p><p class=\"date\">Seite: ';
        for($ass = 1; $ass-1< $seiten; $ass++){              //Ausgabe der Linkliste
            echo '<a href="?action=admin&page='.$ass.'">';
            ($ass==$seite)? $ss="<b>$ass</b>": $ss=$ass;
            echo $ss."</a> ";
        }
        echo '</p><table width="100%" cellpadding="3" cellspacing="1" style="background-color:#F0F0F0">';
        for($i=$abeintrag; $i<$eintrage_pro_seite+$abeintrag; $i++){
            $farbe = ($i % 2) ? "FFFFFF" : "F9F9F9";
            if(strlen($alter_inhalt[$i]) >0){
                $inhalt=explode("|",$alter_inhalt[$i]);
                echo '<tr style="background-color:#'.$farbe.'"><td>'.$inhalt[1].'</td><td>'.$inhalt[2].'</td><td>'.$inhalt[0].'</td><td><a href="'.$_SERVER['SCRIPT_NAME'].'?action=delete&email='.$inhalt[0].'">l&ouml;schen</a></td></tr>';
            }
        }
        echo '</table><p>Insgesamt sind '.$eintraege.' Newsletter Empf&auml;nger angemeldet.</p>';
    }
} elseif($action=="schreiben"){ // Email verfassen
    if($_SESSION["logedin"] == true) {
        echo '<p>Schrebe Xname und Xvname da wo die Namen und Vornamen der Benutzer eingesetzt werden sollen.</p>
        <form action="?action=senden" method="post"> 
                    <table width="100%" cellpadding="3" cellspacing="1">
                        <tr><td width="140" align="right">Betreff:</td><td align="left"><input type="text" name="betreff" value="" style="width:100%;" /></td></tr>
                        <tr><td align="right" valign="top">Text:</td><td align="left"><textarea rows="20"  style="width:100%" name="mailtext"></textarea></td></tr>
                        <tr><td>&nbsp;</td><td align="left"><input type="submit" name="submit" class="button" value="Newsletter versenden" style="width:100%" /></td></tr>
                    </table>
                </form>';
    }
} elseif($action=="senden"){ // Email versenden
    if($_SESSION["logedin"] == true) {
        $betreff=stripcslashes($_POST['betreff']);
        $mailtext=stripcslashes($_POST['mailtext']);
        echo "<p>Der Newsletter wurde an folgende Email Adressen versandt:<br />";
        $alter_inhalt=file($db);
        foreach($alter_inhalt as $zeile){
            $inhalt=explode("|",$zeile);
            if($inhalt[3]!='rein' && $inhalt[3]!='raus'){ 
                $mailtext=str_replace("Xname",$inhalt[1],$mailtext);
                $mailtext=str_replace("Xvname",$inhalt[2],$mailtext);
                mail($inhalt[0],$betreff,$mailtext,"From: $adminmail");
                echo $inhalt[0]."<br />";
            }
        }
        echo "</p>";
    }
} elseif($action=="delete"){ // Empfänger löschen
    if($_SESSION["logedin"] == true) {
        $email=$_GET['email'];
        $alter_inhalt=file($db);
        $output=fopen($db,"w");
        if($output){
            flock($output,2);
            foreach($alter_inhalt as $zeile){
                $inhalt=explode("|",$zeile);
                if($inhalt[0]!=$email){
                    fputs($output, $zeile);
                } else {
                    echo "<p>Der Empf&auml;nger $email wurde gel&ouml;scht.</p>";
                }
            }
            flock($output,3);
            fclose($output);
        }
    }
} elseif($action=="loginform"){ // login Formular
    echo '<form action="?action=login" method="post"> 
                <table width="100%" cellpadding="3" cellspacing="1">
                    <tr><td width="140" align="right">Admin:</td><td align="left"><input type="text" name="name" value="" style="width:100%;" /></td></tr>
                    <tr><td align="right">Passwort:</td><td align="left"><input type="password" name="pw" value="" style="width:100%" /></td></tr>
                    <tr><td>&nbsp;</td><td align="left"><input type="submit" name="submit" class="button" value="einloggen" style="width:100%" /></td></tr>
                </table>
            </form>';
} elseif(!isset($action)){
    echo '<form action="#" method="get"> 
            <table width="100%" cellpadding="3" cellspacing="1">
                <tr><td width="140" align="right">Nachname:</td><td align="left"><input type="text" name="name" value="" style="width:100%;" /></td></tr>
                <tr><td align="right">Vorname:</td><td align="left"><input type="text" name="vname" value="" style="width:100%" /></td></tr>
                <tr><td align="right">E-Mail:</td><td align="left"><input type="text" name="email" value="" style="width:100%" /></td></tr>
                <tr><td>&nbsp;</td><td>anmelden: <input type="radio" name="action" value="rein" checked="checked" /> abmelden: <input type="radio" name="action" value="raus" /></td></tr>
                <tr><td>&nbsp;</td><td align="left"><input type="submit" name="submit" class="button" value="absenden" style="width:100%" /></td></tr>
            </table>
        </form>';

}
echo base64_decode($xdb);

#include("../../../inc/footer.php"); // hier evtl den footer einbinden

?>
 
Warum das nun nicht funktioniert, kann ich grad nicht erkennen (vor allem komisch, wenn es beim ersten Eintrag funktioniert... aber vielleicht hab ich auch einfach was übersehen), aber ein paar andere Dinge hab ich anzumerken ;)

session_start() kommt immer an den Anfang, bevor irgendwas anderes gemacht wird.
Und dein Mailtext kann bei den weiteren Empfängern nicht mehr die persönlichen Namen enthalten, da nach dem ersten Durchlauf Xname und Xvname nicht mehr existieren, sie wurden schon vom ersten Namen überschrieben und können dann also nicht mehr gefunden und ersetzt werden.

Ich weiß ja nu nicht, wie deine Textdatei aussieht. Vielleicht fehlen einfach die Zeilenumbrüche nach jedem Namen und es gibt nur eine Zeile und deshalb kann auch nur eine Person angesprochen werden?
 
Wir müssten mal die Textdatei sehen.
kannst ja mal schnell eine neue mit 5 Fake-Emailadressen nehmen
 
Hallo,
So sieht die Textdatei auf dem Server aus, scheint in Ordnung zu sein, oder :confused:

1@web.de|1|1|rein|26541|1208538796|
2@web.de|2|2|rein|34275|1208538812|
3@web.de|3|3|rein|99851|1208538824|
4@web.de|4|4|rein|52999|1208538838|
5@web.de|5|5|rein|32510|1208538852|

Habe die Textdatei nochmal gelöscht und das gleiche wiederholt jetzt ging es. Wo sollte denn session_start() eingefügt werden
 
Zuletzt bearbeitet:
Hi,
Jetzt klappt der Newsletter. Ich lasse rufe das Fenster mit js auf
Code:
<script type="text/javascript">
function FensterOeffnen (Adresse) {
  Newsletter = window.yYXZ(Adresse, "Zweitfenster",  "width=440,height=200,left=400,top=400" );
}
</script>
HTML:
<a href="newsletter.php" onclick="FensterOeffnen(this.href); return false">Newsletter</a>
Das klappt auch, allerdings nur mit dem Firefox, im IE7 geht nur eine leere html Seite auf, desweiteren möchte ich die normale Browserleiste einfügen geht aber auch nicht. Geht das nur mitJS, oder :confused:
 
Hi,

was hat es denn mit der Syntax window.yYXZ() auf sich?

Die Methode zum Öffnen eines Fensters lautet open(), und funktioniert mit deinem übrigen Codeschnipsel bei mir im IE7 einwandfrei, sprich: es wird keine leere Seite geöffnet.

Und welche "normale Browserleiste" meinst du?

In dem verlinkten Abschnitt findest du eine Übersicht der möglichen Parameter für die Methode.
 
Hi,
Mit der Leiste meinte ich das Feld wo man die URL eingibt, weil man nach der URL noch ?action=loginform eingibt um in den Adminbereich zu kommen. Dieses Fenster sollte wieder komplett den Monitor ausfüllen, damit das Scrollen entfällt. Habe xyz durch open ersetzt, im IE bleibt es beim alten. Vielleicht ist Funktion resizeTo() ein besserer Ersatz als die Verwendung von JS...
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Unbenanntes Dokument</title>
<script type="text/javascript">
function FensterOeffnen (Adresse) {
  Newsletter = window.open(Adresse, "Zweitfenster",  "width=440,height=200,left=400,top=400" );
}
</script></head>

<body>

<a href="newsletter.php" onclick="void(0);                   return false">Newsletter</a>

</body>
</html>
 
Zuletzt bearbeitet:
Mit der Leiste meinte ich das Feld wo man die URL eingibt
Das wäre dann der Parameter location=yes für die Adresszeile.

Ansonsten bleibt es bei meiner Aussage, dass das Script bei mir im IE7 tadellos läuft, und das verlinkte Dokument im Popup-Fenster geladen wird.

//edit: Vorausgesetzt, dass auch die JS-Funktion "FensterOeffnen()" im onclick-Eventhandler aufgerufen wird, und nicht, wie von dir gerade im Quellcode editiert "void(0)", denn dann öffnet sich noch nicht mal ein leeres Popup, und das browserübergreifend.

Vielleicht ist Funktion resizeTo() ein besserer Ersatz als die Verwendung von JS...
Die resizeTo()-Methode ist ebenfalls Javascript.
 
Hi,
Ich möchte das das popup fenster auch im IE7 als popup und nicht als neuen Tab. Im FF klappt es, und noch etwas, wenn ich die Toolbar aussen vorlasse kann ich keine Adresse in die Locationbar einfügen, kopieren etc. Habe was gelesen von einer Mindestgrösse von 100px, bin aber weit drüber(555px). Hier ist der Code
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
</head>
<body>
<script type="text/javascript">
function pop(file)
{
helpwindow = window.open(file,"index.php","location=yes,width=555,height=250,top=350,left=300,resizable=yes,toolbar=yes");
helpwindow.focus();
return false;
}
</script>
</body>
<a href="index.php" target="_blank" onclick="return void(0);         ">Link</a>
</html>

edit..: Sorry, muß mich verbessern. Das Script geht auch im IE7. Im FF mit der Erweiterung IETAB wird komischerweise kein popup Fenster aufgebaut sondern ein ganzer Tab
 
Zuletzt bearbeitet:
Zurück