Конвертировать простой скрипт Javascript в PHP - PullRequest
2 голосов
/ 31 января 2010

У меня есть простая функция javascript для проверки формы (RSform! Pro в Joomla) при отправке. Проблема в том, что боты могут отправлять форму без запуска сценария проверки, если у них отключен 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 ]

2 голосов
/ 31 января 2010

Чтобы преобразование заработало, мне нужно принять несколько вещей, поэтому позвольте мне показать вам преобразование с моими общими предположениями:

Моя предполагаемая HTML-страница, содержащая форму с несколькими типами ввода, общее количество посетителей, число, указывающее, сколько заказов какого типа обеда, и кнопка отправки. Обратите внимание, что метод формы - это post , а действие - 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 голос
/ 31 января 2010

Вы можете пойти примерно так:

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 поступают туда. а также, если вы сравниваете числа, вам придется указать + вместо точки, как показано выше.

1 голос
/ 31 января 2010

Я бы сказал, что всегда полезно проводить валидацию как на стороне клиента (с помощью javascript), так и на стороне сервера (с тем, что вы используете).

Таким образом, вы убедитесь, что пользователю не нужно ждать перезагрузки страницы, если он допустил ошибку, но вы можете быть уверены, что в вашем приложении не будет неверного ввода, потому что у вашего пользователя не включен JavaScript, злонамеренно или нет (многие пользователи не оставляют JavaScript по умолчанию).

Я полагаю, что модным словом здесь является изящная деградация. Я имею в виду, что должен быть возможность использовать ваш веб-сайт без использования JavaScript, даже если у вас нет такого хорошего опыта, как если бы он был у вас. И формы не представляют для этого ничего особенного, особенно из-за важности очистки данных, прежде чем вы действительно сможете их использовать.

0 голосов
/ 31 января 2010

Вам нужно будет найти, где в коде отправляется форма. Но передается не идентификатор элемента, а имя.
В php вы ищете $ _GET ['name of element'] и $ _POST ['name of element in post request']
Когда у вас есть строковый результат, вы можете использовать intval ('') для преобразования в int

0 голосов
/ 31 января 2010

Я не могу помочь с конвертацией прямо сейчас, но для работы с ботами вы также можете скрыть кнопку отправки от пользователей и использовать javascript, чтобы включить ее на страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...