PHP联系表单,多个收件人无法正常工作

时间:2015-01-16 15:04:42

标签: php html5 contact-form

我已经构建了一个PHP联系表单,用户必须填写所有字段,在php中验证表单并发送给之前选择的收件人。不幸的是它没有用,消息永远不会到达它的目的地。我做错了什么?

我留下了代码:

<form method="post" action="index.php#kontakt">
    <p>
    <label>Namn</label>
    <input name="name" type="text" placeholder="Skriv här">

    <label>Din e-post adress</label>
    <input name="dinepost" type="email" placeholder="Skriv här">

    <label for="sendTo">Välj mottagare:</label>
    <select name="sendTo" required id="sendTo">
        <option id="joao" value="joao">joao</option>
        <option id="company 2" value="lfsolutions">lfsolutions</option>
    </select>

    <label>Meddelande</label>
    <textarea name="message" placeholder="Skriv här"></textarea>

    <label>Hur mycket är 2+2? (Anti-spam)</label>
    <input name="human" type="number" placeholder="Svara här">
    </p>
    <p>
    <input id="submit" name="submit" type="submit" value="Skicka meddelandet!" class="botao"><br>
    *Alla fält är obligatoriska
    </p>
    <?php
        $name = $_POST['name'];
        $email = $_POST['dinepost'];
        $message = $_POST['message'];
        $from = 'webbsida'; 
        $to = $_POST['sendTo'];
        $subject = 'Ny meddelande';
        $human = $_POST['human'];

        switch ($sendTo) {
            case "joao":
              $sendTo = "email1@gmail.com";
              break;
            case "lfsolutions":
              $sendTo = "email2@gmail.com";
              break;

            default:
              $sendTo = "email3@gmail.com";
        }

        $headers = "MIME-Version: 1.0" . PHP_EOL;
        $headers .= "From: $from <$email> ". PHP_EOL;
        $headers .= "Content-type: text/html;charset=UTF-8 ". PHP_EOL;

        $name = str_replace( '[at]','@', $name);
        $message = str_replace( '[at]','@', $message);

        $body = "<strong>Från:</strong> $name\n <br><strong>E-post:</strong> $dinepost\n <br><strong>Meddelandet:</strong>\n <br>$message";

        if ($_POST['submit']) {
        if ($name != '' && filter_var($email, FILTER_VALIDATE_EMAIL)) {
            if ($human == '4') {                 
                if (mail ($to, $subject, $body, $headers)) { 
                echo '<div data-alert class="alert-box success">
                        <p>Ditt meddelande har skickats! Tack så mycket!</p>
                        <a href="#" class="close">&times;</a>
                      </div>';
            } else { 
                echo '<div data-alert class="alert-box alert">
                        <p>Någonting gick fel. Var vänlig och försök igen!</p>
                        <a href="#" class="close">&times;</a>
                      </div>'; 
            } 
        } else if ($_POST['submit'] && $human != '4') {
            echo '<div data-alert class="alert-box alert">
                    <p>Du har gett fel svar på Anti-Spam frågan!</p>
                    <a href="#" class="close">&times;</a>
                  </div>';
        }
        } else {
            echo '<div data-alert class="alert-box alert">
                    <p>Du behöver att fylla alla fält i formuläret!</p>
                    <a href="#" class="close">&times;</a>
                  </div>';
        }
    }

    ?>
</form>

2 个答案:

答案 0 :(得分:0)

您的switch语句是问题所在。 如果我正确理解你的代码,它应该是

switch ($to) {    // not $sendTo
   // (...)
          }

您的版本不尊重用户的选择。

这对你有帮助吗?

答案 1 :(得分:0)

所以你实际上有两个问题。首先是Burki指出的转换问题。

第二个是当您拨打电子邮件时,您没有使用$sendTo的值。您对mail的来电需要使用$sendTo作为收件人:字段:

mail ($sendTo, $subject, $body, $headers)