【问题标题】:POST checkbox value to email?将复选框值发布到电子邮件?
【发布时间】:2012-12-13 21:47:36
【问题描述】:

我有一个简单的复选框示例,它记住在提交表单后选择了什么并且出现错误。

这部分效果很好......但是,我想将生成的“选中”框发布到我的表单邮件功能。

我现在只报告选中或未选中的内容

<?php

$CB_1 = 'unchecked';
$CB_2 = 'unchecked';
$CB_3 = 'unchecked';
$CB_4 = 'unchecked';
$CB_5 = 'unchecked';

if (isset($_POST['submit'])) {

if (isset($_POST['CB_1'])) {$CB_1 = $_POST['CB_1'];
if ($CB_1 == 'item_01') {$CB_1 = 'checked';}
}

if (isset($_POST['CB_2'])) {$CB_2 = $_POST['CB_2'];
if ($CB_2 == 'item_02') {$CB_2 = 'checked';}
}

if (isset($_POST['CB_3'])) {$CB_3 = $_POST['CB_3'];
if ($CB_3 == 'item_03') {$CB_3 = 'checked';}
}

if (isset($_POST['CB_4'])) {$CB_4 = $_POST['CB_4'];
if ($CB_4 == 'item_04') {$CB_4 = 'checked';}
}

if (isset($_POST['CB_5'])) {$CB_5 = $_POST['CB_5'];
if ($CB_5 == 'item_05') {$CB_5 = 'checked';}
}
}

