我正在制作一个带有注册表单的网站,该表单包含四个字段(用户名、电子邮件、密码、密码重复)。我想进行验证实验,因此,当有人提交表格时,我希望将电子邮件字段中的值发送到我自己的电子邮件地址,这样我就可以在我们上线时通知他。为了实现这一点,我制作了一个带有表单的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();
}
?>
现在,注册表格和引导框确认工作,但问题在于将电子邮件地址发送到我的电子邮件。当我点击注册按钮,一旦我把页面放在服务器上,我会得到一个405:方法不允许的错误:
代码:MethodNotAllowed消息:不允许对此资源使用指定的方法。资源类型:OBJECT方法:POST请求ID:0565E2E8DB90C71B主机ID:cWkoCKGeVwAWRH/X3brKzv1tTnNuQxylIPm8kd9Fid8U0vWulYB2bJz/IgoqyRvNor
或者,当我通过本地浏览器点击链接时,我会看到一个白色页面,其中包含我编写的确切php代码。所以我想知道以下内容:
我的mailer.php代码写得正确吗?还是犯了一些愚蠢的错误?
我通过AmazonS3主持网站。这可能是与服务器有关的问题吗?我还需要做其他事情吗?
我希望这里有人能发现问题,因为我真的很困。
提前感谢
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();
}
?>
我仍然无法摆脱那个烦人的错误信息,希望有人能帮我发现我的错误。
这里的代码有几个问题。
第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();
}
?>
在您的文件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'];