Логика множественных флажков для отправки писем - PullRequest
0 голосов
/ 06 ноября 2018

У меня проблемы с логикой отправки на выбранные адреса электронной почты из набора флажков.

У меня есть простая форма с только вводом имени и фамилии и 4 флажками.

То, что я хотел бы сделать, - это когда один из флажков отмечен или если установлены несколько флажков, для отправки электронных писем, которые представляют эти флажки. В зависимости от того, какие флажки установлены для отправки только на эти конкретные электронные письма.

Например, у меня есть 4 электронных письма, и если установлен первый флажок для отправки на эти электронные письма. Если флажки 1 и 2 отмечены для отправки на другие электронные письма или если флажки 2,3,4 отмечены для отправки на другие электронные письма.

Мой код работает, если я отмечаю только один флажок.

Если я отмечу более одного, например, флажок 1,3,4, он будет отправлять электронные письма только на электронные письма с флажком 1, он не будет переходить к третьим электронным письмам или четвертым электронным письмам. Я буду игнорировать их.

Надеюсь, кто-нибудь поможет мне решить эту проблему.

Спасибо.

Вот мой PHP-код

<?php

use PHPMailer\PHPMailer\PHPMailer;
include_once "PHPMailer/PHPMailer.php";
include_once "PHPMailer/Exception.php";

