【问题标题】:Not getting values from an array of checkboxes没有从复选框数组中获取值
【发布时间】:2015-04-25 05:35:50
【问题描述】:

在我正在构建的此表单中,我在将数组列在网站所有者在提交表单后收到的电子邮件中时遇到问题。以下是收到的电子邮件的外观:

公司:公司名称
名字:鲍勃
姓氏:琼斯
邮箱:email@gmail.com
电话:123-652-9658
街道地址:123 Main Street
城市:奥尔巴尼
州:纽约
邮编:12345
感兴趣的领域:
窗户/门数:6
您是如何得知我们公司的?谷歌必应
附加信息:嗨

表格代码如下:

<form method="post" action="sendeform.php">
         <p><label for="company">Company:</label> <input type="text" class="form-control" name="company" id="company" tabindex="1" /></p>
        <p><label for="firstname">First Name:*</label> <input type="text" class="form-control" name="firstname" id="firstname" tabindex="2" /></p>
        <p><label for="lastname">Last Name:*</label> <input type="text" class="form-control" name="lastname" id="lastname" tabindex="3" /></p>
        <p><label for="email">Email:*</label> <input type="text" class="form-control" name="email" id="email" tabindex="4"  /></p>
        <p><label for="phone">Phone:*</label> <input type="text" class="form-control" name="phone" id="phone" tabindex="5" /></p>
        <p><label for="street">Street Address:*</label> <input type="text" class="form-control" name="street" id="street" tabindex="6" /></p>
        <p><label for="city">City:*</label> <input type="text" class="form-control" name="city" id="city" tabindex="6" /></p>
        <p><label for="state">State:*</label> <input type="text" class="form-control" name="state" id="state" tabindex="6" /></p>
        <p><label for="zip">Zip:*</label> <input type="text" class="form-control" name="zip" id="zip" tabindex="6"  /></p>
        <p><label for="interest">Areas of Interest:*</label><br>

          <input type="checkbox" name="check_list[]" value="Heat Reduction" /> Heat Reduction<br>
            <input type="checkbox" name="check_list[]" value="UV/Fading" /> UV/Fading<br>
            <input type="checkbox" name="check_list[]" value="Wall Finishes" /> Wall Finishes<br>
            <input type="checkbox" name="check_list[]" value="Sun Control" /> Sun Control<br>
            <input type="checkbox" name="check_list[]" value="Safety/Security Film" /> Safety/Security Film<br>
            <input type="checkbox" name="check_list[]" value="Graphics" /> Graphics<br>
             <input type="checkbox" name="check_list[]" value="Decorative Film" /> Decorative Film<br>
            <input type="checkbox" name="check_list[]" value="Wall Murals" /> Wall Murals<br></p>
            <p><label for="doors">Number of windows / Doors:</label> <input type="text" class="form-control" name="doors" id="doors" tabindex="6" /></p>

 <p><label for="hear">How did you hear about our company?</label> <textarea  class="form-control" name="hear" id="hear" cols="12" rows="6" tabindex="7"></textarea></p>           

        <p><label for="info">Additional Information:</label> <textarea class="form-control" name="info" id="info" cols="12" rows="6" tabindex="8"></textarea></p>

        <p><input name="estimatesubmit" type="submit" id="estimatesubmit" class="submit" value="Send" tabindex="9" /></p>

</form>

这是运行表单的 PHP:

<?php


if(isset($_POST['submit'])){//to run PHP script on submit
if(!empty($_POST['check_list'])){
// Loop to store and display values of individual checked checkbox.
foreach($_POST['check_list'] as $selected){
echo $selected."</br>";
}}}




$company = filter_var($_POST['company'], FILTER_SANITIZE_STRING);
$firstname = filter_var($_POST['firstname'], FILTER_SANITIZE_STRING);
$lastname = filter_var($_POST['lastname'], FILTER_SANITIZE_STRING);
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
$phone = filter_var($_POST['phone'], FILTER_SANITIZE_STRING);
$street = filter_var($_POST['street'], FILTER_SANITIZE_STRING);
$city = filter_var($_POST['city'], FILTER_SANITIZE_STRING);
$state = filter_var($_POST['state'], FILTER_SANITIZE_STRING);
$zip = filter_var($_POST['zip'], FILTER_SANITIZE_STRING);
$doors = filter_var($_POST['doors'], FILTER_SANITIZE_STRING);
$hear = filter_var($_POST['hear'], FILTER_SANITIZE_STRING);
$info = filter_var($_POST['info'], FILTER_SANITIZE_STRING);

$site_owners_email = 'email@gmail.com'; // Replace this with your own email address
$site_owners_name = 'Client Name'; // replace with your name
$site_owners_name_from = 'Free Estimate Submission';

if (strlen($firstname) < 2) {
    $error['firstname'] = "Please enter your first name";
}

if (strlen($lastname) < 2) {
    $error['lastname'] = "Please enter your last name";
}

