PHP联系表格不提交
嗨我以前使用这个非常简单的PHP联系脚本成功,虽然当我试图在表单上的新HTML页面上实现它将不会提交。任何人都可以看到明显的错误? 任何帮助,将不胜感激PHP联系表格不提交
这里是HTML表单:
<div id="formContainer">
<form action="form.php" method="post" id="contactForm">
<fieldset>
<legend>Your details</legend>
<label for="name">Name *</label>
<input type="text" id="name">
<label for="email">Email *</label>
<input type="email" id="email">
<label for="tel">Telephone</label>
<input type="tel" id="tel">
</fieldset>
<fieldset>
<legend>Tutoring</legend>
<label for="type">Type of lesson</label>
<select name="type" id="type">
<option>Individual</option>
<option>Group</option>
</select>
<label for="subject">Subject</label>
<input name="subject" list="subjects" id="subject">
<datalist id="subjects">
<option>English</option>
<option>Biology</option>
<option>Geography</option>
</datalist>
<label for="level">Your level</label>
<select name="level" id="level">
<option>Beginner</option>
<option>GCSE</option>
<option>A-Level</option>
<option>University</option>
</select>
<label for="hours">Hours/week</label>
<input type="number" id="hours">
<label for="info">Additional Information</label>
<textarea name="info" id="info" rows="10" cols="6"></textarea>
</fieldset>
<input type="submit" name="submit" value="Send" id="sendButton">
<input type="hidden" name="submit_check" value="1" />
</form>
</div>
这里是简单的PHP脚本:
<?php
if ($_POST["email"]<>'') {
$ToEmail = '[email protected]';
$EmailSubject = 'Site contact form ';
$mailheader = "From: ".$_POST["email"]."\r\n";
$mailheader .= "Reply-To: ".$_POST["email"]."\r\n";
$mailheader .= "Content-type: text/html; charset=iso-8859-1\r\n";
$MESSAGE_BODY = "Name: ".$_POST["name"]."<br>";
$MESSAGE_BODY .= "Email: ".$_POST["email"]."<br>";
$MESSAGE_BODY = "Telephone: ".$_POST["tel"]."<br>";
$MESSAGE_BODY = "Type: ".$_POST["type"]."<br>";
$MESSAGE_BODY = "Subject: ".$_POST["subject"]."<br>";
$MESSAGE_BODY = "Level: ".$_POST["level"]."<br>";
$MESSAGE_BODY = "Hours required: ".$_POST["hours"]."<br>";
$MESSAGE_BODY .= "Additional information: ".nl2br($_POST["info"])."<br>";
mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader) or die ("Failure");
?>
<html>
<h3>Thanks for your email</h3>
<h4>I'll get back to you as soon as possible</h4>
<a href="index.html"><p>Click here to go back to previous page</p></a>
</html>
<?php
} else {
?>
<html>Sorry, this form didn't work</html>
<?php
};
?>
尝试用
if (!empty($_POST["email"]))
不过,您可以使用以下网址查看该网页上发布的内容:
echo '<pre>';
var_dump($_POST);
感谢所有答复,但不幸的是,更改第一个if语句并没有实现,这个问题可能来自于新的html5标记吗?这个脚本在我使用的另一个站点上工作得很好,它只是基于表格的html4表格 – onjegolders 2011-04-19 11:38:49
不,不是的,Whot不适合你?什么东西从'var_dump'返回? – hsz 2011-04-19 11:45:01
好吧,当我提交表单时,它会直接转到else消息,因此它沿着这条线不能正常工作。很抱歉,您能否确定我必须将您的代码放入var_dump的位置?再次感谢 – onjegolders 2011-04-19 12:00:41
if ($_POST["email"] <> '') {
变化
说成
if ($_POST["email"] != '') {
你应该试试这个:
if(!empty($_POST["email"])){
//your email preparation code
}
insted的使用这个的:
if($_POST["email" <> ''){
//your email preparation code
}
的!
基本上意味着不,所以!empty
意味着不是空
感谢所有回复,但不幸的是,更改第一个if语句似乎没有帮助。这个问题是否可能来自新的html5标记?这同样的脚本在另一个网站上工作得很好,其中只有一个基于表格的html4表格 – onjegolders 2011-04-19 11:37:45
可能,但是它实际上是否在更改页面?或者当你点击提交时只停留在同一页面上? +这可能听起来很愚蠢,但你可能想关闭你的输入标签,比如。你有几个需要关闭的标签。 – ryryan 2011-04-19 11:52:27
我认为输入标签只是关闭>虽然已经改变,谢谢。尽管如此,仍然没有喜悦!我应该说,新的页面确实出现之前,因为为我的HTML标记添加“名称”值,表单工作并发送电子邮件,但不是所有的字段显示在邮件 – onjegolders 2011-04-19 15:54:11
更改您的form.php的为以下
<?php
if ($_POST["email"]<>'') {
$ToEmail = '[email protected]';
$EmailSubject = 'Site contact form ';
$mailheader = "From: ".$_POST["email"]."\r\n";
$mailheader .= "Reply-To: ".$_POST["email"]."\r\n";
$mailheader .= "Content-type: text/html; charset=iso-8859-1\r\n";
$MESSAGE_BODY = "Name: ".$_POST["name"]."<br>";
$MESSAGE_BODY .= "Email: ".$_POST["email"]."<br>";
$MESSAGE_BODY = "Telephone: ".$_POST["tel"]."<br>";
$MESSAGE_BODY = "Type: ".$_POST["type"]."<br>";
$MESSAGE_BODY = "Subject: ".$_POST["subject"]."<br>";
$MESSAGE_BODY = "Level: ".$_POST["level"]."<br>";
$MESSAGE_BODY = "Hours required: ".$_POST["hours"]."<br>";
$MESSAGE_BODY .= "Additional information: ".nl2br($_POST["info"])."<br>";
mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader) or die ("Failure");
echo <<<EXCERPT
<html>
<h3>Thanks for your email</h3>
<h4>I'll get back to you as soon as possible</h4>
<a href="index.html"><p>Click here to go back to previous page</p></a>
</html>
EXCERPT;
} else {
echo "<html>Sorry, this form didn't work</html>";
}
?>
你也可以只使用:
if ($_POST["email"]) {
这与!= ""
或empty()
检查非常相似。 PHP被接受来处理表单。你可以让它探测传入的表单域。它为字符串使用了一些神奇的布尔转换规则,大部分时间都会完成你想要的。
这种更简单的样式的另一个优点是,如果启用E_ALL和E_NOTICE(= debug)error_reporting模式,它便于调试。
请注意,除非您正在运行[suhosin](http://www.hardened-php.net/suhosin/configuration.html#suhosin.mail.protect),否则您在此处有可利用的漏洞;攻击者只需用'\ r \ nCc:blah \ r \ n \ r \ nI Love Spam!'提交'$ _POST [ 电子邮件]]'并且您已将主机变成垃圾邮件。 – sarnold 2011-04-19 10:35:11
是的,我很关心问题是,任何具有任何类型安全功能的脚本似乎都非常复杂,我似乎无法实现它们。我将如何包含suhosin?谢谢 – onjegolders 2011-04-19 11:30:05