slapper: PHP Checkboxen Problem

Hallo Zusammen:)

ich bin kein PHP-Knaller:( und hab eine einfache aber für mich komplizierte Frage *g

Ich habe eine HTML-Formular mit mehreren Checkboxen
Beispiel:

<input type="checkbox" name="check[]" value="Lipstick1">
<input type="checkbox" name="check[]" value="Lipstick2">
<input type="checkbox" name="check[]" value="Lipstick3">
<input type="checkbox" name="check[]" value="Lipstick4">

die werte werden also in einem array übergeben, soviel weis ich auch schon:)

nun greife ich auf ein externe php-srcipt auf dem server zu:

<form action="../cgi-bin/kontakt.php" method="post">

im html-Formular hab ich selbst kein php eingebunden.

das php-script am server verschickt eine e-mail an eine person mit den daten aus dem ausgefüllten formular, soweit so gut, klappt auch alles,
nur die checkboxen machen probleme ich habe keine ahnung was ich da reincoden soll damit der empfänger das ergebnis sieht, welche checkbox angeklickt wurde.

klickt der user garkeine checkbox an, so soll auch nichts angezeigt werden.

klickt er alle an so sollte dort stehen:

Lipstick1: yes
Lipstick2: yes
Lipstick3: yes
Lipstick4: yes
usw...

kann mir ein php-profi von euch helfen? ich komm hier nicht mehr weiter.

