加载页面时发送电子邮件的PHP邮件


php mail sending email when page is loaded

>问题:我已经为表单和 php 编写了 html 代码来通过电子邮件发送表单的内容,但是 php 代码会在页面加载后立即运行,导致发送空白电子邮件,尽管我签入了表单是否已使用 if(isset($_POST['submit']))

另外,出于某种奇怪的原因,如果我删除"echo"hello"行;PHP 代码根本不起作用!

这是 php:

<?php
if (isset($_POST['submit'])) 
    echo"hello";
/* Set e-mail recipient */
$myemail = "contact@birminghamvegans.com";
/* Check all form inputs using check_input function */
$name = $_POST['inputName'];
$email = $_POST['inputEmail'];
$subject = $_POST['inputSubject'];
$message = $_POST['inputMessage'];

/* Let's prepare the message for the e-mail */
$subject2 = "Message from Birmingham Vegans website";
$message = "
Someone has sent you a message using your contact form:
Name: $name
Email: $email
Subject: $subject
Message:
$message
";
/* Send the message using mail() function */
mail($myemail, $subject2, $message);

?>

这是HTML

<form name="contactform" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
                            <div class="form-group">
                                <label for="inputName" class="col-lg-2 control-label">Name</label>
                                <div class="col-lg-10">
                                    <input type="text" class="form-control" id="inputName" name="inputName" placeholder="Your Name" required>
                                </div>
                            </div>
                            <div class="form-group">
                                <label for="inputEmail1" class="col-lg-2 control-label">Email</label>
                                <div class="col-lg-10">
                                    <input type="text" class="form-control" id="inputEmail" name="inputEmail" placeholder="Your Email" required>
                                </div>
                            </div>
                            <div class="form-group">
                                <label for="inputSubject" class="col-lg-2 control-label">Subject</label>
                                <div class="col-lg-10">
                                    <input type="text" class="form-control" id="inputSubject" name="inputSubject" placeholder="Subject Message" required>
                                </div>
                            </div>
                            <div class="form-group">
                                <label for="inputPassword1" class="col-lg-2 control-label">Message</label>
                                <div class="col-lg-10">
                                    <textarea class="form-control" rows="4" id="inputMessage" name="inputMessage" placeholder="Your message..." required></textarea>
                                </div>
                            </div>
                            <div class="form-group">
                                <div class="col-lg-offset-2 col-lg-10">
                                    <button type="submit" class="btn btn-default">
                                        Send Message
                                    </button>
                                </div>
                            </div>
                        </form>

删除echo"hello";时代码中断的原因是IF语句缺少括号,这是一个语法错误。当你在像IF这样的控制结构后面有一行时,假定这是该块中的所有内容并且是有效的代码。一旦您有超过两行,就需要大括号。

if (isset($_POST['submit'])) {
    // mail code goes here
}
电子邮件在页面加载时

发送的原因是,每次页面加载时都会调用代码的电子邮件部分。如果将 if 语句修复为包含大括号,则此错误将消失。

您的问题是开头if缺少括号

这是一个完整的声明:

if (isset($_POST['submit']))
   echo"hello";

它和这个一样:

if (isset($_POST['submit']))
{
    echo"hello";
}

因此,要解决您的问题,请在if语句上使用括号:

if (isset($_POST['submit']))
{
   echo"hello";
  /* Set e-mail recipient */
  $myemail = "contact@birminghamvegans.com";
  /* Check all form inputs using check_input function */
  $name = $_POST['inputName'];
  $email = $_POST['inputEmail'];
  $subject = $_POST['inputSubject'];
  $message = $_POST['inputMessage'];
  /* Let's prepare the message for the e-mail */
  $subject2 = "Message from Birmingham Vegans website";
  $message = "
  Someone has sent you a message using your contact form:
  Name: $name
  Email: $email
  Subject: $subject
  Message:
  $message
  ";
  /* Send the message using mail() function */
  mail($myemail, $subject2, $message);
}

if (isset($_POST['submit'])) 
    echo"hello";

的 if 语句仅适用于不带大括号的下一行({...} (。因此,无论表单提交如何,都会执行mail()函数。

您需要将条件代码块包装在大括号中。不带大括号,则仅将条件应用于 echo 语句(条件之后的下一条语句(,并每次运行代码的其余部分。

<?php
if (isset($_POST['submit'])) {
    // Inside opening curly brace
    echo"hello";
/* Set e-mail recipient */
$myemail = "contact@birminghamvegans.com";
//
// More conditional code here
//
/* Send the message using mail() function */
mail($myemail, $subject2, $message);
// Closing brace
}

谢谢大家,大括号是小学生的错误。解决了错误,需要做if (isset($_POST['inputName']))