我的PHP联系表单无效

时间:2016-08-26 18:25:22

标签: php html contact-form

我的联系表单有问题,我不知道是联系表单是问题还是PHP,有人可以看看它并告诉我有什么问题吗?就像我说的,我有一遍又一遍地看着它看看有什么问题

<form>
    <div class="row">
        <div class="col-md-6">
            <div class="group">
                <input id="name" type="text"><span class="highlight"></span><span class="bar"></span>
                <label>Name</label>
            </div>
        </div>
        <div class="col-md-6">
            <div class="group">
                <input id="email" type="email"><span class="highlight"></span><span class="bar"></span>
                <label>Email</label>
            </div>
        </div>
    </div>
    <div class="group">
        <textarea class="form-control" rows="5" id="messege"></textarea>
        <span class="highlight"></span><span class="bar"></span>
        <label>Your Messege</label>
    </div>
    <button class="ripple">Send</button>
</form>

这是PHP部分;

<?php
// Email Submit
// Note: filter_var() requires PHP >= 5.2.0
if ( isset($_POST['email']) && isset($_POST['name']) && isset($_POST['subject']) && isset($_POST['message']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ) {

  // detect & prevent header injections
  $test = "/(content-type|bcc:|cc:|to:)/i";
  foreach ( $_POST as $key => $val ) {
    if ( preg_match( $test, $val ) ) {
      exit;
    }
  }

$headers = 'From: ' . $_POST["name"] . '<' . $_POST["email"] . '>' . "\r\n" .
    'Reply-To: ' . $_POST["name"] . '<' . $_POST["email"] . '>' . "\r\n" .
    'Return-Path: ' . $_POST["name"] . '<' . $_POST["email"] . '>' . "\r\n" .
    'MIME-Version: 1.0' . "\r\n" .
    'Content-Type: text/html; charset=utf-8' . "\r\n" .
    'X-Priority: 1' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

  //  Replace with your email
  mail( "email@example.com", $_POST['subject'], $_POST['message'], $headers );

}
?>

2 个答案:

答案 0 :(得分:1)

表单字段中没有destroy个属性:

name

<input id="name" type="text"><span class="hi [..snip..] NOT 用于表单提交。没有名字,没有提交字段。

即使是一些BASIC调试,如id也会向您显示问题。

答案 1 :(得分:1)

您已添加&#39; id&#39;在表单中,但您无法通过使用ID访问输入值,而是必须使用&#39; name&#39;属性。您还必须在表单标记中提供action和method属性。这样输入值将通过您选择的方法发送到选定的路径或文件。我已用解决方案更新了您的代码。你应该试试这个。

<form method="post" action="filename or path">
    <div class="row">
        <div class="col-md-6">
            <div class="group">
                <input id="name" name="name" type="text"><span class="highlight"></span><span class="bar"></span>
                <label>Name</label>
            </div>
        </div>
        <div class="col-md-6">
            <div class="group">
                <input id="email" name="email" type="email"><span class="highlight"></span><span class="bar"></span>
                <label>Email</label>
            </div>
        </div>
    </div>
    <div class="group">
        <textarea class="form-control" rows="5" name="message" id="messege"></textarea>
        <span class="highlight"></span><span class="bar"></span>
        <label>Your Messege</label>
    </div>
    <input type="button" name="button" class="ripple" value="send">
</form>

但是如果你已经在同一个文件中编写了你的​​php代码,那么你就不需要在<form>中添加方法和动作属性了。你应该在<button>中添加name属性,以便确保在单击按钮时执行php代码。

<button name="submit" class="ripple">Send</button>

用这个更新你的PHP代码:

<?php
if(isset($_POST['submit']))
{
// Email Submit
// Note: filter_var() requires PHP >= 5.2.0
if ( isset($_POST['email']) && isset($_POST['name']) && isset($_POST['subject']) && isset($_POST['message']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ) {

  // detect & prevent header injections
  $test = "/(content-type|bcc:|cc:|to:)/i";
  foreach ( $_POST as $key => $val ) {
    if ( preg_match( $test, $val ) ) {
      exit;
    }
  }

$headers = 'From: ' . $_POST["name"] . '<' . $_POST["email"] . '>' . "\r\n" .
    'Reply-To: ' . $_POST["name"] . '<' . $_POST["email"] . '>' . "\r\n" .
    'Return-Path: ' . $_POST["name"] . '<' . $_POST["email"] . '>' . "\r\n" .
    'MIME-Version: 1.0' . "\r\n" .
    'Content-Type: text/html; charset=utf-8' . "\r\n" .
    'X-Priority: 1' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

  //  Replace with your email
  mail( "email@example.com", $_POST['subject'], $_POST['message'], $headers );  
}
else
{
   //echo error
}
?>