vielen dank !!!!
gruss torsten

  1. Hallo Torsten,

    <input type="checkbox" name="check[]" value="Lipstick1">
    <input type="checkbox" name="check[]" value="Lipstick2">
    <input type="checkbox" name="check[]" value="Lipstick3">
    <input type="checkbox" name="check[]" value="Lipstick4">
    die werte werden also in einem array übergeben, soviel weis ich auch schon:)

    Naja, ein Array ist eine Moeglichkeit von vielen.
    Und oft eine geeignete. Aber nicht immer.

    Lies unbedingt mal:
    http://www.dclp-faq.de/q/q-formular-checkbox.html

    das php-script am server verschickt eine e-mail an eine person mit den daten aus dem ausgefüllten formular, soweit so gut, klappt auch alles,

    _Wie_ macht das Script aus den Parametern den Mailtext?
    Einfach mit Durchlaufen des $_POST-Arrays
    Und dann Ausgabe im Stil
    Variablenname : Wert
    oder was?

    Wenn Du sowieso nur folgendes willst:

    Lipstick1: yes
    Lipstick2: yes
    Lipstick3: yes
    Lipstick4: yes

    Warum machst Du nicht das Formular schon entsprechend?

    <input type="checkbox" name="Lipstick1" value="yes">
    <input type="checkbox" name="Lipstick2" value="yes">
    <input type="checkbox" name="Lipstick3" value="yes">
    <input type="checkbox" name="Lipstick4" value="yes">

    Gruesse,

    Thomas

    1. Hallo Torsten,

      <input type="checkbox" name="check[]" value="Lipstick1">
      <input type="checkbox" name="check[]" value="Lipstick2">
      <input type="checkbox" name="check[]" value="Lipstick3">
      <input type="checkbox" name="check[]" value="Lipstick4">
      die werte werden also in einem array übergeben, soviel weis ich auch schon:)

      Naja, ein Array ist eine Moeglichkeit von vielen.
      Und oft eine geeignete. Aber nicht immer.

      Lies unbedingt mal:
      http://www.dclp-faq.de/q/q-formular-checkbox.html

      da war ich auch schon drauf, danke, hilft mir nix die lösung, da das echo bzw. print auf der dankeseite seinen text hinterlässt, das will ich nicht: "alle cbutton schlafen schon"
      dort soll nur stehen "danke, wurde erfolgreich versendet blabla":)

      das php-script am server verschickt eine e-mail an eine person mit den daten aus dem ausgefüllten formular, soweit so gut, klappt auch alles,

      _Wie_ macht das Script aus den Parametern den Mailtext?
      Einfach mit Durchlaufen des $_POST-Arrays
      Und dann Ausgabe im Stil
      Variablenname : Wert
      oder was?

      das wollte ich nicht weiter erläutern, weil es schon geht mit standards:
      <?php
      //MAIL VERSCHICKEN   Im Mailbody werden alle Formularfelder angegeben.
      $empfaenger = "csa@test.com";
      $betreff = "Product Information Form via Website";

      usw und sofort:))

      Wenn Du sowieso nur folgendes willst:

      Lipstick1: yes
      Lipstick2: yes
      Lipstick3: yes
      Lipstick4: yes

      Warum machst Du nicht das Formular schon entsprechend?

      <input type="checkbox" name="Lipstick1" value="yes">
      <input type="checkbox" name="Lipstick2" value="yes">
      <input type="checkbox" name="Lipstick3" value="yes">
      <input type="checkbox" name="Lipstick4" value="yes">

      auf die gloreiche idee kam ich auch schon, aber anscheinend hat php eigene gesetze, denn wenn keine checkbox angeklickt ist, dann kommt einer fehlermeldung (obwohl die email trotzdem versendet wird)

      Notice: Undefined index: check in D:\Web_Side\cgi-bin\kontakt.php on line 23

      Notice: Undefined index: check in D:\Web_Side\cgi-bin\kontakt.php on line 46

      wie gesagt ich bin kein php-knaller
      kenne mich nur in html sehr gut aus:))

      gruss torsten ;-)

      Gruesse,

      Thomas

      1. Hier nochmal das komplette script:

        <?php
        //MAIL VERSCHICKEN.
        $empfaenger = "info@creative-agentur.com";
        $betreff = "Product Information Form via Website";

        $company = $_POST['company'];
        $name = $_POST['name'];
        $title = $_POST['title'];
        $adress = $_POST['adress'];
        $ZIP = $_POST['ZIP'];
        $country = $_POST['country'];
        $response = $_POST['response'];
        $phone = $_POST['phone'];
        $branch = $_POST['branch'];
        $comments = $_POST['comments'];
        $date = $_POST['date'];
        $dimensions = $_POST['dimensions'];
        $output = $_POST['output'];
        $temperatur = $_POST['temperatur'];
        $personel = $_POST['personel'];
        $urgent = $_POST['urgent'];
        $check = $_POST['check']; //<<< CHECKBOX

        $_POST["text"]="Company:  ";
        $_POST["text2"]="Name:  ";
        $_POST["text3"]="Title:  ";
        $_POST["text4"]="Adress:  ";
        $_POST["text5"]="ZIP:  ";
        $_POST["text6"]="Country:  ";
        $_POST["text7"]="Responsibility:  ";
        $_POST["text8"]="Telephon, Fax or e-mail:  ";
        $_POST["text9"]="Industrial branch:  ";
        $_POST["text10"]="Comments:  ";
        $_POST["text11"]="Approximate date of production start at your plant?:  ";
        $_POST["text12"]="Dimensions:  ";
        $_POST["text13"]="Required machine output:  ";
        $_POST["text14"]="Filling temperature:  ";
        $_POST["text15"]="Personel contact desired?:  ";
        $_POST["text16"]="Grade of required information:  ";
        $_POST["umbruch"]="\n";

        mail($empfaenger,$betreff,$_POST["umbruch"].$_POST["text"].$_POST["company"].$_POST["umbruch"].$_POST["text2"].$_POST["name"].$_POST["umbruch"].$_POST["text3"].$_POST["title"].$_POST["umbruch"].$_POST["text4"].$_POST["adress"].$_POST["umbruch"].$_POST["text5"].$_POST["ZIP"].$_POST["umbruch"].$_POST["text6"].$_POST["country"].$_POST["umbruch"].$_POST["text7"].$_POST["response"].$_POST["umbruch"].$_POST["text8"].$_POST["phone"].$_POST["umbruch"].$_POST["text9"].$_POST["branch"].$_POST["umbruch"].$_POST["umbruch"].$_POST["text10"].$_POST["comments"].$_POST["umbruch"].$_POST["umbruch"].$_POST["umbruch"].$_POST["text15"].$_POST["personel"].$_POST["umbruch"].$_POST["text16"].$_POST["urgent"].$_POST["umbruch"].$_POST["text11"].$_POST["date"].$_POST["umbruch"].$_POST["text12"].$_POST["dimensions"].$_POST["umbruch"].$_POST["text13"].$_POST["output"].$_POST["umbruch"].$_POST["text14"].$_POST["temperatur"].$_POST["umbruch"].$_POST["umbruch"].$_POST["check"]);

        ?>

        so geht es leider nicht:((

        $check ist die checkbox mit check[] im html deffiniert
        hab leider kein plan

        gruß torsten

        1. Hallo,

          //MAIL VERSCHICKEN.
          $empfaenger = "info@creative-agentur.com";
          $betreff = "Product Information Form via Website";

          Ja, und jetzt solltest Du auch den Mail-Inhalt zuerst mal
          in eine Variable $body (oder so) packen, damit
          dann die mail() Funktion schoen uebersichtlich
          mit 3 oder 4 kurzen Parametern aufgerufen werden
          kann.

          mail($empfaenger,$betreff,$body);

          Also so:
          $body = "";
          $body .= $variable1; /* Beachte den Punkt! */
          $body .= $variable2;
          $body .= $variable3;
          u.s.w.

          Bevor Du eine Variable brauchst, solltest Du pruefen,
          ob sie ueberhaupt existiert:

          Konkret also:
          $body = "";
          if (isset($_POST["umbruch"]))
            $body.=$_POST["umbruch"];
          if (isset($_POST["text"]))
            $body.=$_POST["text"];
          if (isset($_POST["company"]))
            $body.=$_POST["company"];

          u.s.w.
          und am Ende natuerlich

          if (isset($_POST["Lipstick1"]))
            $body.=$_POST["Lipstick1"];
          if (isset($_POST["Lipstick2"]))
            $body.=$_POST["Lipstick2"];
          if (isset($_POST["Lipstick3"]))
            $body.=$_POST["Lipstick3"];
          if (isset($_POST["Lipstick4"]))
            $body.=$_POST["Lipstick4"];

          Idealerweise schreibt man natuerlich nicht
          tausend mal das gleiche Konstrukt, sondern
          man verwendet Funktionen, Arrays und Schleifen...

          Und wahrscheinlich willst Du nicht die blossen Werte
          in einem langen String zusammengehaengt,
          sondern noch Leerzeichen, Zeilenumbrueche,
          evtl. auch die "Variablennamen" als Anfang der Zeile,
          dann ein Doppelpunkt, und dann erst den Inhalt
          der Variablen.

          Du musst halt alles an Deine Beduerfnisse anpassen.

          foreach() duerfte Dir manche Arbeit abnehmen.

          ---

          Wenn Du ein Array check willst, wie in Deinem
          ersten Beispiel

          <input type="checkbox" name="check[]" value="Lipstick1">
          <input type="checkbox" name="check[]" value="Lipstick2">
          <input type="checkbox" name="check[]" value="Lipstick3">
          <input type="checkbox" name="check[]" value="Lipstick4">

          Dann musst Du es natuerlich auch im verarbeitenden Skript
          als Array behandeln.

          Wenn 1, 2 und 4 angekreuzt sind, hast Du ja vorerst mal:

          $_POST["check"][0] mit dem Inhalt "Lipstick1"
          $_POST["check"][1] mit dem Inhalt "Lipstick2"
          $_POST["check"][2] mit dem Inhalt "Lipstick4"

          Vielleicht klappt es so (ungetestet):

          if (isset($_POST["check"]))
            $check=$_POST["check"];
          if (is_array($check))
            {
             $checkgroesse=count($check);
             for ($i=0; $i<$checkgroesse; $i++)
               { $body.=$check[$i]; }
            }
          else
            {
             $body.=$check;
            }

          ---

          Was Du auf der Ergebnisseite ausgibst, ist Deine Sache.
          Natuerlich musst Du nicht "alle variablen schlafen" oder
          sowas ausgeben.
          Du kannst z.B. nur gewisse Variablen ausgeben,
          oder auch den gesamten Mailtext.
          Damit dessen Zeilenumbrueche auch
          im Browser angezeigt werden, brauchst
          Du <pre> oder nl2br().

          So, das waren mal ein paar Happen, damit
          Du was zum Kauen hast.
          Morgen wirft Dir der bitworks-Tom bestimmt
          noch etwas mehr hin, z.B. wird er Dir wohl
          sein Konzept mit $_POST["data"]["company"]
          u.s.w. vorstellen, nicht wahr, Tom? ;-)

          ---

          btw. Dein Englisch scheint mir nicht ganz perfekt
          zu sein. Da es offenbar um B2B geht, solltest
          Du das ganze unbedingt von einem Muttersprachler
          korrigieren lassen.

          Gruesse,

          Thomas

          1. danke Thomas, :-)))

            ich mache mich gleich mal an die arbeit und schau ob es funzt:)))
            soweit ging ja schon alles bis auf die blöden checkboxen .(

            vielen dank erstmal:)))
            gruss torsten

      2. hi,

        auf die gloreiche idee kam ich auch schon, aber anscheinend hat php eigene gesetze, denn wenn keine checkbox angeklickt ist, dann kommt einer fehlermeldung (obwohl die email trotzdem versendet wird)

        Notice: Undefined index: check in D:\Web_Side\cgi-bin\kontakt.php on line 23

        dann verwendest du einen nicht definierten index zum zugriff auf ein array, wie die meldung schon sagt.

        du darfst $_POST['xyz'] nur verwenden, wenn auch ein arrayelement mit dem index xyz existiert. wenn du eine checkbox mit dem namen xyz hast, diese aber vom user nicht markiert wird, wird vom browser auch kein wert mitgeschickt - folglich gibt es dann im script $_POST['xyz'] auch nicht.

        du musst also vorher immer mit isset() oder empty() abprüfen, ob $_POST['xyz'] existiert, bevor du es ausgibst oder sonstwie weiterverarbeitest.

        gruss,
        wahsaga