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

Checkbox mit Mehrfachauswahl durch php versenden

Dieses Thema im Forum "PHP" wurde erstellt von fotojacky, 23. September 2016.

  1. fotojacky

    fotojacky Grünschnabel

    Hallo

    Wie versende ich das Ergebnis einer Checkbox mit Mehrfachauswahl durch PHP?
    Seit Tagen versuche ich mit verschiedenen Möglichkeiten das Problem in den Griff zu bekommen.

    Hier ist mein html Code:
    Code (HTML5):
    1. <div class="col-md-3">
    2.     <h4>Naturwagen</h4>
    3.     <div class="checkbox"><label><input name="naturwagen[]" type="checkbox" value="schäfer" multiple />Schäferwagen</label></div>
    4.     <div class="checkbox"><label><input name="naturwagen[]" type="checkbox" value="pipo" multiple />Pipowagen</label></div>
    5.     <div class="checkbox"><label><input name="naturwagen[]" type="checkbox" value="zauber" multiple />Zauberwagen</label></div>
    6.     <div class="checkbox"><label><input name="naturwagen[]" type="checkbox" value="boheme" multiple />Bohemewagen</label></div>
    7. </div
    Leider finde ich nicht die Lösung zu meiner bisherigen php-Programmierung.

    Code (PHP):
    1. <?php
    2. $error = false;
    3.     if (isset($_POST['submit']))
    4.     {
    5.     $naturwagen = ($_POST['naturwagen']);
    6.     $vorname = trim($_POST['txt_vorname']);
    7.     $fromemail = trim($_POST['txt_email']);
    8.  
    9.     $naturwagen = array (
    10.                  'schäfer' => 'Schäferwagen' ,
    11.                  'pipo' => 'Pipowagen' ,
    12.                  'zauber' => 'Zauberwagen' ,
    13.                   'boheme' => 'Bohemewagen' ,
    14.                  );
    15.  
    16.         if (!preg_match("/^[a-zA-Z ]+$/",$vorname))
    17.         {
    18.             $error = true;
    19.             $vorname_error = "Bitte geben Sie Ihren Vornamen ein!";
    20.         }
    21.         if(!filter_var($fromemail,FILTER_VALIDATE_EMAIL))
    22.         {
    23.             $error = true;
    24.             $fromemail_error = "Bitte geben Sie eine gültige E-Mail Adresse ein!";
    25.         }
    26.     if (!$error)
    27.         {
    28.             $toemail = "info@meinemail.eu";
    29.             $subject = "Anfrage einer privaten Preisliste Naturwagen ";
    30.             $body = "Folgende Angaben wurden gemacht: \n\n Naturwagen: $naturwagen \n Vorname: $vorname \n  E-Mail: $fromemail";
    31.             $headers = "von: $fromemail\n";
    32.             $headers .= "Reply-To: $fromemail";
    33.             $header = 'From:' . $email . "n";
    34.             $header .= 'Content-type: text/plain; charset=UTF-8' . "rn";
    35.  
    36.  
    37.             if (mail ($toemail, $subject, $body, $headers))
    38.                 $alertmsg  = '<div class="alert alert-success">
    39.                <p>Vielen Dank für Ihr Interesse, wir senden Ihnen die Preisliste umgehend zu!</p>  
    40.                </div>';
    41.             else
    42.                 $alertmsg = '<div class="alert alert-danger text-center">Die &Uuml;bertragung ist fehlgeschlagen, probieren Sie es bitte später nocheinmal!</div>';
    43.         }
    44.     }
    45.    
    46. ?>
    Wer hat eine Idee, wie ich die Checkboxen senden kann?

    Gruß Manfred
     
  2. Sprint

    Sprint Erfahrenes Mitglied

    Als erstes kannst du das multiple rauswerfen. Das gibt es nur beim select. Ansonsten ist der html Teil schon richtig.

    Bei php mußt du $naturwagen auch als Array ansprechen, denn als solches wird es ja auch in html verwendet. Geh es mit foreach ($_POST['naturwagen'] as ... ) durch und verarbeite die übergebenen Werte. Die spätere Zuweisung eines Arrays auf $naturwagen ist natürlich Quatsch und muß raus.
     
    fotojacky gefällt das.
  3. fotojacky

    fotojacky Grünschnabel

    Danke für den Tip,

    Mit echo kann ich auf der Website alle checkboxen anzeigen die ausgewählt sind.

    Aber ich finde nicht den Syntax für die Übertragung mit dem restlichen Formular.
     
  4. Sprint

    Sprint Erfahrenes Mitglied

    Was meinst du denn mit "Übertragung mit dem restlichen Formular"? Wenn du die gewählten Boxen mit ECHO ausgeben kannst, liegt doch alles korrekt vor.
     
  5. fotojacky

    fotojacky Grünschnabel

    Mit echo wird es in der linken oberen Ecke der Website ausgegeben.
    Da soll es natürlich nicht hin.
    Wie Du im oberen php-Block sehen kannst, werden die Inhalte des Formulars per $_POST an eine E-Mail Adresse gesendet und da soll es mit gesendet werden.

    Ich hab schon zig verschiedene Skripte probiert, mit dem Ergebnis das in der E-Mail endweder nur eine Selekt-Box (es waren vier ausgewählt), Array oder senden angezeigt wurde.
     
  6. fotojacky

    fotojacky Grünschnabel

    Ich habs alleine geschafft!


    $naturwagen = implode(',', $naturwagen);
    if ($naturwagen);
     
  7. Sprint

    Sprint Erfahrenes Mitglied

    Ich wollte gerade nochmal foreach ins Spiel bringen, aber Implode ist auch eine Möglichkeit. Gratulation, daß du es hingebracht hast.
     
  8. fotojacky

    fotojacky Grünschnabel

    Doch noch nicht gelöst, schade.

    Wenn ich keins der Checkboxen aktiviere, wird alles korrekt übermittelt und auch die Erfolgsmeldung wird angezeigt,
    aber leider bekomme ich folgende Fehlermeldung: Warning: implode(): Invalid arguments passed in /kunden/242095_70794/rp-hosting/10132/11132/naturwagen/Privat-Kunden.php on line 23
    Die Zeile, die die Fehlermeldung beschreibt steht betrifft die obere Zeile von Post#6

    Kann bitte jemand helfen?
     
  9. Sprint

    Sprint Erfahrenes Mitglied

    Prinzipiell kannst du das ignorieren. Warnungen sind harmlos und wenn du die Fehlerausgabe unterdrückst, was du auf der endgültigen Seite sowieso machen mußt, erscheint das nur noch in den Logs.

    Wenn du das auch noch weghaben willst, kannst du das implode ja in eine if Abfrage packen.

    if (!empty($array))...
     
  10. Alice

    Alice Erfahrenes Mitglied

    Kann man mal das Skript sehen, wo das Implode mit auftaucht?

    Fehlermeldungen sind i.d.R. da, damit der Programmierer diese behebt.
     
  11. fotojacky

    fotojacky Grünschnabel

    PHP:
    1. <?php
    2.     $error = false;
    3.     if (isset($_POST['submit']))
    4.     {
    5.         $naturwagen = ($_POST['naturwagen']);
    6.         $naturlodge = ($_POST['naturlodge']);
    7.         $zeltlodge = ($_POST['zeltlodge']);
    8.         $andere = ($_POST['andere']);
    9.         $vorname = trim($_POST['txt_vorname']);
    10.         $nachname = trim($_POST['txt_nachname']);
    11.         $strasse = trim($_POST['txt_strasse']);
    12.         $plz = trim($_POST['txt_plz']);
    13.         $ort = trim($_POST['txt_ort']);
    14.         $telefon = trim($_POST['txt_telefon']);
    15.         $mobil = trim($_POST['txt_mobil']);
    16.         $fromemail = trim($_POST['txt_email']);
    17.         $gesehen = trim($_POST['txt_gesehen']);
    18.        
    19.         $naturwagen = implode(',', $naturwagen);
    20.         if ($naturwagen);
    21.  
    22.         $naturlodge = implode(',', $naturlodge);
    23.         if ($naturlodge)
    24.  
    25.         if (!preg_match("/^[a-zA-Z ]+$/",$vorname))
    26.         {
    27.             $error = true;
    28.             $vorname_error = "Bitte geben Sie Ihren Vornamen ein!";
    29.         }
    30.        
    31.         if (!preg_match("/^[a-zA-Z ]+$/",$nachname))
    32.         {
    33.             $error = true;
    34.             $nachname_error = "Bitte geben Sie Ihren Nachnamen ein!";
    35.         }
    36.        
    37.         if (!$error)
    38.         {
    39.             $toemail = "info@manfredschmidt.eu,info@webdesign-fotografie.eu";
    40.             $subject = "Anfrage einer privaten Preisliste Naturwagen ";
    41.             $body = "Folgende Angaben wurden gemacht: \n\n Naturwagen: $naturwagen \n Naturlodge: $naturlodge \n Zeltlodge: $zeltlodge \n Andere: $andere \n Vorname: $vorname \n Nachname: $nachname \n Strasse: $strasse \n PLZ: $plz \n Ort: $ort \n Telefon: $telefon \n Mobil: $mobil \n E-Mail: $fromemail \n gesehen: $gesehen";
    42.             $headers = "von: $fromemail\n";
    43.             $headers .= "Reply-To: $fromemail";
    44.             $header = 'From:' . $email . "n";
    45.             $header .= 'Content-type: text/plain; charset=UTF-8' . "rn";
    46.    
    47.             if (mail ($toemail, $subject, $body, $headers))
    48.                 $alertmsg  = '<div class="alert alert-success">
    49.                                    <p>Vielen Dank für Ihr Interesse, wir senden Ihnen die Preisliste umgehend zu!</p>  
    50.                                </div>';
    51.             else
    52.                 $alertmsg = '<div class="alert alert-danger text-center">Die &Uuml;bertragung ist fehlgeschlagen, probieren Sie es bitte später nocheinmal!</div>';
    53.         }
    54.     }
    55. ?>

    Es ist nicht der ganze Code, aber damit müsste man klar kommen.
     
  12. Sprint

    Sprint Erfahrenes Mitglied

    Ich würde die implode der besseren Übersichtlichkeit wegen neuen Variablen zuweisen. Und diese Zuweisung in die if Abfrage verpacken, ob in dem Array überhaupt was drin ist. Dann dürften die Warnungen auch weg sein.

    Die Umschreibung der Umlaute wie in der $alertmsg kannst du dir sparen, wenn du alles auf utf-8 deklarierst und auch die Dateien in utf-8 kodierst. Dann kannst du ganz normale Umlaute verwenden.
     
  13. Alice

    Alice Erfahrenes Mitglied

    PHP:
    1.    if (isset($_POST['submit']))
    2.    {
    3.        $naturwagen = ($_POST['naturwagen']);
    4.        $naturlodge = ($_POST['naturlodge']);
    5.        $zeltlodge  = ($_POST['zeltlodge']);
    6.        $andere     = ($_POST['andere']);
    7.        $vorname    = trim($_POST['txt_vorname']);
    8.        $nachname   = trim($_POST['txt_nachname']);
    9.        $strasse    = trim($_POST['txt_strasse']);
    10.        $plz        = trim($_POST['txt_plz']);
    11.        $ort        = trim($_POST['txt_ort']);
    12.        $telefon    = trim($_POST['txt_telefon']);
    13.        $mobil      = trim($_POST['txt_mobil']);
    14.        $fromemail  = trim($_POST['txt_email']);
    15.        $gesehen    = trim($_POST['txt_gesehen']);
    16.        
    17.        if (count($naturwagen) > 0)
    18.        {
    19.            $naturwagen = implode(',', $naturwagen);
    20.        }
    21.  
    22.        if (count($naturlodge) > 0)
    23.        {
    24.            $naturwagen = implode(',', $naturlodge);
    25.        }
    26.  
    27.        if (!preg_match("/^[a-zA-Z ]+$/", $vorname))
    28.        {
    29.            $errors[] = "Bitte geben Sie Ihren Vornamen ein!";
    30.        }
    31.        
    32.        if (!preg_match("/^[a-zA-Z ]+$/", $nachname))
    33.        {
    34.            $errors[] = "Bitte geben Sie Ihren Nachnamen ein!";
    35.        }
    36.  
    37.        if (is_array($errors))
    38.        {
    39.            echo '<ul>';
    40.  
    41.            foreach ($errors as $error)
    42.            {
    43.               echo '<li>'.$error.'</li>';
    44.            }
    45.  
    46.            echo '</ul>';
    47.        }
    48.            else
    49.        {
    50.            $toemail  = "info@manfredschmidt.eu,info@webdesign-fotografie.eu";
    51.            $subject  = "Anfrage einer privaten Preisliste Naturwagen ";
    52.            $body     = "Folgende Angaben wurden gemacht: \n\n Naturwagen: $naturwagen \n Naturlodge: $naturlodge \n Zeltlodge: $zeltlodge \n Andere: $andere \n Vorname: $vorname \n Nachname: $nachname \n Strasse: $strasse \n PLZ: $plz \n Ort: $ort \n Telefon: $telefon \n Mobil: $mobil \n E-Mail: $fromemail \n gesehen: $gesehen";
    53.            $headers  = "von: $fromemail\n";
    54.            $headers .= "Reply-To: $fromemail";
    55.            $header   = 'From:' . $email . "n";
    56.            $header  .= 'Content-type: text/plain; charset=UTF-8' . "rn";
    57.    
    58.            if (mail($toemail, $subject, $body, $headers))
    59.            {
    60.                $alertmsg = '<div class="alert alert-success"><p>Vielen Dank für Ihr Interesse, wir senden Ihnen die Preisliste umgehend zu!</p></div>';
    61.            }
    62.                else
    63.            {
    64.                $alertmsg = '<div class="alert alert-danger text-center">Die &Uuml;bertragung ist fehlgeschlagen, probieren Sie es bitte später nocheinmal!</div>';
    65.            }
    66.        }
    67.    }
     
  14. fotojacky

    fotojacky Grünschnabel

    Kannst Du mir sagen wie das geht, das mit dem Implode in Variablen zuweisen, ich finde dazu nichts bei Google.
     
  15. Sprint

    Sprint Erfahrenes Mitglied

    Ich meine einfach nur, für den String einen anderen Namen zu verwenden.
    PHP:
    1. if (count($naturwagen) > 0)
    2.      $naturwagen_imp = implode(', ', $naturwagen);
     
    fotojacky gefällt das.
  16. fotojacky

    fotojacky Grünschnabel

    Hi
    vielen Dank, jetzt funktionierts. :)
     
Die Seite wird geladen...