使用PHP进行表单验证有问题

时间:2012-12-07 22:38:53

标签: php forms

我有一个相对简单的声音问题,希望能得到一个简单的答案。我目前正在开发一个向下滚动的网站;一切都在一页上,你知道那一页。我的“联系”部分位于页面的最底部,我当然正在使用PHP进行表单验证。验证部分有效,我没有遇到任何麻烦。但是,如果验证失败,浏览器会将我一直带回页面顶部;由于显而易见的原因,这很不方便。

我知道'header()'函数,如果发生错误,我可以用它来保持页面底部。例如,在DOCTYPE之前的HTML页面顶部,我可以写:

if ($errors) {
header(Location: 'somelocation.php#contact');
}

这样可行,但由于某种原因,它会阻止我在html中嵌入的PHP工作。如果发生一些错误,我想在页面上使用PHP显示它们:

<h2>Contact</h2>
<?php if($errors) { ?>
<p class="warning">Please fix the errors</p>
<?php } ?>

'请修复错误'不会出现。但是,如果我从页面中删除标题功能,它确实会出现,所以我知道问题是相关的。所以基本上,如果我删除header()函数,页面会回到顶部,错误显示;如果我保留header()函数,页面会正确地保持原样,但不会显示错误。

或者,也可以询问这个问题,当表格被正确验证时会发生什么,调用'header'函数,我想留在页面底部并显示一些HTML'谢谢,您的表单已提交'? (我不想去'感谢'页面或任何东西,只是留在同一个地方并在页面上给'谢谢')我认为我遇到了同样的问题。有解决方案吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

在标头中指定位置将导致浏览器重定向到该URI。在将任何输出发送到浏览器之前调用此方法。

重置页面时$errors == false,因此不显示段落。

听起来你需要在这里集成AJAX,或者服务器端和客户端代码的混合。

答案 1 :(得分:1)

验证表单的一种非常简单有效的方法是使用jquery,这是一个完美的例子:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
 <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script type="text/javascript" src="http://jzaefferer.github.com/jquery-validation/jquery.validate.js"></script>
 <style type="text/css">
* { font-family: Verdana; font-size: 96%; }
label { width: 10em; float: left; }
label.error { float: none; color: red; padding-left: .5em; vertical-align: top; }
p { clear: both; }
.submit { margin-left: 12em; }
 em { font-weight: bold; padding-right: 1em; vertical-align: top; }
 </style>
 <script>
  $(document).ready(function(){
    $("#commentForm").validate();
   });
   </script>

 </head>
 <body>


 <form class="cmxform" id="commentForm" method="get" action="">
 <fieldset>
  <legend>A simple comment form with submit validation and default messages</legend>
  <p>
 <label for="cname">Name</label>
 <em>*</em><input id="cname" name="name" size="25" class="required" minlength="2" />
  </p>
  <p>
 <label for="cemail">E-Mail</label>
 <em>*</em><input id="cemail" name="email" size="25"  class="required email" />
  </p>
  <p>
 <label for="curl">URL</label>
 <em>  </em><input id="curl" name="url" size="25"  class="url" value="" />
     </p>
   <p>
 <label for="ccomment">Your comment</label>
 <em>*</em><textarea id="ccomment" name="comment" cols="22"  class="required"></textarea>
  </p>
   <p>
 <input class="submit" type="submit" value="Submit"/>
  </p>
  </fieldset>
  </form>
 </body>
 </html>

快乐编码。!!!