if(isset($_POST['submit'], $_POST["cbone"])) {

$name   = $_POST['name'];
$surname  = $_POST['surname'];


$mail = new PHPMailer();
$mail->addAddress("randomemailone@example.com");
$mail->setFrom($email);
//$mail->Subject = $subject;
$mail->isHTML(true);
$mail->Body = "
<p><strong>Name:</strong> $name</p> 
<p><strong>Surname:</strong> $surname</p>"; 


} else if(isset($_POST['submit'], $_POST['cbtwo'])) {

$name   = $_POST['name'];
$surname  = $_POST['surname'];


$mail = new PHPMailer();
$mail->addAddress("randomemailone@example.com");
$mail->addAddress("randomemailtwo@example.com");
$mail->setFrom($email);
$mail->isHTML(true);
$mail->Body = "
<p><strong>Name:</strong> $name</p> 
<p><strong>Surname:</strong> $surname</p>"; 


}else if(isset($_POST['submit'], $_POST['cbthree'])) {

$name   = $_POST['name'];
$surname  = $_POST['surname'];


$mail = new PHPMailer();
$mail->addAddress("randomemailone@example.com");
$mail->addAddress("randomemailtwo@example.com");
$mail->addAddress("randomemailthree@example.com");
$mail->setFrom($email);
$mail->isHTML(true);
$mail->Body = "
<p><strong>Name:</strong> $name</p> 
<p><strong>Surname:</strong> $surname</p>"; 


}else if(isset($_POST['submit'], $_POST['cbfour'])) {

$name   = $_POST['name'];
$surname  = $_POST['surname'];


$mail = new PHPMailer();
$mail->addAddress("randomemailone@example.com");
$mail->addAddress("randomemailtwo@example.com");
$mail->addAddress("randomemailthree@example.com");
$mail->addAddress("randomemailfour@example.com");
$mail->setFrom($email);
$mail->isHTML(true);
$mail->Body = "
<p><strong>Name:</strong> $name</p> 
<p><strong>Surname:</strong> $surname</p>"; 


}else if(isset($_POST['submit'], $_POST['cbone'], $_POST['cbtwo'])) {

$name   = $_POST['name'];
$surname  = $_POST['surname'];


$mail = new PHPMailer();
$mail->addAddress("randomemailone@example.com");
$mail->setFrom($email);
$mail->isHTML(true);
$mail->Body = "
<p><strong>Name:</strong> $name</p> 
<p><strong>Surname:</strong> $surname</p>"; 


}else if(isset($_POST['submit'], $_POST['cbone'], $_POST['cbthree'])) {

$name   = $_POST['name'];
$surname  = $_POST['surname'];


$mail = new PHPMailer();
$mail->addAddress("randomemailone@example.com");
$mail->addAddress("randomemailtwo@example.com");
$mail->setFrom($email);
$mail->isHTML(true);
$mail->Body = "
<p><strong>Name:</strong> $name</p> 
<p><strong>Surname:</strong> $surname</p>"; 


}else if(isset($_POST['submit'], $_POST['cbone'], $_POST['cbfour'])) {

$name   = $_POST['name'];
$surname  = $_POST['surname'];


$mail = new PHPMailer();
$mail->addAddress("randomemailone@example.com");
$mail->addAddress("randomemailfour@example.com");
$mail->setFrom($email);
$mail->isHTML(true);
$mail->Body = "
<p><strong>Name:</strong> $name</p> 
<p><strong>Surname:</strong> $surname</p>"; 


}else if(isset($_POST['submit'], $_POST['cbone'], $_POST['cbtwo'], $_POST['cbthree'])) {

$name   = $_POST['name'];
$surname  = $_POST['surname'];


$mail = new PHPMailer();
$mail->addAddress("randomemailthree@example.com");
$mail->addAddress("randomemailfour@example.com");
$mail->setFrom($email);
$mail->isHTML(true);
$mail->Body = "
<p><strong>Name:</strong> $name</p> 
<p><strong>Surname:</strong> $surname</p>"; 


}else if(isset($_POST['submit'], $_POST['cbone'], $_POST['cbtwo'], $_POST['cbthree'], $_POST['cbfour'])) {

$name   = $_POST['name'];
$surname  = $_POST['surname'];


$mail = new PHPMailer();
$mail->addAddress("randomemailone@example.com");
$mail->addAddress("randomemailfour@example.com");
$mail->setFrom($email);
$mail->isHTML(true);
$mail->Body = "
<p><strong>Name:</strong> $name</p> 
<p><strong>Surname:</strong> $surname</p>"; 


}else if(isset($_POST['submit'], $_POST['cbtwo'], $_POST['cbthree'])) {

$name   = $_POST['name'];
$surname  = $_POST['surname'];


$mail = new PHPMailer();
$mail->addAddress("randomemailone@example.com");
$mail->addAddress("randomemailtwo@example.com");
$mail->setFrom($email);
$mail->isHTML(true);
$mail->Body = "
<p><strong>Name:</strong> $name</p> 
<p><strong>Surname:</strong> $surname</p>"; 


}else if(isset($_POST['submit'], $_POST['cbtwo'], $_POST['cbfour'])) {

$name   = $_POST['name'];
$surname  = $_POST['surname'];


$mail = new PHPMailer();
$mail->addAddress("randomemailone@example.com");
$mail->addAddress("randomemailtwo@example.com");
$mail->addAddress("randomemailthree@example.com");
$mail->setFrom($email);
$mail->isHTML(true);
$mail->Body = "
<p><strong>Name:</strong> $name</p> 
<p><strong>Surname:</strong> $surname</p>"; 


}else if(isset($_POST['submit'], $_POST['cbthree'], $_POST['cbfour'])) {

$name   = $_POST['name'];
$surname  = $_POST['surname'];


$mail = new PHPMailer();
$mail->addAddress("randomemailtwo@example.com");
$mail->addAddress("randomemailfour@example.com");
$mail->setFrom($email);
$mail->isHTML(true);
$mail->Body = "
<p><strong>Name:</strong> $name</p> 
<p><strong>Surname:</strong> $surname</p>"; 


}else if(isset($_POST['submit'], $_POST['cbtwo'], $_POST['cbthree'], $_POST['cbfour'])) {

$name   = $_POST['name'];
$surname  = $_POST['surname'];


$mail = new PHPMailer();
$mail->addAddress("randomemailone@example.com");
$mail->addAddress("randomemailthree@example.com");
$mail->setFrom($email);
$mail->isHTML(true);
$mail->Body = "
<p><strong>Name:</strong> $name</p> 
<p><strong>Surname:</strong> $surname</p>"; 

}else {
    echo "Email was not send"; 
}

