0

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

1
  • 1
    You need to go through you service array using foreach Commented Aug 16, 2012 at 14:44

4 Answers 4

4

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

<?php
$formcontent= "From: $name \n Service(s) required: ".implode(", " ,$service)." \n";
?>
Sign up to request clarification or add additional context in comments.

Comments

1

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.

Comments

1

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.

Comments

0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.