if (!preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $email)) {
    $error['email'] = "Please enter a valid email address";
}

if (strlen($phone) < 3) {
    $error['phone'] = "Please enter your phone number.";
}

if (!$error) {

    require_once('phpMailer/class.phpmailer.php');
    $mail = new PHPMailer();

    $mail->From = $email;
    $mail->FromName = $site_owners_name_from;
    $mail->Subject = "Form Submission";
    $mail->AddAddress($site_owners_email, $site_owners_name);
    $mail->IsHTML(true);
    $mail->Body = 'The estimate form on your website, 3Msecurityfilm.com, has been filled out.'. '<br/><br/>'. '<b>Company:</b> '. $company . '<br/><b>First Name:</b> '. $firstname . '<br/><b>Last Name:</b> '. $lastname .'<br/><b>E-mail:</b> '. $email .'<br/><b>Phone:</b> '. $phone .'<br/><b>Street Address:</b> '. $street .'<br/><b>City:</b> '. $city . '<br/><b>State:</b> '. $state . '<br/><b>Zip:</b> '. $zip . '<br/><b>Areas of Interest:</b> '. $selected . '<br/><b>Number of windows / Doors:</b> '. $doors . '<br/><b>How did you hear about our company?</b> '. $hear . '<br/><b>Additional Information:</b> '. $info;



    $mail->Send();

    echo "<div class='alert alert-success'  role='alert'>Thanks " . $firstname . ". Your message has been sent.</div>";

} # end if no error
else {

    $response = (isset($error['firstname'])) ? "<div class='alert alert-danger'  role='alert'>" . $error['firstname'] . "</div> \n" : null;
    $response .= (isset($error['email'])) ? "<div class='alert alert-danger'  role='alert'>" . $error['email'] . "</div> \n" : null;
    $response .= (isset($error['phone'])) ? "<div class='alert alert-danger'  role='alert'>" . $error['phone'] . "</div>" : null;

    echo $response;
} # end if there was an error sending

?>

【问题讨论】:

    标签: php html forms checkbox


    【解决方案1】:

    代码

    // Loop to store and display values of individual checked checkbox.
    foreach($_POST['check_list'] as $selected){
        echo $selected."</br>";
    }
    

    对我来说似乎有点奇怪。这显示所有值都可以,但不存储它们。在此循环之后,$selected 将具有数组的最后一个元素作为值。因此,没有任何内容存储,正如评论所暗示的那样。

    在邮件正文中,您使用的是$selected。这具有来自数组的任意值,或者如果数组为空则未初始化。你可以做的是implode(', ', $_POST['check_list']),它用逗号连接数组的元素(即[4,7,8]变成"4, 7, 8")。

    如果这仍然不起作用,则该值未正确传递到 $_POST。您可以在文件顶部执行var_dump($_POST) 以查看check_list 值是否实际出现在那里。如果需要帮助,可以在问题中包含该 var 转储的输出。

    【讨论】:

    • var_dump 给了我这个:["check_list"]=&gt; array(2) { [0]=&gt; string(14) Heat Reduction" [1]=&gt; string(11) "Sun Control" }
    • 忘了说,收到的邮件还是空白。
    • @curvetide 在这种情况下,implode(', ', $_POST['check_list']) 应该可以工作。它至少在这里工作,所以如果没有,你的代码中肯定有其他问题。
    • 这是我在电子邮件中调用清单值的方式,在这里设置变量:$check = filter_var($_POST['check_list'], FILTER_SANITIZE_STRING);,在这里制作电子邮件:$mail-&gt;Body = &lt;b&gt;Phone:&lt;/b&gt; '. $phone .'&lt;br/&gt;&lt;b&gt;Street Address:&lt;/b&gt; '. $street .'&lt;br/&gt;&lt;b&gt;City:&lt;/b&gt; '. $city . '&lt;br/&gt;&lt;b&gt;State:&lt;/b&gt; '. $state . '&lt;br/&gt;&lt;b&gt;Zip:&lt;/b&gt; '. $zip . '&lt;br/&gt;&lt;b&gt;Areas of Interest:&lt;/b&gt; '. $check . '&lt;br/&gt;&lt;b&gt;Number of windows / Doors:&lt;/b&gt; '. $doors . '&lt;br/&gt;&lt;b&gt;How did you hear about our company?&lt;/b&gt; '. $hear . '&lt;br/&gt;&lt;b&gt;Additional Information:&lt;/b&gt; '. $info;
    • 1.您不能对数组执行 FILTER_SANITIZE_STRING,您必须分别对每个元素执行此操作。 2. 你不能将一个数组连接到一个字符串,你需要使用 implode() 就像我上面展示的那样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 2020-01-11
    • 2013-06-07
    • 1970-01-01
    • 2011-07-08
    • 2019-08-30
    相关资源
    最近更新 更多