嘿我试图弄清楚我的表单问题以及我的挂断在代码中的位置。有人有什么建议吗?
<form method="post" action="tourney.php">
<div class="row">
<div class="col-sm-4">
<input class="form-control" type="text" placeholder="Name" name="tname">
</div>
<div class="col-sm-4">
<input class="form-control" type="text" placeholder="Email" name="temail">
</div>
<div class="col-sm-4">
<input class="form-control" type="text" placeholder="School or Club" name="tclub">
</div>
<br>
<br>
<div class="col-sm-4">
<input class="form-control" type="text" placeholder="Address" name="taddress">
</div>
<div class="col-sm-3">
<input class="form-control" type="text" placeholder="City" name="tcity">
</div>
<div class="col-sm-2">
<input class="form-control" type="text" placeholder="State" name="tstate">
</div>
<div class="col-sm-2">
<input class="form-control" type="text" placeholder="Zip" name="tstate">
</div>
</div>
<br>
<div class="row">
<div class="col-sm-12">
<textarea placeholder="Type your message here..." class="form-control" rows="5"></textarea>
</div>
</div>
<br>
<div class="row">
<div class="col-sm-6">
<select name="type" class="form-control">
<OPTION VALUE="None Selected" SELECTED>Please select one</OPTION>
<OPTION VALUE="Middle School">Middle School Tournamanet</OPTION>
<OPTION VALUE="Elementary">Elementary Tournament</OPTION>
</select>
</div>
<div class="col-sm-6 pull-right">
<input class="btn btn-danger" type="submit" value="Register">
</div>
</div>
</form>
和PHP发送电子邮件:
<?php
if(isset($_POST['submit'])){
$from = "minguswrestling.com";
$to = "puremeld@gmail.com";
$name = $_POST['tname'];
$email = $_POST['temail'];
$school = $_POST['tclub'];
$address = $_POST['taddress'];
$city = $_POST['tcity'];
$state = $_POST['tstate'];
$zip = $_POST['tzip'];
$type = $_POST['type'];
$message = $_POST['tmessage'];
$subject = "Tourney Signup!";
$body = "From: $from \n Name: $name \n Email: $email \n School: $school\n Address: $address\n City: $city State: $state Zip: $zip\n Event: $type\n Message: $message";
if ($_POST['submit']) {
if (mail ($to, $subject, $body, $from)) {
'<h2>Thank You!</h2>';
header("Location: index.html");
} else {
echo '<p>Oops! An error occurred. Try sending your message again. </p>';
}
}
}
?>
任何帮助将不胜感激。我正在为我的构建使用bootstrap,谢谢。
答案 0 :(得分:2)
您的代码存在一些问题。
首先,正如我在评论中提到的那样;以下条件语句中的所有内容都将永远不会启动:
if(isset($_POST['submit'])){...}
因为没有名为&#34;提交&#34;的表单元素,作为您的提交按钮,错误报告会向您抛出undefined index submit notice...
。
因此您需要将其修改为:
<input name="submit" class="btn btn-danger" type="submit" value="Register">
但是,您需要删除第二个if ($_POST['submit']) {
;它不需要。
您还没有名称属性:
<textarea placeholder="Type your message here..." class="form-control" rows="5"></textarea>
需要修改为name="tmessage"
,因为$message = $_POST['tmessage'];
最有可能用于此消息:
<textarea name="tmessage" placeholder="Type your message here..." class="form-control" rows="5"></textarea>
此外,您在此处使用了相同的名称&#34;州&#34;和&#34; zip&#34;:
<input class="form-control" type="text" placeholder="Zip" name="tstate">
应为:
<input class="form-control" type="text" placeholder="Zip" name="tzip">
然后,您在标题之前输出'<h2>Thank You!</h2>';
和标题:
旁注:您可能打算做echo '<h2>Thank You!</h2>';
,但这仍然构成标题之前的输出,因为PHP实际上是在抛出一个解析错误,但您的服务器可能没有设置为捕获和显示通知/错误等。
if (mail ($to, $subject, $body, $from)) {
'<h2>Thank You!</h2>';
header("Location: index.html");
}
你需要选择&#34;一个&#34;那些而不是两者。将'<h2>Thank You!</h2>';
修改为echo '<h2>Thank You!</h2>';
并删除标题,或删除&#34;谢谢&#34;并使用标题。
请参阅Stack上有关输出前标题的内容:
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:只应在暂存时进行显示错误,而不是生产。
这是重写并查看嵌入式评论:
<?php
if(isset($_POST['submit'])){
$from = "minguswrestling.com";
$to = "puremeld@gmail.com";
$name = $_POST['tname'];
$email = $_POST['temail'];
$school = $_POST['tclub'];
$address = $_POST['taddress'];
$city = $_POST['tcity'];
$state = $_POST['tstate'];
$zip = $_POST['tzip'];
$type = $_POST['type'];
$message = $_POST['tmessage'];
$subject = "Tourney Signup!";
$body = "From: $from \n Name: $name \n Email: $email \n School: $school\n Address: $address\n City: $city State: $state Zip: $zip\n Event: $type\n Message: $message";
if (mail ($to, $subject, $body, $from)) {
echo '<h2>Thank You!</h2>'; // either use echo
// header("Location: index.html"); // or header, not both. Comment one or the other out.
} else {
echo '<p>Oops! An error occurred. Try sending your message again. </p>';
}
}
else { echo "Submit is not set."; }
?>
<强>脚注:强>
最好还对POST数组使用!empty()
,因为任何人都可以使用您的表单并传递空值。
参考:
另外,$from = "minguswrestling.com";
要小心。 mail()
期望成为电子邮件地址而不是域名,最终可能是垃圾邮件。
最好使用手册中所述的From:
。
查阅手册:
最终说明。
目前还不清楚您是否在自己的PC或托管服务中使用此功能。
如果它来自您自己的PC,则需要安装并正确配置Web服务器,包括PHP和邮件。
如果来自托管服务,请确保您可以使用该邮件。
在测试时也检查垃圾邮件。
如果您要使用标头,请为其添加exit;
,否则您的代码可能希望继续执行:
header("Location: index.html");
exit;
请记住不要使用&#34; echo&#34;如果您要使用标题。
答案 1 :(得分:0)
以下内容:
'<h2>Thank You!</h2>';
header("Location: index.html");
错误,你不能在标题之前输出任何内容。删除:
'<h2>Thank You!</h2>';