我想知道实际表格验证的最佳方法是什么。
JavaScript做了一个非常好的jon,但它不是一个可靠的验证的基础,因为它可以被操纵甚至禁用。
如果您使用PHP检查数据并在发生错误时重新填充表单,则表单有几个问题。
GET
或POST
提交数据。使用POST
,再次出现如上所述的F5问题。对于GET
,在内部使用&
传输值时会出现问题(PHP会在符号后面猜出另一个参数)另一个问题是重新填充表单本身:这样的代码:
echo "<input type='text' value='".$val."' />";
如果变量$val
包含包含撇号的值,则会出现问题,这会生成无效的HTML。
正如您所看到的,表单验证方案中存在很多失败的可能性。如上所述,处理表单验证的最可靠方法是什么?
答案 0 :(得分:2)
服务器端语言是验证表单的唯一方法。您可以将表单数据存储在会话或cookie中以用于相同目的。完成验证后,您可以清除它们。如果您的数据中的引号有问题,那么您可以使用PHP内置函数addslashes()
和stripslashes()
来避免它们。
答案 1 :(得分:1)
你的三个要点,一个接一个:
&
不应该造成问题在恢复中:重定向以避开确认框,如果您需要存储一些提交的数据服务器端并将&符号转换为其html实体并且您已全部设置,请使用会话。转换&
可以这样实现:
var tmpDiv = document.createElement('div');
tmpDiv.innerText = '&';
var entity = tmpDiv.innerHTML;//returns &
答案 2 :(得分:0)
我有一些解决方案。
您需要将用户重定向到同一页面并松开帖子数据。
header("Location: samefile.php?success=true");//or ?errors[]=blabla
exit();
if(isset($_GET['success']) && $_GET['success'] == true){
//handle true
}else if(/* here you can ask about errors or what ever */){
}
通过这种方式,您可以避免在刷新时重新发送数据。
使用$ _SESSION存储数据而不是数据库。
如果我错了,请纠正我。
答案 3 :(得分:-2)
我正在使用jquery表单验证器,这非常有用。
你头上的标签:
<script language="javascript" type="text/javascript" src="/media/js/jquery-latest.js"></script>
<script language="javascript" type="text/javascript" src="/media/js/jquery.validate.min.js"></script>
<script>
$(document).ready(function(){
$( "#commentform" ).validate();
});
</script>
然后使用这样的表格:
<form id="commentform" action="/index/addcomment" method="POST">
<p>
<input type="text" name="Name" id="name" value="" size="22" class="required" minlength="3">
<label for="name"><em>*</em><?= _("Name") ?></label>
</p>
<p>
<input type="text" name="EMail" id="email" value="" size="22" class="required email">
<label for="email"><em>*</em><?= _("EMail") ?> <?= _("(will not be published)") ?></label>
</p>
<p>
<input type="text" name="Url" id="url" value="" size="22">
<label for="url"><?= _("Website") ?></label>
</p>
<p>
<textarea name="Content" id="comment" cols="100%" rows="10" class="required" minlength="5"></textarea>
</p>
<p>
<input name="submit" type="submit" id="submit" tabindex="5" value="Submit Comment">
<input type="hidden" name="BlogId" value="<?= $this->model->BlogId ?>" />
</p>
</form>