始终发送PHP联系表单

时间:2014-08-12 10:27:48

标签: php forms

我有这样的表格:

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  <div>
    <span><label>Name</label></span>
    <span><input name="userName" type="text" class="textbox"></span>
  </div>
  <div>
    <span><label>Email</label></span>
    <span><input name="userEmail" type="text" class="textbox"></span>
  </div>
  <div>
    <span><label>Phone</label></span>
    <span><input name="userPhone" type="text" class="textbox"></span>
  </div>
  <div>
    <span><label>Subject</label></span>
    <span><textarea name="userMsg"> </textarea></span>
  </div>
  <div>
    <span><input type="submit" value="Send!"></span>
  </div>
</form>

以下PHP代码位于同一页面上,因为action<?php echo $_SERVER['PHP_SELF']; ?>

<?php
if(isset($_POST)) {
    $name = htmlspecialchars($_POST['userName']);
    $email = htmlspecialchars($_POST['userEmail']);
    $phone = htmlspecialchars($_POST['userPhone']);
    $message = htmlspecialchars($_POST['userMsg'] . $phone);

    $message = wordwrap($message, 70, "\r\n");

    $to = 'myEmail';
    $subject = 'subject';
    $headers = "From: $email" . "\r\n" .
        "Reply-To: $email" . "\r\n" .
            'X-Mailer: PHP/' . phpversion();
    mail($to, $subject, $message, $headers);
}
?>

但是,当用户没有提交表单并只访问联系表单页面时,我会收到一封空白电子邮件。

我该如何解决这个问题?

9 个答案:

答案 0 :(得分:2)

将您的if语句更改为

if(isset($_POST['userEmail'])

每当您访问该网站时,都会设置$ _POST,请参阅PHP doc for isset

另见empty(),您也可以这样做:

if(!empty($_POST))

您可以在文档中看到:

  

[empty()]如果var存在并且具有非空非零,则返回FALSE   值。否则返回TRUE。

     

以下内容被认为是空的:

     
      
  • &#34;&#34; (空字符串)
  •   
  • 0(0为整数)
  •   
  • 0.0(0作为浮动)
  •   
  • &#34; 0&#34; (0作为字符串)
  •   
  • NULL
  •   
  • FALSE
  •   
  • array()(空数组)
  •   
  • $变种; (声明的变量,但没有值)
  •   

或在this questionNemoden的回答建议使用$_SERVER['REQUEST_METHOD'] == 'POST' - 这是非常不言自明的:如果页面是{{1}请求的请求方法,此语句将为true,但是如果您在同一页面上有多个表单,我建议命名每个提交按钮并检查它。

答案 1 :(得分:1)

如果没有发送表单数据,请不要发送表单。

如果该变量中存在某些内容,则条件if(isset($_POST))会检查是否存在变量$_POST$_POST数组是PHP自动创建的超级全局之一,并且始终存在。

您需要检查该数组中是否有一些后置变量; e.g。

if( !empty( $_POST ) )

或更好

if( !empty( $_POST['userEmail'] ) )

...因为post数组可能有成员(即表单字段),但那些可能是空的。

答案 2 :(得分:0)

$_POST只是一个空的预定义数组,因此当他们加载页面时,会定义$_POST。您需要做的是isset($_POST['name'])

<?php
if(isset($_POST['name'])) {
    $name = htmlspecialchars($_POST['userName']);
    $email = htmlspecialchars($_POST['userEmail']);
    $phone = htmlspecialchars($_POST['userPhone']);
    $message = htmlspecialchars($_POST['userMsg'] . $phone);

    $message = wordwrap($message, 70, "\r\n");

    $to = 'myEmail';
    $subject = 'subject';
    $headers = "From: $email" . "\r\n" .
        "Reply-To: $email" . "\r\n" .
            'X-Mailer: PHP/' . phpversion();
    mail($to, $subject, $message, $headers);
}
?>

答案 3 :(得分:0)

你可以这样修理它:

<?php
if(isset($_POST['userName']) && isset($_POST['userEmail']) && isset($_POST['userPhone']) && isset($_POST['userMsg'])) {
    $name = htmlspecialchars($_POST['userName']);
    $email = htmlspecialchars($_POST['userEmail']);
    $phone = htmlspecialchars($_POST['userPhone']);
    $message = htmlspecialchars($_POST['userMsg'] . $phone);

    $message = wordwrap($message, 70, "\r\n");

    $to = 'myEmail';
    $subject = 'subject';
    $headers = "From: $email" . "\r\n" .
        "Reply-To: $email" . "\r\n" .
            'X-Mailer: PHP/' . phpversion();
    mail($to, $subject, $message, $headers);
}
?>

但你可以添加

if(!empty($_POST['userMsg']) 

测试变量是否为空......

答案 4 :(得分:0)

您可以为提交按钮指定一个名称,并检查是否单击了该按钮。这将阻止在加载页面时发送电子邮件。

if (isset($_POST["submit"])) {
   // your code
}

编辑提交按钮的HTML,如下所示:

<input type="submit" value="Send!" name="submit">

答案 5 :(得分:0)

提供提交按钮的名称,如

 <span><input type="submit" value="Send!" name="submit"></span>

并在php中检查它

if(isset($_POST['submit']))
{
        // your code
}

答案 6 :(得分:0)

这不是一个好习惯。 我强烈建议您开始使用PHP框架。

...尽管如此

$ _POST将始终存在,因此您无法像if(isset($_POST))那样对其进行测试。 要测试您的表单是否已提交,您必须检查是否存在某些预期的POST变量。

在您的情况下,if(isset($_POST['userEmail']))之类的内容可以解决问题,或者您可以在提交按钮中添加name属性并对其进行测试if(isset($_POST['mySubmitButtonName']))

答案 7 :(得分:0)

您需要添加提交按钮的名称

<input type="submit" value="Send!" name="send">

然后你可以在按下按钮时编写条件,邮件将像

一样发送
if(isset($_REQUEST['send'])){

    $name = htmlspecialchars($_POST['userName']);
    $email = htmlspecialchars($_POST['userEmail']);
    $phone = htmlspecialchars($_POST['userPhone']);
    $message = htmlspecialchars($_POST['userMsg'] . $phone);

    $message = wordwrap($message, 70, "\r\n");

    $to = 'myEmail';
    $subject = 'subject';
    $headers = "From: $email" . "\r\n" .
    "Reply-To: $email" . "\r\n" .
        'X-Mailer: PHP/' . phpversion();
    mail($to, $subject, $message, $headers);
}

答案 8 :(得分:0)

这可能是针对表单上的$_SERVER['PHP_SELF'];,尝试添加实际页面目录或更好的解决方案,我会尝试检查特定必填字段是否为空

if (!empty($_POST['userMsg'])){}