我从网站复制了邮件表单和PHP邮件。但它似乎没有用。它不发送任何东西或作出任何反应。我试图找到错误,但我不熟悉PHP。我尝试编辑$ emailFrom = ...到$ _POST ['email'];但这也不起作用..
HTML:
<div id="form-main">
<div id="form-div">
<form class="form" id="form1">
<p class="name">
<input name="name" type="text" class="validate[required,custom[onlyLetter],length[0,100]] feedback-input" placeholder="Naam"/>
</p>
<p class="email">
<input name="email" type="text" class="validate[required,custom[email]] feedback-input" placeholder="E-mail" />
</p>
<p class="text">
<textarea name="text" class="validate[required,length[6,300]] feedback-input" placeholder="Bericht"></textarea>
</p>
<div class="submit">
<input type="submit" value="Verstuur" id="button-blue"/>
<div class="ease"></div>
</div>
</form>
</div>
</div>
PHP:
<?php
include 'functions.php';
if (!empty($_POST)){
$data['success'] = true;
$_POST = multiDimensionalArrayMap('cleanEvilTags', $_POST);
$_POST = multiDimensionalArrayMap('cleanData', $_POST);
//your email adress
$emailTo ="lisa-ederveen@hotmail.com"; //"yourmail@yoursite.com";
//from email adress
$emailFrom =$_POST['email']; //"contact@yoursite.com";
//email subject
$emailSubject = "Mail from Porta";
$name = $_POST["name"];
$email = $_POST["email"];
$comment = $_POST["comment"];
if($name == "")
$data['success'] = false;
if (!preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $email))
$data['success'] = false;
if($comment == "")
$data['success'] = false;
if($data['success'] == true){
$message = "NAME: $name<br>
EMAIL: $email<br>
COMMENT: $comment";
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html; charset=utf-8" . "\r\n";
$headers .= "From: <$emailFrom>" . "\r\n";
mail($emailTo, $emailSubject, $message, $headers);
$data['success'] = true;
echo json_encode($data);
}
}
?>
答案 0 :(得分:2)
您的表单不完整,错过了method
(POST)和action
(您的php文件名)
请改为尝试:
<div id="form-main">
<div id="form-div">
<form action="sendEmail.php" method="POST" class="form" id="form1">
<p class="name">
<input name="name" type="text" class="validate[required,custom[onlyLetter],length[0,100]] feedback-input" placeholder="Naam"/>
</p>
<p class="email">
<input name="email" type="text" class="validate[required,custom[email]] feedback-input" placeholder="E-mail" />
</p>
<p class="text">
<textarea name="comment" class="validate[required,length[6,300]] feedback-input" placeholder="Bericht"></textarea>
</p>
<div class="submit">
<input type="submit" value="Verstuur" id="button-blue"/>
<div class="ease"></div>
</div>
</form>
</div>
</div>
<强> sendEmail.php 强>
<?php
//include 'functions.php';
if (!empty($_POST)){
$data['success'] = true;
//$_POST = multiDimensionalArrayMap('cleanEvilTags', $_POST);
//$_POST = multiDimensionalArrayMap('cleanData', $_POST);
//your email adress
$emailTo ="lisa-ederveen@hotmail.com"; //"yourmail@yoursite.com";
//from email adress
$emailFrom =$_POST['email']; //"contact@yoursite.com";
//email subject
$emailSubject = "Mail from Porta";
$name = $_POST["name"];
$email = $_POST["email"];
$comment = $_POST["comment"];
if($name == "")
$data['success'] = false;
if (!preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $email))
$data['success'] = false;
if($comment == "")
$data['success'] = false;
if($data['success'] == true){
$message = "NAME: $name<br>
EMAIL: $email<br>
COMMENT: $comment";
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html; charset=utf-8" . "\r\n";
$headers .= "From: <$emailFrom>" . "\r\n";
mail($emailTo, $emailSubject, $message, $headers);
$data['success'] = true;
echo json_encode($data);
}
}
?>
答案 1 :(得分:2)
首先,您的表单:<form class="form" id="form1">
如果方法没有明确指示,则表格默认为GET。
如果你的HTML表单和PHP在同一个文件中,请使用这样的POST:
<form class="form" id="form1" method="post">
因为你正在使用POST数组。
或
<form class="form" id="form1" method="post" action="your_handler.php">
如果使用不同的文件;我使用your_handler.php
作为示例文件名。
此外,<textarea name="text"...
<textarea name="comment"
数组,应为$_POST["comment"]
。
Undefined index text...
通知。将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告应仅在暂存时完成,而不是生产。
脚注:
我不知道multiDimensionalArrayMap('cleanEvilTags'
做了什么,所以你必须检查一下。
如果您仍然没有收到邮件,请检查您的垃圾邮件。
做:
if(mail($emailTo, $emailSubject, $message, $headers)){
echo "Mail sent.";
}
如果它回应&#34;邮件发送&#34;,那么mail()
就完成了它的工作。一旦它结束,它就会失控。
你可以考虑使用PHPMailer或Swiftmailer这些是更好的解决方案,就像使用SMTP邮件一样。
现在,if (!empty($_POST)){
并非完全解决方案。对所有输入最好使用条件!empty()
。您的提交计为POST数组,只能使用额外的isset()
来依赖它。
如果您在自己的计算机上使用它,请确保PHP确实正在运行,正确安装和配置,包括任何与邮件相关的设置。
附加说明:
您还应该对所有条件陈述使用完整和适当的支撑。
这没有:
if($comment == "")
$data['success'] = false;
应该读作
if($comment == ""){
$data['success'] = false;
}
同样的事情:
if($name == "")
$data['success'] = false;
&#34;我从网站上复制了邮件表单和PHP邮件。&#34;
再次,关于multiDimensionalArrayMap('cleanEvilTags'
;如果你没有这个功能,那么你需要摆脱它,并为你的输入使用另一种过滤方法。
在PHP.net上查询以下各种过滤器选项: