仅显示PHP表单邮件程序中的选定复选框。

时间:2015-01-17 05:26:55

标签: php html email forms

我的“mailhandler.php”的PHP代码似乎显示我的HTML网站上的所有复选框,当它到达我的电子邮件时被检查。我希望用户只选择他们想要的复选框,因此只有他们的选择显示在我的电子邮件中。

用于复选框的HTML代码:

< input type="checkbox" name="event1" value="Summer" />

PHP MAILHANDLER的HTML代码:

$owner_email ='MYEMAIL';
$headers = 'From:' . $_POST["email"];
$subject = 'A message from your site visitor ' . $_POST["name"];
$messageBody = "";

if($_POST['name']!='nope'){
    $messageBody .= '<p>Visitor: ' . $_POST["name"] . '</p>' . "\n";
    $messageBody .= '<br>' . "\n";
}
if($_POST['email']!='nope'){
    $messageBody .= '<p>Email Address: ' . $_POST['email'] . '</p>' . "\n";
    $messageBody .= '<br>' . "\n";
}else{
    $headers = '';
}
if($_POST['ticketnumber']!='nope'){     
    $messageBody .= '<p>Ticket Number: ' . $_POST['ticketnumber'] . '</p>' . "\n";
    $messageBody .= '<br>' . "\n";
}
if($_POST['phone']!='nope'){        
    $messageBody .= '<p>Phone Number: ' . $_POST['phone'] . '</p>' . "\n";
    $messageBody .= '<br>' . "\n";
}   
if($_POST['fax']!='nope'){      
    $messageBody .= '<p>Email List: ' . $_POST['elist'] . '</p>' . "\n";
    $messageBody .= '<br>' . "\n";
}
if($_POST['ticketnumber1']!='nope'){
    $messageBody .= '<p>Ticket Number: ' . $_POST['ticketnumber1'] . '</p>' . "\n";
}


if($_POST['event1']!='nope'){
    $messageBody .= '<p>Checked Photo 1 ' . $_POST['event1'] . '</p>' . "\n";
}
if($_POST['event2']!='nope'){
    $messageBody .= '<p>Checked Photo 2 ' . $_POST['event2'] . '</p>' . "\n";
}


if($_POST['message']!='nope'){
    $messageBody .= '<p>Message: ' . $_POST['message'] . '</p>' . "\n";
}

if($_POST["stripHTML"] == 'true'){
    $messageBody = strip_tags($messageBody);
}

try{
    if(!mail($owner_email, $subject, $messageBody, $headers)){
        throw new Exception('mail failed');
    }else{
        echo 'mail sent';
    }
}catch(Exception $e){
    echo $e->getMessage() ."\n";
}

2 个答案:

答案 0 :(得分:1)

对于此复选框:

<input type="checkbox" name="event1" value="Summer" />

这是检查提交时是否已检查的方法:

if (isset($_POST['event1']) && $_POST['event1'] === 'Summer') {
  echo 'Checkbox event1 was checked';
} else {
  echo 'Checkbox event1 was not checked';
}

规则是:

  • 如果选中该复选框,则复选框的名称将是$ _POST超级全局中的键,复选框值将是键的值(如果未给复选框赋值,则为默认值在没有引号的情况下“开启”
  • 如果未选中该复选框,则该复选框的$ _POST超级全局内没有任何内容

如果您希望始终拥有与复选框对应的密钥并且仅检查值,则可以使用技巧:

<input type="hidden" name="event1" value="no" />
<input type="checkbox" name="event1" value="yes" />

在这种情况下,“event1”将始终出现在$ _POST中,您只能检查该值。

当然,您绝不应该假设表单将从您的特定HTML表单提交。如果有人使用自定义HTML表单或curl等工具发布到您的电子邮件处理程序,则密钥可能仍然缺失或具有与您预期不同的值。这就是为什么你不应该直接使用$ _POST超级全局,而是使用一种方法来访问为你执行所有这些检查的请求:

class Request
{
    public function post($key, $default = null)
    {
        if (isset($_POST[$key])) {
            return $_POST[$key];
        } else {
            return $default;
        }
    }
}

$request = new Request();
if ($request->post('event1') === 'Summer') {
    echo 'Checkbox event1 was checked';
} else {
    echo 'Checkbox event1 was not checked';
}

答案 1 :(得分:0)

这将检查数据库中是否存在&#39; Y&#39;(是=已检查)的值并将其回显

<?php if ($something['*something*']=='Y') echo 'checked';  ?>