How to send through multiple checkbox values to an

2020-05-03 11:30发布

Below shows an extract of my HTML file. The forms objective was when a user selects a checkbox it would add a further value onto a starting total value.

<!doctype html>  

 <html  class="">  
  <head>

  <script type="text/javascript">
    function checkTotal() {
        document.listForm.total.value = '';
        var sum = 68.50;
        for (i=0;i<document.listForm.choice.length;i++) {
          if (document.listForm.choice[i].checked) {
            sum = sum + parseFloat(document.listForm.choice[i].value);
          }
        }
        document.listForm.total.value = sum.toFixed(2);
    }
</script>

  </head>

  <body>


   <form name="listForm" method="post" action="standard_form.php">

  <div class="form-group">
   <label for="additional_extras">Extras</label><br><br>
<input type="checkbox" name="choice" value="60.00" onchange="checkTotal()"> Number1 </div>

  <div class="form-group">
   <label for="additional_extras_2"></label><br>
<input type="checkbox" name="choice" value="20.00" onchange="checkTotal()"> Number 2
</div>

 <div class="form-group">
   <label for="additional_extras_3"></label><br>
<input type="checkbox" name="choice" value="45.00" onchange="checkTotal()"> Number 3
</div>

 <div class="form-group">
   <label for="additional_extras_4"></label><br>
<input type="checkbox" name="choice" value="23.50" onchange="checkTotal()"> Number 4
</div>

<div class="form-group">
   <label for="additional_extras_5"></label><br>
<input type="checkbox" name="choice" value="40.00" onchange="checkTotal()"> Number 5
</div>

<div class="form-group">
   <label for="additional_extras_6"></label><br>
<input type="checkbox" name="choice" value="23.50" onchange="checkTotal()"> Number 6
</div>

<div class="form-group">
   <label for="additional_extras_7"></label><br>
<input type="checkbox" name="choice" value="120.00" onchange="checkTotal()"> Number 7

<br>
  <h3>Your Current Package Total: £<input type="text" readonly placeholder="68.50"  name="total" id="total"/></h3>

  <button type="submit" class="btn btn-default">Submit</button>  

</form>   

     </div>

  </body>
</html>

I would then send this form to the following php file which would then email the forms outputs. I have managed to get all other fields to send successfully but cannot get the check box values to send and be outputted by email without the adding function (which makes the total) becoming interrupted.

<?php
if(isset($_POST['email'])) {

    // EDIT THE 2 LINES BELOW AS REQUIRED
    $email_to = "myemail";
    $email_subject = "mysubject";

    function died($error) {
        // your error code can go here
        echo "We are very sorry, but there were error(s) found with the form you submitted. ";
        echo "These errors appear below.<br /><br />";
        echo $error."<br /><br />";
        echo "Please go back and fix these errors.<br /><br />";
        die();
    }

        $choice = $_POST['choice']; // required
        $total = $_POST['total']; // required

    $email_message = "Form details below.\n\n";

    function clean_string($string) {
      $bad = array("content-type","bcc:","to:","cc:","href");
      return str_replace($bad,"",$string);
    }

    $email_message .= "Choice: ".clean_string($choice)."\n";
    $email_message .= "Order Total: ".clean_string($total)."\n";


// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);  
?>

<!-- include your own success html here -->

Thank you for contacting us. We will be in touch with you very soon.

<?php
}
?>

Please does anyone have a solution for this?? What ever I try I just cant get the check boxes to send through there values and display themselves in the email like the rest of the form.

Any help would be much appreciated!

Thanks!

2条回答
我欲成王,谁敢阻挡
2楼-- · 2020-05-03 12:15

You're building your checkbox inputs all with the SAME name. This means that PHP will process the form submission and continually overwrite "previous" versions of a particular field name:value pair with new copies, e.g

<input type="text" name="foo" value="foo" />
<input type="text" name="foo" value="bar" />
<input type="text" name="foo" value="baz" />

(note same name, 3 different values). Only baz will show up in $_POST/$_GET, because it's the last copy of the foo name in the form.

If you want the individual checkbox values to be submitted AND saved, you'll have to use the PHP-specific array notation in the field naming:

<input type="text" name="foo[]" value="foo" />
<input type="text" name="foo[]" value="bar" />
<input type="text" name="foo[]" value="baz" />
                            ^^--note the [] brackets

This will turn $_POST['foo'] into an array, and tell PHP to save each individual value as an array element.

查看更多
对你真心纯属浪费
3楼-- · 2020-05-03 12:20
  <div class="form-group">
   <label for="additional_extras">Extras</label><br><br>
<input type="checkbox" name="choice[]" value="60.00" onchange="checkTotal()"> Number1 </div>

  <div class="form-group">
   <label for="additional_extras_2"></label><br>
<input type="checkbox" name="choice[]" value="20.00" onchange="checkTotal()"> Number 2
</div>

 <div class="form-group">
   <label for="additional_extras_3"></label><br>
<input type="checkbox" name="choice[]" value="45.00" onchange="checkTotal()"> Number 3
</div>

 <div class="form-group">
   <label for="additional_extras_4"></label><br>
<input type="checkbox" name="choice[]" value="23.50" onchange="checkTotal()"> Number 4
</div>

<div class="form-group">
   <label for="additional_extras_5"></label><br>
<input type="checkbox" name="choice[]" value="40.00" onchange="checkTotal()"> Number 5
</div>

<div class="form-group">
   <label for="additional_extras_6"></label><br>
<input type="checkbox" name="choice[]" value="23.50" onchange="checkTotal()"> Number 6
</div>

<div class="form-group">
   <label for="additional_extras_7"></label><br>
<input type="checkbox" name="choice[]" value="120.00" onchange="checkTotal()"> Number 7

Change you checkbox's name to choice[], so you can use it as array.

$choice = $_POST['choice']; // required

foreach($choice as $c){
   $emailbody .= 'Checkbox .'$c;
}

When you submit your form it'll comming like this:

array(1) { ["choice"]=> array(5) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" [3]=> string(1) "4" [4]=> string(1) "5" } } 

So, you can acess it like $_POST['choice'][0] or [1] or [2] and go.

查看更多
登录 后发表回答