php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Checkboxen in sendmail-funktion


 
schmidtsmikey
07-03-2005, 10:54 
 
Hallo Community,

ich habe auf meiner Seite eine Sendmail-Funktion erstellt. Der Leser ruft ein Kontaktformular aus, füllt die entsprechenden Textfelder aus und klickt anschließend auf Abschicken. Die Daten werden dann an die sendmail.php geschickt und ausgewertet. Zur Verdeutlichung ausschnitte aus dem Kontaktformular und der sendmail.php:

Kontaktformular

<form action="sendmail.php" method="POST">
<table width="100%">
<tr>
<td width="25"></td>
<td width="95"><strong>Firma/Name:*</strong></td>
<td width="498">
<input name="NAME" size="50" type="text">
</td>
</tr>
...

sendmail.php

<?php
// Kontaktformular
if(isset($_POST['NAME'], $_POST['STRASSE_1'], $_POST['POSTFACH'], $_POST['ORT'], $_POST['EMAIL']))

{

$to = "123@abc.de";
$subject = 'Kontaktformular-Anfrage von '.$_POST['NAME'];
$message = '

<table align="center" width="500">
<form method="POST">
<tr>
<td>Name</td>
<td><input type="text" size="50" name="NAME" value="'.$_POST['NAME'].'"></td>
</tr>
...
$headers = "Content-type: text/html; charset=iso-8859-15\r\n";
$headers .= 'From: '.$_POST['EMAIL'].'';
mail($to, $subject, $message, $headers);

Die übergebenen Daten werden also ausgewertet und anschließend an die entsprechende E-Mail-Adresse weitergeleitet. Das klappt wunderbar, doch jetzt habe ich ein Problem:

Ich möchte nämlich Checkboxen einführen, so nach dem Motte: "Ich interessiere mich für folgende Sachen". Jetzt habe ich mich schon im Netz totgesucht und zuindest herausgefunden, dass man die einzelnen Checkboxen mit name="form[]" benennen und mit einer foreach-Schleife auslesen lassen kann.

Anschließend kann man dann die markierten Checkboxen im Browser anzeigen lassen. Doch das ist nichts für mich, ich möchte ja überprüfen, ob eine Box markiert ist und dann in der zu generierenden E-Mail diese auch anzeigen lassen.

Checkboxen

<input name="form[]" type="checkbox">...habe Interesse in CPU
<input name="form[]" type="checkbox">...habe Interesse in VGA
<input name="form[]" type="checkbox">...habe Interesse in ...
<input name="form[]" type="checkbox">...habe Interesse in ...


Wie kann ich nun auswerten, dass bsp. zwei bestimmte Boxen markiert sind und diese dann in der zu generierenden E-Mail anzeigen? Ich stelle mir irgendwie vor, dass ich das auswerte und dann irgendwie eine Überprüfung einpflege:

Vorschlag in sendmail.php

<input name="form[]" type="checkbox">if (checkbox markiert) {setze html-tag für checkbox markiert}...habe Interesse in ...

Wer weiß Rat, wie man das umsetzen kann...

 
asp2php
07-03-2005, 11:15 
 
gibt den Checkboxen auch values, dann weißt du auch, was gecheckt ist ;)

Außerdem sollst du nicht nur auf isset prüfen, sondern auch auf !empty, da Felder eventuell leer sein können.

 
schmidtsmikey
07-03-2005, 11:51 
 
Ok, vielen Dank erst einmal für die zügige und prompte Antwort :)
Können wir vlt einmal anhand eines Beispiels zeigen, wie ich vorzugehen habe? So sehen die Checkboxen nun im Kontaktformular aus:

Kontaktformular

<input name="form[]" type="checkbox" value="computer">...infos über computer
<input name="form[]" type="checkbox" value="vga">...infos über grafikkarten
<input name="form[]" type="checkbox" value="hdd">...infos über Festplatten
...


Wie kann ich nun in der sendmail.php auswerten, welche Checkboxen aktiv sind und welche nicht. Ich möchte also, dass mir die sendmail.php eine E-Mail generiert, die in irgendeiner Form beinhaltet, welche markiert wurden.

Meinen Denkansatz habe ich ja bereits oben gepostet. Nur weiß ich nicht wie man das umsetzen kann (wie kann man auf eine bestimmte Checkbox zugreifen?) oder ob diese Vorgehensweise überhaupt sinnvoll ist.

 
mrhappiness
07-03-2005, 11:55 
 
echo '<pre>';
print_r($_POST);
echo '</pre>';Wäre eventuell besser, wenn du in die eckigen Klammern bei den Namen der Boxen den Wert schreibst

 
schmidtsmikey
07-03-2005, 12:55 
 
Original geschrieben von mrhappiness
[B]echo '<pre>';
print_r($_POST);
echo '</pre>';
Hmm, print gibt mir doch etwas auf dem Bildschirm aus. Wenn der Leser auf abschicken klickt, soll dieser doch nicht angezeigt bekommen, für welche Themen er sich interessiert. Was ich gerne möchte ist, dass gecheckt wird, was der Leser angeklickt hat. Dann soll die sendmail.php darauf reagieren. Ungefähr so:

sendmail.php

if(isset($_POST['NAME'], $_POST['STRASSE_1'], $_POST['POSTFACH'], $_POST['ORT'], $_POST['EMAIL']))

{

$to = "abc@123.de";
$subject = 'Kontaktformular-Anfrage von '.$_POST['NAME'];
$message = '


<table align="center" width="500">
<form method="POST">
<tr>
<td>Name</td>
<td><input type="text" size="50" name="NAME" value="'.$_POST['computer'].'" .if (checkbox aktiviert){echo 'checked';}></td>
</tr>
...
...
...
$headers = "Content-type: text/html; charset=iso-8859-15\r\n";
$headers .= 'From: '.$_POST['EMAIL'].'';
mail($to, $subject, $message, $headers);


Aber wie kann ich die IF-Bedingung so erstellen, dass kontrolliert wird, ob die Checkbox aktiviert ist oder nicht?Wenn ja wird in dem HTML-Tag die option checked eingefügt und in der E-Mail dürfte dann ein häkchen erscheinen.


Wäre eventuell besser, wenn du in die eckigen Klammern bei den Namen der Boxen den Wert schreibst


Soll ich in die eckigen klammern denselben Inhalt wie bei Value schreiben? Weiß nicht, was das jetzt bezwecken soll?

 
Wurzel
07-03-2005, 12:58 
 
print_r dient ja auch nur dazu DIR zu zeigen, was übertragen wurde ... mach was draus. übrigens, NICHT gecheckte checkboxen werden auch nicht übertragen ;)


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:19 Uhr.