我有一个简单的javascript函数来验证提交时的表单(Joomla中的RSform!Pro)。问题是当机器人禁用javascript时,机器人能够在没有运行验证脚本的情况下提交表单。我能想到防止这种情况发生的唯一选择是使用php而不是javascript。有人可以帮助我进行此转换或提供替代方案吗?
function validateEntreeCount(theForm)
{
if (parseInt(document.getElementById('Attendees').value) !=
parseInt(document.getElementById('Beef').value) +
parseInt(document.getElementById('Chicken').value) +
parseInt(document.getElementById('Vegetarian').value))
{
alert('The total amount of attendees does not match the total amount of entrees selected');
return false;
}
else
{
return true;
}
}
感谢大家的投入!
答案 0 :(得分:2)
为了让转换工作,我将不得不假设一些事情,所以让我用一般假设向你展示转换:
我假设的HTML页面,包含一个包含几种输入类型的表单,与会者总数,一个数字,表示有多少订单类型的晚餐和提交按钮。请注意,表单的方法是帖子,操作是yourfile.php
。
<form name="my_form" method="post" action="yourfile.php">
<input type="text" value="Attendees"></input>
<input type="text" value="Beef"></input>
<input type="text" value="Chicken"></input>
<input type="text" value="Vegetarian"></input>
<input type="submit" value="submit"></input>
</form>
将检索表单值的PHP页面:
<?php
function validateEntreeCount() {
// used for validation purposes
if (!isset($_POST['submit']) {
// form was submitted without data, silly bots.
echo "We've encountered a problem, please re-enter your data";
// possible redirect back to the page.
}
// convert the data into integers.
$total = intval($_POST["Attendees"]);
$beef = intval($_POST["Beef"]);
$chicken = intval($_POST["Chicken"]);
$veg = intval($_POST["Vegetarian"]);
// if all is well, everything should be equal
if ($total == ($beef + $chicken + $veg)) {
return true;
}
// something went wrong
echo "The total amount of attendees does not match the total amount of entrees selected";
return false;
}
?>
这还没有经过测试或编译,只是演示了比较函数在PHP中的样子。有许多工作要做,特别是验证输入和错误检查。
希望这可以帮助你,或指出你正确的方向。
答案 1 :(得分:1)
我想说在客户端(使用javascript)和服务器端(使用您使用的任何内容)进行验证总是一个好主意。
这样,您确保用户在出错时不必等待页面重新加载,但您可以确定您的应用程序没有无效输入,因为您的用户没有启用javascript,恶意与否(许多用户默认不启用javascript)。
我想这里的流行语是优雅的降级。我的意思是应该可以在没有javascript的情况下使用您的网站,即使没有像您拥有它那样的良好体验。而形式是没有必要的,特别是因为在你真正使用数据之前清理数据的重要性。
答案 2 :(得分:1)
你可以这样:
function validateEntreeCount()
{
if (intval($_POST['Attendees']) !=
intval($_POST['Beef']) .
intval($_POST['Chicken']) .
intval($_POST['Vegetarian']))
{
print('The total amount of attendees does not match the total amount of entrees selected');
// exit/redirect/return false or whatever
}
else
{
return true;
}
}
确保POST var中的值即将到来。如果你要比较数字,那么你必须指定+而不是如上所示的点。
答案 3 :(得分:0)
我现在无法帮助转换,但是为了处理机器人,您还可以隐藏用户的提交按钮并使用javascript将其包含在页面中。
答案 4 :(得分:0)
您必须在代码中找到表单提交的位置。但它不是它提交的元素的id,而是名称
在php中你正在寻找$ _GET ['element of element']和$ _POST ['post of element in name request']
如果有字符串结果,可以使用intval('')转换为int