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

Newsletter Anmeldung

skype90

Mitglied
Hallo ,

Ich habe mal wieder ein Problem :S unzwar geht es um eine Newsletter Anmeldung . Sie dient nur zur reinen php Übung bin ja noch ein Anfänger.
PHP:
<?php
define ("ZEILENUMBRUCH", "\r\n");
// 1. Schritt: Formularerstellung,
// 2. Schritt: Kontrolle und
// 2.5 Speicherung der eingegebenen Daten
// 3. Schritt: E-Mail erstellen und versenden,
// 4. Schritt: Kontrolle des letzten Anmeldeschritte
//    (Link in E-Mail Anklicken durch Bezieher).

// Zur Kontrolle von übergebenen Variablen
// echo "<pre>";
// print_r ($_GET);

// Schritt 2: Kontrolle, ob Formular ausgefüllt wurde
if ( $_GET['aktion']        <> 'form_ausg' OR
     $_GET['emailadresse']  == "" OR
     $_GET['einverstanden'] <> "v"
   )
{
    // Schritt 1: Formular anzeigen
    formular_erstellen ( $_GET['emailadresse'],
                         $_GET['gender'],
                         $_GET['vorname'],
                         $_GET['nachname'],
                         $_GET['einverstanden'] );

}
else
{
    echo "<h1>Bestätigungs-Mail erstellt</h1>";

    // erstellen der Kontrollzahl
    $kontrollzahl = date("syhdim");

    // Schritt 2.5: Speichern der eingegeben Daten
    speichern_datei ( $_GET['emailadresse'],
                         $_GET['gender'],
                         $_GET['vorname'],
                         $_GET['nachname'],
                         $kontrollzahl  );

    // E-Mail senden mit Funktion
    mail_zur_kontrolle ( $_GET['emailadresse'],
                         $_GET['gender'],
                         $_GET['vorname'],
                         $_GET['nachname'],
                         $kontrollzahl  );

}

function speichern_datei  ($emailadresse = "",
                           $gender="",
                           $vorname="",
                           $nachname="",
                           $kontrollzahl="" )

{
    $handle = fopen ( "nl-anwaerter.txt", "a" );

    // schreiben des Inhaltes von emailadresse
    fwrite ( $handle, $emailadresse );

    // Trennzeichen einfügen, damit Auswertung möglich wird
    fwrite ( $handle, "|" );

    // schreiben des Inhalts von gender
    fwrite ( $handle, $gender );
    fwrite ( $handle, "|" );

    // schreiben des Inhalts von vorname
    fwrite ( $handle, $vorname );
    fwrite ( $handle, "|" );

    // schreiben des Inhalts von vorname
    fwrite ( $handle, $nachname );
    fwrite ( $handle, "|" );

    // schreiben des Inhalts der Kontrollzahl
    fwrite ( $handle, $kontrollzahl );

    fwrite ( $handle, "\r\n" );

    // Datei schließen
    fclose ( $handle );
}


function mail_zur_kontrolle ($email, $gender, $vorname, $nachname, $kontrollzahl )
{

    if ( $gender == "w")
    {
        $mailtext = "Sehr geehrte Frau $vorname $nachname,";
    }
    elseif ( $gender == "m" )
    {
        $mailtext = "Sehr geehrte Herr $vorname $nachname,";
    }
    else
    {
        $mailtext = "Hallo $vorname $nachname,";
    }
    $mailtext .= ZEILENUMBRUCH;
    $mailtext .= ZEILENUMBRUCH;

    $mailtext .= "Sie haben den Newsletter von ... bestellt. ";
    $mailtext .= "Um sicherzustellen, dass die E-Mail-Adresse ";
    $mailtext .= "funktioniert und Sie den Newsletter erhalten ";
    $mailtext .= "möchten, klicken Sie bitte auf folgenden Link:";
    $mailtext .= ZEILENUMBRUCH;
    $mailtext .= ZEILENUMBRUCH;
    $mailtext .= 'http://localhost/newsletter-freischalten.php';
    $mailtext .= '?mail=';
    $mailtext .= $email;
    $mailtext .= '&id=';
    $mailtext .= $kontrollzahl;
    $mailtext .= ZEILENUMBRUCH;
    $mailtext .= ZEILENUMBRUCH;
    $mailtext .= "Wenn Sie den Newsletter nicht angefordert haben,";      $mailtext .= "entschuldigen Sie bitte diese E-Mail. ";
    $mailtext .= "Dann hat sich wahrscheinlich jemand vertippt. ";        $mailtext .= "Ignorieren Sie einfach die Mail ";
    $mailtext .= "und löschen Sie diese.";

    // Nur zur Kontrolle beim Programmieren, ob E-Mail-Text
    // sauber zusammengestellt wird
    echo '<textarea name="" rows="10" cols="80">';
    echo $mailtext;
    echo "</textarea>";

    mail ($email,
          "Kontrolle E-Mail-Adresse Newsletter XYZ",
          $mailtext,
          "From: [email protected]\nReply-To: [email protected]"
          );
}




