jasonbradberry
jasonbradberry

Reputation: 873

How to send multiple checkbox responses from HTML form via php?

I have set up a contact form, and set it to email the response to an email account. Part of the form is a series of checkboxes, and I need to get these to display in the email as a list. This is the code I have below, which at the moment returns 'Array' instead of the values of the checkboxes. Any suggestions?

HTML:

<h3>Service required:</h3>
<input type="text" id="name" name="name" placeholder="Name" required />
<input type="email" id="email" name="email" placeholder="Email" required />
<input class="check-box styled" type="checkbox" name="service[]" value="Service / repairs" /><label> Service / repairs</label>
<input class="check-box styled" type="checkbox" name="service[]" value="MOT" /><label> MOT</label>
<input class="check-box styled" type="checkbox" name="service[]" value="Cars for sale" /><label> Cars for sale</label>

Here's the php:

<?php
    if (isset($_POST['service'])) {
    $service = $_POST['service'];
    // $service is an array of selected values
}
$formcontent= "From: $name \n Service(s) required: $service \n";
$recipient = "[email protected]";
$subject = "You have a new message from $name";
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
echo "Thank You! We will get back to you as soon as we can.";
?>

Thanks,

Jason

Upvotes: 0

Views: 7582

Answers (4)

Ali Exalter
Ali Exalter

Reputation: 420

Your input type checkbix must have unique names. Otherwise last checkbox will be found in $_POST. Or you can loop through as discuss above. Make your email html format and write a string of html to $formcontent. e.g.

$formcontent = "<html><head></head><body>";
$formcontent .= "<ul><li>".$_POST["checkbox1"]."</li>";
$formcontent .= "<li>".$_POST["checkbox2"]."</li>";
$formcontent .= "</ul></body></html>";

To write email in html format see mail function on php website.

Upvotes: 0

Dennis Hackethal
Dennis Hackethal

Reputation: 14275

Since several checkboxes are stored in $_POST['service'], it is an array itself and has become two-dimensional. Its different indexes are accessible like this: $_POST['service'][0].

To do something with $_POST['service'], you can use foreach to loop through all indexes:

foreach($_POST['service'] as $post){
    //Do stuff here
}

Alternatively, use implode() to simply concatenate all indexes.

Upvotes: 1

Jamesking56
Jamesking56

Reputation: 3901

Why don't you loop through the array to get the desired results into a String?

if (isset($_POST['service'])) {
    $service = $_POST['service'];
    // $service is an array of selected values
    $service_string = "";
    for($i=0;$i<count($service);$i++)
    {
        if($i!=0)
        {
            $service_string = $service_string . ", ";
        }
        $service_string = $service_string . $service[$i];
    }
}

You will then get an output of a comma separated list of each ticked item as $service_string.

Upvotes: 1

Konstantin
Konstantin

Reputation: 248

You should join (for example implode with ', ') your array elements to a string.

<?php
$formcontent= "From: $name \n Service(s) required: ".implode(", " ,$service)." \n";
?>

Upvotes: 4

Related Questions