如何使用PHP将表单发送到自己的电子邮件?

时间:2014-10-01 07:47:01

标签: php forms

我正在建立一个包含四个字段(用户名,电子邮件,密码,密码重复)的注册表单的网站。我想运行验证实验,因此,当有人提交表单时,我希望电子邮件字段中的值能够发送到我自己的电子邮件地址,以便我们在上线时注意到它。为了实现这一点,我创建了一个带有表单的html / bootstrap页面和一个带有电子邮件说明的mailer.php页面。这是注册表格:

<div class="bs-example">
<div class="col-md-4 col-md-offset-4">
<form action="mailer.php" id="interest-form" method="POST">
    <div class="form-group">
        <input type="username" class="form-control" id="inputUsername" placeholder="Username">
    </div>
    <div class="form-group">
        <input type="email" class="form-control" id="inputEmail" placeholder="Email">
    </div>
    <div class="form-group">
        <input type="password" class="form-control" id="inputPassword" placeholder="Password">
    </div>
    <div class="form-group">
        <input type="password" class="form-control" id="inputPassword" placeholder="Repeat password">
    </div>  
    <div class="checkbox">
        <label><input type="checkbox">Remember me</label>
    </div>
            <button class='btn btn-signup btn-signup-sm btn-interest' id="interested" type="submit" name="remove_levels" value="delete">Sign up</button>
</form>
</div>
</div>

这里有一些javascript我用来制作一个确认框弹出窗口,询问用户是否希望在我们发布并留下他的电子邮件时收到通知:

<script type="text/javascript">
$(document).ready(function(){
$('.btn').on('click', function(e){
e.preventDefault();          // this line is key to preventing page reload
                             // when user clicks submit button inside form
    bootbox.confirm("Work on the game is still in progress. Submit the form and you will receive an email as soon as we launch.", function(result) {
    ("Confirm result: "+result);
                if (result > 0){
                    $('#interest-form').submit();
                };
    }); 
});
});

当该人对该消息单击“是”时,他将被定向到如下所示的mailer.php页面:

<?php

function check_input($data, $problem='')
{
    return $data;
}

function show_success($message)
{
    print_r($message);
}

function show_error($myError)
{
    print_r("error:".$myError);
}

if (!isset($_POST["submit"])) {

    $myemail = "infobetpitch@gmail.com";

    $username = check_input($_POST['inputName'], "Username");
    $email = check_input($_POST['inputEmail'], "Email");

    $subject = "Someone has sent you a message\r\n";

    $message = "Someone has sent you a message using your contac form: \r\n Username:".$username."\r\nEmail:".$email."\r\n";

    mail($myemail, $subject, $message);

    show_success($message);
    exit();
}
?>

现在注册表单和bootbox确认工作,但问题在于将电子邮件地址发送到我的电子邮件。当我将页面放在服务器上时单击注册按钮后,我得到405:方法不允许错误:

代码:MethodNotAllowed 消息:不允许对此资源使用指定的方法。 ResourceType:OBJECT 方法:POST RequestId:0565E2E8DB90C71B HostId:cWkoCKGeVwAWRH / X3brKzv1tTnNuQxylIPm8kd9Fid8U0vWulYB2bJz / IgoqyRvNor

或者当我通过本地浏览器点击链接时,我看到一个白页,其中包含我编写的确切PHP代码。所以我想知道以下内容:

  • 我的mailer.php代码写得正确还是我犯了一些愚蠢的错误?

  • 我通过Amazon S3托管网站。这可能是与服务器相关的问题吗?在此之前我是否需要做其他事情?

我希望这里有人能够发现问题,因为我真的陷入困境。

提前致谢,

Stijn

修改:

我根据Ole的建议更改了代码,但仍然收到相同的错误消息。现在我的代码看起来像这样:

<div class="bs-example">
<div class="col-md-4 col-md-offset-4">
<form action="mailer.php" id="interest-form" method="POST">
    <div class="form-group">
                    <input type="text" class="form-control" name="inputUsername" value="" placeholder="Username" />
    </div>
    <div class="form-group">
                    <input type="text" class="form-control" name="inputEmail" value="" placeholder="Email" />
    </div>
    <div class="form-group">
                    <input type="password" class="form-control" name="inputPassword" value="" placeholder="Password" />     
    </div>
    <div class="form-group">
                    <input type="password" class="form-control" name="inputPassword" value="" placeholder="Password" />
    </div>  
    <div class="checkbox">
        <label><input type="checkbox">Remember me</label>
    </div>
            <button class='btn btn-signup btn-signup-sm' id="interested">Sign up</button>
</form>
</div>
</div>

以下是Ole建议的代码:

<?php
if( $_SERVER['REQUEST_METHOD'] == "POST" ){

    $myemail = "infobetpitch@gmail.com";

    $username = $_POST['inputName'];
    $email = $_POST['inputEmail'];

    $subject = "Someone has sent you a message\r\n";

    $message = "Someone has sent you a message using your contac form: \r\n Username:".$username."\r\nEmail:".$email."\r\n";

    if( mail($myemail, $subject, $message) ){
        echo "Mail is sent";
    }
    else {
        echo "An error occured";
    }

    exit();
}
?>

我仍然无法摆脱那些烦人的错误信息,希望有人能帮我发现错误。

2 个答案:

答案 0 :(得分:2)

您的代码存在多个问题。

问题#1: 您的所有输入元素都缺少名称属性。这就是将字段的值发布到$_POST数组,即:

<input type="text" name="thisistext" value="test" />

将创建一个$_POST数组,如下所示:$_POST['thisistext'] = "test"; 首先,您必须在输入中输入名称。这基本上就是你迄今为止使用id属性。

问题#2: 虽然这不是一个直接问题,但您的PHP代码包含一些不必要的函数,无论如何都会返回成功。首先。更改if( !isset( $_POST['submit'] ) )并删除check_input()的使用,除非您计划将函数扩展为实际执行某些操作。 我想建议你改用它:

<?php
    if( $_SERVER['REQUEST_METHOD'] == "POST" ){

        $myemail = "infobetpitch@gmail.com";

        $username = $_POST['inputName'];
        $email = $_POST['inputEmail'];

        $subject = "Someone has sent you a message\r\n";

        $message = "Someone has sent you a message using your contac form: \r\n Username:".$username."\r\nEmail:".$email."\r\n";

        if( mail($myemail, $subject, $message) ){
            echo "Mail is sent";
        }
        else {
            echo "An error occured";
        }

        exit();
    }
?>

答案 1 :(得分:0)

在您的文件mailer.php中更改:

 $username = $_POST['inputName'];

到此:

 $username = $_POST['inputUsername'];

因为表单中发布的数据位于inputUsername下,而不是inputName下。 例如,如果您的表单中有一个字段,例如

<input type="text" class="form-control" name="example" value="" placeholder="Username" />

为了从此字段中的表单中获取数据,您需要使用此php代码获取此内容

$example = $_POST['example'];