1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

PHP Problem

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von mschoening, 07.12.07.

  1. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    21.02.07
    Beiträge:
    1.764
    Hi,
    ich bin gerade dabei ein AJAX Kontaktformular zu basteln und bin fast fertig. Mir fehlt noch eine kleine "validation".

    Das mailer.php script was als action im HTML Formular deklariert ist sieht folgendermaßen aus:

    Code:
    <?php
        include('functions.php');
    
        if ($_POST['first_name']=='' || strlen($_POST['first_name'])<3) {
            $errors[] = 'First name is required and must contain 3 characters or more.';
        }
        
        if (valid_email($_POST['email'])==FALSE) {
            $errors[] = 'Please supply a valid email address';
        }
        
        if(is_array($errors)) {
            echo '<p class="error">The following errors occured:';
            while (list($key,$value) = each($errors)) {
                echo '<span class="error">'.$value.'</span>';
            }
        }
        
        else {
            $to = "// Recipient";
            $subject = "// Subject";
            $name_field = $_POST['first_name'];
            $email_field = $_POST['email'];
    
            $body = "From: $name_field\n E-Mail: $email_field";
    
            mail($to, $subject, $body);
        } 
    ?>
    
    Es ist eine gekürzte Version des "scripts" aber man erkennt was gemeint ist. Es sendet Emails und validiert auch alle Felder korrekt. Jetzt würde ich aber gerne noch in dem letzten schritt wo die else-Schleife aufgeht eine Schleife einbauen die kontrolliert ob die mail()-Funktion auch richtig ausgeführ wurde. Also so etwas in der Art:

    Code:
    else {
        if {
            $to = "max@maximilianschoening.com";
            $subject = "Form Tutorial";
            $name_field = $_POST['first_name'];
            $email_field = $_POST['email'];
            $message = $_POST['message'];
    
            $body = "From: $name_field\n E-Mail: $email_field\n Message:\n $message";
    
            mail($to, $subject, $body);
        }
    
        else {
            echo "Klappt nicht.";
        }
    } 
    
    Leider funktioniert das dann nicht und er gibt mir folgenden Fehler:
    Code:
    Parse error: syntax error, unexpected '{', expecting '(' in /home/17673/domains/test.maximilianschoening.com/html/validation/mailer.php on line 32
    
     
  2. xenxox

    xenxox Macoun

    Dabei seit:
    08.02.05
    Beiträge:
    122
    Mail liefert einen boolean zurück (siehe doku), du kannst also direkt auf mail() prüfen.
     
    mschoening gefällt das.
  3. XeN

    XeN Aargauer Weinapfel

    Dabei seit:
    09.08.07
    Beiträge:
    738
    Könntest es mal so versuchen:

    Code:
    if (mail(....)) {
       echo "funktioniert";
    }else{
       echo "funktioniert nicht";
    }
    
     
    mschoening gefällt das.
  4. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    21.02.07
    Beiträge:
    1.764
    Hi,
    bin jetzt mit dem script soweit fertig. Gibt es noch irgendwelche verbesserungs Vorschläge (vielleicht kann man das mit dem $recipient noch vereinfachen?):

    Code:
    <?php
        include('functions.php');
    
        if ($_POST['first_name']=='' || strlen($_POST['first_name'])<3) {
            $errors[] = 'First name is required and must contain 3 characters or more.';
        }
    
        if ($_POST['last_name']=='' || strlen($_POST['last_name'])<3) {
            $errors[] = 'Last name is required and must contain 3 characters or more.';
        }
        
        if (valid_email($_POST['email'])==FALSE) {
            $errors[] = 'Please supply a valid email address';
        }
        
        if ($_POST['email']!=$_POST['re_email']) {
            $errors[] = 'The two email addresses must match.';
        }
        
        if ($_POST['recipient']=='0' ) {
            $errors[] = 'Please select a recipient.';
        }
        
        if ($_POST['message']=='' || strlen($_POST['message'])<3) {
            $errors[] = 'A message is required and must contain 3 characters or more.';
        }
        
        if (is_array($errors)) {
            echo '<p class="error">The following errors occured:';
            while (list($key,$value) = each($errors)) {
                echo '<span class="error">'.$value.'</span>';
            }
        }
        
        else {
            $subject = "AJAX Mailing Form";
            $first_name_field = $_POST['first_name'];
            $last_name_field = $_POST['last_name'];
            $email_field = $_POST['email'];
            $recipient = $_POST['recipient'];
            $message = $_POST['message'];
            
            if ($recipient == "1") {
                $to = "recipient1@mail.com";
            }
            if ($recipient == "2") {
                $to = "recipient2@mail.com";
            }
            if ($recipient == "3") {
                $to = "recipient3@mail.com";
            }
            if ($recipient == "4") {
                $to = "recipient4@mail.com";
            }
            if ($recipient == "5") {
                $to = "recipient5@mail.com";
            }
            
            $body = "From: $first_name_field $last_name_field\n E-Mail: $email_field\n Message:\n $message";
    
            if (mail($to, $subject, $body)) {
                echo "Your message has been sent to $to.";
            }
            
            else {
                echo "Your message has not been sent. Please try again.";
            }
        } 
    ?>
    
     
  5. XeN

    XeN Aargauer Weinapfel

    Dabei seit:
    09.08.07
    Beiträge:
    738
  6. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    21.02.07
    Beiträge:
    1.764
    Hi,
    das verstehe ich nicht so richtig. Er schickt egal was ich wähle alle Mails jetzt an den letzten (5):

    Code:
    switch ($recipient) {
                case 1: $to = "recipient1@mail.com";
                
                case 2: $to = "recipient2@mail.com";
                
                case 3: $to = "recipient3@mail.com";
                
                case 4: $to = "recipient4@mail.com";
                
                case 5: $to = "recipient5@mail.com";
            }
    
     
  7. XeN

    XeN Aargauer Weinapfel

    Dabei seit:
    09.08.07
    Beiträge:
    738
    Jep, weil das "break;" in der jeweiligen abfrage fehlt.

    Das break besagt das er an diesem Punkt die Case schleife verläßt. Sonst läuft er immer bis unten durch.

    also immer

    case "wert":
    $variable = "zugewiesenerwert";
    break;
     
  8. MrNase

    MrNase Champagner Reinette

    Dabei seit:
    11.01.05
    Beiträge:
    2.643
    Zu empfehlen wäre am Ende auch noch sowas wie:


    Code:
    default:
    $to = "hiergehtshin@wennkeinpassendergefunden.wurde";
    break;
    
    Wenn der Empfänger z.B. weder 1 noch 5 ist dann definierst du da was dann passieren soll. Du kannst natürlich auch das $to leer machen und die Mail dann gar nicht abschicken.
     
  9. mschoening

    mschoening Gelbe Schleswiger Reinette

    Dabei seit:
    21.02.07
    Beiträge:
    1.764
    Hi,
    thanks ist aber nicht nötig. Das Formular wird vor dem abschicken ja eh validiert und man kann ohne einen "recipient" auszuwählen die Mail gar nicht abschicken...
     

Diese Seite empfehlen