将简单的Javascript脚本转换为PHP

时间:2010-01-31 05:56:28

标签: php javascript joomla

我有一个简单的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; 
     }
    }

感谢大家的投入!

5 个答案:

答案 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