PHP Checkboxen Problem
slapper
- php
0 Thomas Luethi0 slapper0 slapper0 Thomas Luethi0 slapper
0 wahsaga
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
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
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: yesWarum 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
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
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
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
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