function formular_erstellen ($emailadresse = "",
                             $gender="",
                             $vorname="",
                             $nachname="",
                             $einverstanden="" )
{
    echo '<form name="" action="';
    echo $_SERVER['PHP_SELF'];
    echo '" method="GET" enctype="text/html">';

    echo '<p>';
    echo 'Ihre E-Mail-Adresse:<br />';
    echo '<input type="Text" name="emailadresse" value="';
    // Inhalt, falls das Formular bereits unvollständig
    // ausgefüllt wurde (also zweiter Aufruf)
    echo $emailadresse;
    echo '" size="50">';
    echo '</p>';

    echo '<p>';
    echo 'Anrede: (optional)<br>';
    echo '<input type="Radio" name="gender" value="w" ';
    // Inhalt, falls das Formular bereits unvollständig
    // ausgefüllt wurde (also zweiter Aufruf)
    if ( $gender == "w")
    {
        echo 'checked="checked" ';
    }
    echo '/>';
    echo 'Frau   ';

    echo '<input type="Radio" name="gender" value="m" ';
    // Inhalt, falls das Formular bereits unvollständig
    // ausgefüllt wurde (also zweiter Aufruf)
    if ( $gender == "m")
    {
        echo 'checked="checked" ';
    }
    echo '/>';
    echo 'Mann';
    echo '</p>';

    echo '<p>';
    echo 'Vorname: (optional)<br />';
    echo '<input type="Text" name="vorname" value="';
    // Inhalt, falls das Formular bereits unvollständig
    // ausgefüllt wurde (also zweiter Aufruf)
    echo $vorname;
    echo '" size="" />';
    echo '</p>';

    echo '<p>';
    echo 'Nachname: (optional)<br />';
    echo '<input type="Text" name="nachname" value="';
    // Inhalt, falls das Formular bereits unvollständig
    // ausgefüllt wurde (also zweiter Aufruf)
    echo $nachname;
    echo '" size="" />';
    echo '</p>';

    echo '<p>';
    echo '<input type="Checkbox" name="einverstanden" value="v"> ';
    echo 'hiermit bin ich einverstanden, dass meine Daten ';
    echo 'elektronisch gespeichert werden, damit mir die';
    echo 'gewünschte Newsletter zugestellt werden kann ...';
    echo '(gesetzliches Blahblah zum Datenschutz und Speicherung';
    echo 'der Daten ....)';
    echo '</p>';

    echo '<input type="hidden" name="aktion" value="form_ausg" />';

    echo '<p>';
    echo '<input type="Submit" name="speichern" value="speichern">';
    echo '</p>';
    echo '</form>';
}
?>
Der Code ist recht lang soory ging nicht anders. Also meine fragen wären :

1.Die If verzweigung verstehe ich nicht. Wenn jetzt ausgegangen die die Bedigungen oben nicht zu treffen die im If stehen wird mein Formular nicht ja nicht angezeigt statt dessen werden ja die Bedingung im else ja angezeigt soweit wie ich das verstanden habe.

