【发布时间】:2018-12-06 08:31:36
【问题描述】:
我正在建立一个网站并有一个php 联系表。
表单验证和mail() 函数运行良好。
我的php 表格文件是handler.php。
现在解决问题。当我按下提交按钮并出现错误消息时,它们会出现在一个新的空白页面中,该页面与URL 相同,但它在URL 中添加了/handler.php。
我想做的是让错误消息显示在表单下,如果没有错误,我希望它转到我的thankyoumessage.html。
这是表单的php 代码:
<?php
/*Set the mail of the reciever*/
$myemail = "mymail@example.com";
/*Display error message*/
function show_error($myError)
{
?>
<html>
<body>
<b>Var snäll och rätta till följande fel:</b><br />
<?php echo $myError; ?>
</body>
</html>
<?php
exit();
}
/* Check inputs */
function check_input($data, $problem='error')
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
// if ($problem && strlen($data) == 0)
// {
// show_error($problem);
// }
return $data;
}
if (isset($_POST['email']) && isset($_POST['name']) && isset($_POST['message']))
{
/* Check all form inputs using check_input function */
$name = check_input(utf8_decode($_POST['name']));
$subject = check_input(utf8_decode($_POST['subject']));
$email = check_input(utf8_decode($_POST['email']));
$message = check_input(utf8_decode($_POST['message']));
/* If e-mail is not valid show error message */
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email))
{
show_error("Email adressen är inte giltig...");
echo "<script type='text/javascript'>alert('$message');</script>";
}
/*If name is empty show error message */
if (empty($_POST['name']))
{
show_error("Du måste skriva in ditt namn...");
}
/*If email is empty show error message */
if (empty($_POST['email']))
{
show_error("Du måste skriva in din email...");
}
/*If message is empty show error message */
if (empty($_POST['message']))
{
show_error("Ett meddelande krävs om du önskar att få hjälp av oss...");
}
/* Prepare the message for the e-mail */
$mail =utf8_decode("
Hej!
Ditt kontakt formulär har blivit besvarat av:
Namn: $name
E-mail: $email
Kundens meddelande:
$message
Meddelande slut.
");
echo "Tack för du kontaktar oss! \n Vi återkommer med ett svar så snart som möjligt!";
/* Send the message using mail() function */
mail($myemail, $subject, $mail);
}
else
{
?><span><?php echo "Fyll i alla fälten...";?></span> <?php
}
?>
这是Html 的表单:
<form class="mt-5 ml-5 mr-5" method="POST" action="handler.php" id="reused_form">
<p id="contactForm" class="h4 text-center mt-5"><strong>Kontakta oss</strong></p>
<!-- input text(Name) -->
<div class="md-form">
<i class="fa fa-user prefix">*</i>
<input type="text" name="name" id="name" class="form-control">
<label>Ditt namn</label>
</div>
<!-- input email -->
<div class="md-form mt-5">
<i class="fa fa-envelope prefix">*</i>
<input type="email" id="name" name="email" id="email" class="form-control validate">
<label data-error="Fel" data-success="Rätt">Din email</label>
</div>
<div class="md-form mt-5">
<i class="fa fa-user prefix"></i>
<input type="text" id="subject" name="subject" class="form-control">
<label>Ämne</label>
</div>
<!-- input message -->
<div class="md-form mt-5">
<i class="fa fa-pencil prefix">*</i>
<textarea type="text" name="message" id="message" maxlength="5000" class="form-control md-textarea" rows="3"></textarea>
<label>Meddelande</label>
</div>
<div class="text-center mt-4 mb-4">
<button class="btn danger-color" name="submit" type="submit">Skicka</button>
</div>
</form>
【问题讨论】:
-
在声明
<?php-ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(-1);之后将其添加到您的 php 脚本中,您应该会看到问题的原因 -
好吧,您当前的设置是一个简单的表单操作,无论如何都会将用户带到
handler.php。你所描述的需要AJAX。所以你需要一层 JavaScript 来拦截表单提交,通过 AJAX 发送数据,然后在收到结果时执行两件事之一(显示错误消息或转到感谢页面)。 -
如果错误显示错误,请通过ajax提交相同的表单,否则您可以重定向到thanksyou页面
-
我同意@Utkanos。如果您不想在出现错误时离开页面,则需要使用 ajax 处理服务器响应并检查错误以显示任何错误消息。
-
非常感谢你! - @Utkanos
标签: php html contact-form