if (isset($_POST['submit'])) {
$error  = "";

    if (!empty($_POST['email'])) {
    $email = $_POST['email'];

    if (!preg_match("/^[a-z0-9]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $email)){ 
    $error .= "E-mail address not valid.";
    }

    } else {

    $error .= "E-mail address is required.";
    }

    if (empty($error)) {

    $from = 'From: '. @TEST .' <'. $email .'>';
    $to = "someone@company.com";
    $subject = "CHECKBOX TEST";
    $content = "

    checkbox selections: 
                        check box 01: $CB_1
                        check box 02: $CB_2
                        check box 03: $CB_3
                        check box 04: $CB_4
                        check box 05: $CB_5

    ";

    $success = mail($to,$subject,$content,$from);
    }
    }

?>



<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">

<?php if (!empty($error)) echo $error ?>

<br><br><br>

e-mail: <input type="text" name="email" value="<?php if (isset ($_POST {'email'})) { echo $_POST['email']; } ?>" />

<P>

<input type="checkbox" name="CB_1" value="item_01" <?PHP echo $CB_1; ?> /> Item 01 

<input type="checkbox" name="CB_2" value="item_02" <?PHP echo $CB_2; ?> /> Item 02 

<input type="checkbox" name="CB_3" value="item_03" <?PHP echo $CB_3; ?> /> Item 03 

<input type="checkbox" name="CB_4" value="item_04" <?PHP echo $CB_4; ?> /> Item 04 

<input type="checkbox" name="CB_5" value="item_05" <?PHP echo $CB_5; ?> /> Item 05 

<P>

<input type="submit" name="submit" value="Submit"></input>

</form>

【问题讨论】:

  • 我认为问题是我目前还没有尝试过什么。
  • 无意冒犯,但您可以改进代码并使其更简洁的一种方法是将所有变量和索引名称与一个整数连接起来,并将其放入 for 循环中,而不是放入所有这些 if。
  • 我同意@redelman431,这将是一个开始修复的好地方
  • 是否可以在堆栈溢出中发布涉及如何清理代码而不实际回答问题的答案?我希望能够向他展示如何清理它,而 cmets 不适合发布代码。
  • 好的,如果我知道你刚才所说的我会...似乎有人编辑了我的原始帖子以删除说我在 PHP 方面是个无能的白痴的部分.

标签: php email checkbox


【解决方案1】:

我知道这不一定能回答这个问题,但可以让你的代码更高效的一种方法就是这样做。

for($i=1; $i<=5;$i++)
{

     if(isset($_POST['submit'])&& isset($_POST['CB_'.$i]) && $CB_.$i=='item_0'.$i)
     {
        $CB_.$i = $_POST['CB_'.$i];
        $CB_.$i = 'checked';
     }
}

如果您以这种方式修复它,也可能使我们更容易调试。

【讨论】:

  • hmmm,我刚刚尝试过,但是当我尝试运行它时,它给了我一个“解析错误:语法错误,意外'++'”。也许我插入不正确。我刚刚用您的代码替换了处理复选框的内容。对吗?
  • 这样吗? “ for($i=1; i
  • i
  • 感谢您的尝试,但我想我只能一直用头撞墙。我只是将我原来的问题换成了一堆未定义的变量和错误。再次感谢。
【解决方案2】:

好的,我找到了一种方法来做我想做的事,但我很确定这不是真正有 PHP 经验的人会做的事情。有什么建议吗?

redelman431,感谢您的建议,但对于我的技能水平而言,它真的太高级了。

<?php

        if(isset($_POST['item_01'])) {$item_01 = 'Item 01';}
        if(isset($_POST['item_02'])) {$item_02 = 'Item 02';}
        if(isset($_POST['item_03'])) {$item_03 = 'Item 03';}
        if(isset($_POST['item_04'])) {$item_04 = 'Item 04';}
        if(isset($_POST['item_05'])) {$item_05 = 'Item 05';}

if (isset($_POST['submit'])) {
$error  = "";

    if (!empty($_POST['email'])) {
    $email = $_POST['email'];

    if (!preg_match("/^[a-z0-9]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $email)){ 
    $error .= "E-mail address not valid.";
    }

    } else {

    $error .= "E-mail address is required.";
    }

    if (empty($error)) {

    $from = 'From: '. @TEST .' <'. $email .'>';
    $to = "someone@company.com";
    $subject = "CHECKBOX TEST";
    $content = "

    checkbox selections: 

                        checked box's: $item_01 $item_02 $item_03 $item_04 $item_05





    ";

    $success = mail($to,$subject,$content,$from);
    }
    }

?>



<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">

<span style="color: red;"><?php if (!empty($error)) echo $error ?></span>

<br><br><br>

e-mail: <input type="text" name="email" value="<?php if (isset ($_POST {'email'})) { echo $_POST['email']; } ?>" />

<P>



<input type="checkbox" name="item_01" value="Item 01" 
<?php if(isset($_POST['item_01'])) { echo 'checked'; } ?> /> Item 01

<input type="checkbox" name="item_02" value="Item 02" 
<?php if(isset($_POST['item_02'])) { echo 'checked'; } ?> /> Item 02

<input type="checkbox" name="item_03" value="Item 03" 
<?php if(isset($_POST['item_03'])) { echo 'checked'; } ?> /> Item 03

<input type="checkbox" name="item_04" value="Item 04" 
<?php if(isset($_POST['item_04'])) { echo 'checked'; } ?> /> Item 04

<input type="checkbox" name="item_05" value="Item 05" 
<?php if(isset($_POST['item_05'])) { echo 'checked'; } ?> /> Item 05



<P>

<input type="submit" name="submit" value="Submit"></input>

</form>

【讨论】:

    【解决方案3】:

    我找到了我想以数组的方式寻找的东西,我认为“redelman431”试图让我这样做,但当时对我来说没有任何意义。

    然后,我偶然发现了 'David Bélanger' 的另一个数组,出于某种原因,它对我来说更有意义,所以我将它用于我的复选框,并且效果非常好。

    新的问题是我无法获取已选中的复选框以记住如果页面上的其他地方有错误,这是一场灾难,因为我的最终表单有很多错误。

    有什么想法吗?

    <?php
    
        #   Default Vars
        $_group_01 = '';
        if(isset($group_01) === TRUE){
        #   Is Array ?
        if(is_array($group_01) === TRUE){
        #   Count
        $c = count($group_01);
        #   Loop
        for($i=0; $i < $c; $i++){
        $_group_01.= (isset($group_01[$i]) === TRUE ? $group_01[$i] : '').($i == ($c-1) ? '' : ($i == $c-2 ? ' and ' : ', '));
        }
        }
        }
    
    if (isset($_POST['submit'])) {
    $error  = "";
    
        if (!empty($_POST['email'])) {
        $email = $_POST['email'];
    
        if (!preg_match("/^[a-z0-9]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $email)){ 
        $error .= "E-mail address not valid.";
        }
    
        } else {
    
        $error .= "E-mail address is required.";
        }
    
        if (empty($error)) {
    
        $from = 'From: '. TEST .' <'. $email .'>';
        $to = "someone@company.com";
        $subject = "CHECKBOX TEST";
        $content = "
    
    checkbox selections: 
    
    Items Checked: $_group_01
    
        ";
    
        $success = mail($to,$subject,$content,$from);
        }
        }
    
    ?>
    
    
    
    <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
    
    <span style="color: red;"><?php if (!empty($error)) echo $error ?></span>
    
    <br><br><br>
    
    e-mail: <input type="text" name="email" value="<?php if (isset ($_POST {'email'})) { echo $_POST['email']; } ?>" />
    
    
    
    <P>
    
    <input type="checkbox" name="group_01[]" value="Item 01" 
    <?php if(isset($_POST['group_01'])) { echo 'checked'; } ?> />Item 01
    
    <input type="checkbox" name="group_01[]" value="Item 02" 
    <?php if(isset($_POST['group_01'])) { echo 'checked'; } ?> />Item 02
    
    <input type="checkbox" name="group_01[]" value="Item 03" 
    <?php if(isset($_POST['group_01'])) { echo 'checked'; } ?> />Item 03
    
    <input type="checkbox" name="group_01[]" value="Item 04" 
    <?php if(isset($_POST['group_01'])) { echo 'checked'; } ?> />Item 04
    
    <input type="checkbox" name="group_01[]" value="Item 05" 
    <?php if(isset($_POST['group_01'])) { echo 'checked'; } ?> />Item 05
    
    <P>
    
    
    
    <input type="submit" name="submit" value="Submit"></input>
    
    </form>
    

    【讨论】:

    • 我忘了提到我试图让它记住检查的内容会检查所有数组是否已检查,所以这是不行的。
    猜你喜欢
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    相关资源
    最近更新 更多