?>

Код формы

<form method="post" action="">
    <div class="form-group">
        <input type="text" name="name" class="form-control" placeholder="Name">
    </div>
    <div class="form-group">
        <input type="text" name="surname" class="form-control" placeholder="Surname">
    </div>
    <div class="form-check">
        <input class="form-check-input" type="checkbox" name="cbone" value="checkone" id="checkone">
        <label class="form-check-label" for="checkone">
            Checkbox One
        </label>
    </div>
    <div class="form-check">
        <input class="form-check-input" type="checkbox" name="cbtwo" value="checktwo" id="checktwo">
        <label class="form-check-label" for="checktwo">
            Checkbox Two
        </label>
    </div>
    <div class="form-check">
        <input class="form-check-input" type="checkbox" name="cbthree" value="checkthree" id="checkthree">
        <label class="form-check-label" for="checkthree">
            Checkbox Three
        </label>
    </div>
    <div class="form-check">
        <input class="form-check-input" type="checkbox" name="cbfour" value="checkfour" id="checkfour">
        <label class="form-check-label" for="checkfour">
            Checkbox Four
        </label>
    </div>
    <input type="submit" name="submit" class="btn btn-primary" value="Send Email">
</form>

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Задача

Поскольку вы используете операторы else, вы заставляете логику программы выбрать это ИЛИ , что , поэтому установите только первый установленный флажок, соответствующий критериям, , и это единственный .

Решение

Перепроектируйте ваш код так, чтобы во всех допустимых экземплярах заполнялся объект PHPMailer, а затем добавьте получателей, как установлено данными формы (в данном случае, флажками):

if(isset($_POST['submit']) ){
    /***
     * Build mailer object with parts that are always true
     ***/

    $mail = new PHPMailer();
    $mail->setFrom($email);
    $mail->isHTML(true);
    $mail->Body = "
       <p><strong>Name:</strong> $name</p> 
       <p><strong>Surname:</strong> $surname</p>"; 

    /***
     * Check for IF clauses based on form data
     ***/
    if($_POST['cbone']) {
        $mail->addAddress("randomemailone@example.com");
        $mail->addAddress("randomemailtwo@example.com");
        ...etc....
    }
    if($_POST['cbtwo']) {
        $mail->addAddress("randomemailthree@example.com");
        ...etc....
    }
    if($_POST['cbthree']) {
        $mail->addAddress("randomemailthree@example.com");
        ...etc....
    }

    /***
     * finally, send mail
     ***/
    $mail->send(); 
}

Это означает, что теперь ваш код проверяет каждое условие, а не только первое условие, которое выполняется.

Я бы также рекомендовал использовать CSRF-токен , чтобы предотвратить повторную отправку электронных писем при обновлении страницы. А также, поскольку ссылается на Synchro , помните, что вы можете очистить адреса PHPMailer перед отправкой.

0 голосов
/ 06 ноября 2018

Логика ваших утверждений if неверна. Вы делаете это (в псевдокоде):

if (checkbox 1) {
  //send email 1
} elseif (checkbox 2) {
  //send email 2
} elseif (checkbox 3) {
  //send email 3
} elseif (checkbox 4) {
  //send email 4
}

Только один из них будет отправлен. Если вы хотите обрабатывать любую комбинацию флажков независимо, вы должны структурировать ее следующим образом:

if (checkbox 1) {
  //send email 1
}
if (checkbox 2) {
  //send email 2
}
if (checkbox 3) {
  //send email 3
}
if (checkbox 4) {
  //send email 4
}

Вам не нужно каждый раз создавать новый экземпляр PHPMailer; Сначала создайте один экземпляр, установите общие для всех параметры, затем повторно используйте его для каждого, очищая список адресов с помощью clearAddresses(), прежде чем использовать его каждый раз.

...