PHP:
if ( $_GET['aktion']        <> 'form_ausg' OR
     $_GET['emailadresse']  == "" OR
     $_GET['einverstanden'] <> "v"
   )
{
    // Schritt 1: Formular anzeigen
    formular_erstellen ( $_GET['emailadresse'],
                         $_GET['gender'],
                         $_GET['vorname'],
                         $_GET['nachname'],
                         $_GET['einverstanden'] );

}
else
{
    echo "<h1>Bestätigungs-Mail erstellt</h1>";

    // erstellen der Kontrollzahl
    $kontrollzahl = date("syhdim");

    // Schritt 2.5: Speichern der eingegeben Daten
    speichern_datei ( $_GET['emailadresse'],
                         $_GET['gender'],
                         $_GET['vorname'],
                         $_GET['nachname'],
                         $kontrollzahl  );

    // E-Mail senden mit Funktion
    mail_zur_kontrolle ( $_GET['emailadresse'],
                         $_GET['gender'],
                         $_GET['vorname'],
                         $_GET['nachname'],
                         $kontrollzahl  );

}
2.Warum erstellt man den code denn wenn ich später die variablen bei den Übergabeparameter definiere .
PHP:
formular_erstellen ( $_GET['emailadresse'],
                         $_GET['gender'],
                         $_GET['vorname'],
                         $_GET['nachname'],
                         $_GET['einverstanden'] );

}
else
{
    echo "<h1>Bestätigungs-Mail erstellt</h1>";

    // erstellen der Kontrollzahl
    $kontrollzahl = date("syhdim");

    // Schritt 2.5: Speichern der eingegeben Daten
    speichern_datei ( $_GET['emailadresse'],
                         $_GET['gender'],
                         $_GET['vorname'],
                         $_GET['nachname'],
                         $kontrollzahl  );

    // E-Mail senden mit Funktion
    mail_zur_kontrolle ( $_GET['emailadresse'],
                         $_GET['gender'],
                         $_GET['vorname'],
                         $_GET['nachname'],
                         $kontrollzahl  );
Und die Letzte frage muss ich den code den auswendig können oder nur im klaren sein wie es logisch aufgebaut ist.

Ich danke im vorraus für jede Antwort
 
Zuletzt bearbeitet:
Vorweg: Das Beispiel ist extrem schlecht umgesetzt und kein zur Nachahmung empfohlener Codestil (ohne da jetzt großartig ins Detail gehen zu wollen, das war ja erstmal nicht die Frage). -- Da passt so ziemlich gar nichts.

Zu 1:

PHP:
if ( $_GET['aktion']        <> 'form_ausg' OR
     $_GET['emailadresse']  == "" OR
     $_GET['einverstanden'] <> "v"
   )
{

Das heißt so viel wie: "Wenn Feld E-Mail-Adresse leer ist oder wenn in zweien der Felder nicht der für das Abschicken erwartete Wert steht, dann zeige das Formular an, ansonsten schicke die Mail raus."

Diese Bedingung tritt auch ein, wenn gar kein $_GET-Feld gesetzt ist (also beim ersten Aufruf der Seite), da "nicht gesetzt" auch in die Kategorie "nicht der für das Abschicken erwartete Wert" fällt. Das ist kein guter Stil. Da sollte mit isset() gearbeitet werden.

Zu 2:

2.Warum erstellt man den code denn wenn ich später die variablen bei den Übergabeparameter definiere .

Daraus kann ich beim besten Willen keinen Sinn entnehmen.

Zu 3:

Und die Letzte frage muss ich den code den auswendig können oder nur im klaren sein wie es logisch aufgebaut ist.

Wenn du die grundlegende Vorgehensweise, also die Konzepte, begriffen hast, kannst du solche Funktionen jederzeit neu schreiben, ohne dir jede Zeile zu merken. Einige Leitfragen für dein vorliegendes Beispiel:

- Wie teile ich meinen Code sinnvoll in Funktionen auf?
- Wie gebe ich HTML-Code aus?
- Wie erstelle ich ein Formular und verarbeite die Formulardaten?
- Wie versende ich eine Mail?
- Wie speichere ich Daten in einer Datei?

Der Code beantwortet das allerdings wie gesagt alles äußerst schlecht.
 
Zur Übergabe von Parametern? ;) Nein, im Ernst: Das Formular im Beispiel wird aus unerfindlichen Gründen per GET übetragen, nicht per POST. Die Übergabeparameter dienen dazu, zum Zwecke der weiteren Verarbeitung auf die in das Formular eingegeben Werte zuzugreifen.
 
Zurück
Oben