我正在为我的联系表单整理PHP。如果表格没有填写,我试图做的就是出现错误信息。我的html中有一个div,我想显示错误。
我知道我可以使用' echo'显示一条消息,但我希望它准确定位在我想要的位置。我已经看到了这样做的方法,但它涉及将所有PHP代码放在html文件中......然后重命名文件.php。我想将大部分PHP代码与html分开。
这是我的代码:
HTML:
<div class="error">
<p>
Please fill out all fields.
</p>
</div>
<form id="contactForm" action="contact.php" method="post">
<div>
<input type="text" name="name" id="name" placeholder="Your Name" maxlength="65" tabindex="1"> <label for="name">Name</label>
</div>
<div>
<input type="email" name="_replyto" id="email" placeholder="Your Email" maxlength="30" tabindex="2"> <label for="email">Email</label>
</div>
<div>
<textarea name="message" id="message" rows="10" placeholder="Your Message..." maxlength="1000" tabindex="3"></textarea> <label for="message">Your Message</label>
</div>
<div>
<input type="submit" name="submit" value="Send" tabindex="4">
</div>
</form>
PHP:
// Check for form submission:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
/* The function takes one argument: a string.
* The function returns a clean version of the string.
* The clean version may be either an empty string or
* just the removal of all newline characters.
*/
function spam_scrubber($value) {
// List of very bad values:
$very_bad = array('to:', 'cc:', 'bcc:', 'content-type:', 'mime-version:', 'multipart-mixed:', 'content-transfer-encoding:');
// If any of the very bad strings are in
// the submitted value, return an empty string:
foreach ($very_bad as $v) {
if (stripos($value, $v) !== false) return '';
}
// Replace any newline characters with spaces:
$value = str_replace(array( "\r", "\n", "%0a", "%0d"), ' ', $value);
// Return the value:
return trim($value);
} // End of spam_scrubber() function.
// Clean the form data:
$scrubbed = array_map('spam_scrubber', $_POST);
// Minimal form validation:
if (!empty($scrubbed['name']) && !empty($scrubbed['email']) && !empty($scrubbed['comments']) ) {
// Create the body:
$body = "Name: {$scrubbed['name']}\n\nComments: {$scrubbed['comments']}";
// Send the email:
mail('example@email.com', 'Contact Form Submission', $body, "From: {$scrubbed['email']}");
// Print a message:
echo '<p><em>Thank you.</em></p>';
// Clear $scrubbed (so that the form's not sticky):
$scrubbed = array();
} else {
echo '<p style="font-weight: bold; color: #C00">Please fill out the form completely.</p>';
}
} // End of main isset() IF
我的php位于一个名为contact.php的文件中,我的html位于一个名为contact.html的文件中。
如果表单不完整,我想显示带有类错误的div。
我尝试了另一种方法,将此代码添加到html中,替换当前的错误div:
<span class="error">* <?php include 'contact.php'; echo $Err;?></span>
这到php文件:
$Err = "Please fill out all fields";
它仍然没有奏效。好像它不能从html文件中读取php文件中的代码,即使我包含它了吗?
另一件事是,一旦提交表单,我将如何将用户发送到另一个html页面?是通过替换
来完成的// Print a message:
echo '<p><em>Thank you.</em></p>';
与
header('Location: nextpage.html');
感谢您提前提供任何帮助。
答案 0 :(得分:1)
您可以考虑使用javascript解决方案。首先将div设为display:none;
,然后你可以使用:
document.getElementsByClassName('error')[0].style.display = "block";
当你想让它可见时。还有JQuery解决方案:(可能不正确,朋友们帮助PLZ!)
$('.error')[0].hide();
$('.error')[0].show();
您还可以使用http://www.w3schools.com/jquery/jquery_hide_show.asp的说明设置速度/淡入淡出 同样对于重定向,是的,你可以替换它们。或者您也可以使用JS解决方案。取代
echo '<p><em>Thank you.</em></p>';
使用:
echo '<p><em>Thank you.</em></p><script>location.replace("WHERE YOU WANNA GO!");</script>';
希望这有帮助。
答案 1 :(得分:1)
首先,您需要了解服务器如何处理PHP和HTML文件。服务器配置告诉它如何解释文件;一些文件按原样提供,一些文件传递给处理程序,作为脚本执行它们等。在您的服务器配置中,可能会有一行指示服务器处理扩展名为.php
的文件作为使用PHP执行的脚本。不需要执行HTML文件;它们被发送到客户端,客户端的浏览器解释html,css和js信息以呈现网页。因为HTML文件不作为脚本执行,如果你把代码(perl,php,java,c ++,smalltalk ......你想要的任何东西!)放在文件中,它将不由服务器执行,除非浏览器具有该语言的解释器,否则它将不会被浏览器执行,就像HTML,CSS和javascript一样。这就是为什么HTML文件中的PHP没有被执行的原因:除非您指示您的Web服务器将该文件解释为PHP脚本,否则它会将其视为标准的html文件。
在您的情况下,如果表单验证失败,您希望向用户显示错误消息。您还希望将您的代码和HTML文件分开(这是一个很好的习惯,恕我直言!)。这提出了一个问题,因为您确实需要更改HTML页面的内容以包含错误消息,但HTML页面基本上是静态的。您可以将用户重定向到具有相同内容的另一个页面,但页面顶部会显示一条错误消息,但这是一个相当丑陋的解决方案。您还可以使用javascript进行表单验证,如果表单提交无效,则向用户显示错误消息,但关闭JS的任何人都可以绕过该检查。
针对您的问题,最灵活的解决方案是使用模板系统,该系统允许您自定义页面内容,但保持PHP代码不受HTML影响。那里有许多PHP模板系统;谷歌会为你充足。模板包含可以在PHP脚本中设置并在模板中使用的变量;模板引擎然后解析模板,插入变量,并输出结果。
在您的情况下,您可以设置表单以在表单顶部显示错误消息,并可能突出显示未正确填充的字段。
以下是使用Smarty的示例,{{3}}是一种流行的,灵活的模板系统:
include('Smarty.class.php');
// create object
$smarty = new Smarty;
if (! empty($_POST)) {
// validate your form input
...
// Minimal form validation:
if (!empty($scrubbed['name']) && !empty($scrubbed['email']) && !empty($scrubbed['comments']) ) {
// send your email
// redirect user to a thank you page
header("Location: thankyou.html");
}
else {
// sets a variable $error in the template
$smarty->assign('error', 'Please fill out the form completely');
}
}
// display it
$smarty->display('form.tpl');
模板文件form.tpl
应包含您的标准表单以及出现错误时要添加的任何部分。以下是示例form.tpl
文件的摘录:
<h2>Contact me!</h2>
{if isset($error)}
<div class="error">
<p>
{$error}
</p>
</div>
{/if}
<form id="contactForm" action="contact.php" method="post">
(etc.)
如果contact.php检测到错误,则输出:
<h2>Contact me!</h2>
<div class="error">
<p>
Please fill out the form completely
</p>
</p>
<form id="contactForm" action="contact.php" method="post">
(etc.)
如果没有错误则输出(即表格尚未填写):
<h2>Contact me!</h2>
<form id="contactForm" action="contact.php" method="post">
(etc.)
这是模板可以执行的一个非常基本的示例。我希望这已经澄清了一些事情,让你一瞥HTML模板的精彩世界。
答案 2 :(得分:0)
首先。您需要将contact.html转换为.php文件以便使用php代码 考虑命名你的contact.php&gt; contact.script.php,并将contact.html重命名为contact.php 然后,在您的PHP代码中,您可以执行以下操作:
<强> contact.script.php 强>
if((!empty($scrubbed['name']) && !empty($scrubbed['email']) && !empty($scrubbed['comments']) ) {
...
$message = 'Thank you.';
} else {
# put your error message into the same variable
$message = 'Please fill out the form completely.';
}
<强> contact.php:强>
/* at the very beginning of your code */
include 'path/to/contact.script.php';
/* Then, wherever you would like to show the message just add this at the end: */
<?=$message?> // this will echo out the message (same as <?php echo $message; ?> - as in:
<div class="error"><p><?=$message?></p></div>
答案 3 :(得分:0)
<input type="text" value="<?php echo $ta;?>">
<div id="content" style="display:<?php echo $ta==2 ? 'block':'none' ?>"></div>