2010-01-31 4 views
2

제출할 때 폼 (Joomla에서 RSform! Pro)의 유효성을 검사하는 간단한 javascript 함수가 있습니다. 문제는 봇이 javascript가 비활성화 된 상태에서 유효성 검사 스크립트를 실행하지 않고 양식을 제출할 수 있다는 것입니다. 이 사건을 방지하기 위해 내가 생각할 수있는 유일한 옵션은 자바 스크립트 대신 PHP를 사용하는 것입니다. 누군가가이 전환을 도와 주거나 대안을 제시 할 수 있습니까?간단한 자바 스크립트를 PHP로 변환

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; 
    } 
    } 

모두에게 감사드립니다.

+2

서버 측에서이 사실을 확인하고 싶습니다.보안을 위해 JavaScript에 절대로 의존하지 마십시오. 만약 당신이 고객에게 그런 통제권을 넘겨 주면, 당신은 단지 문제를 간청하고있는 것입니다. – avpx

답변

2

, 총 참석자 수, 어떤 유형의 저녁 식사 주문 수 및 제출 버튼을 나타내는 숫자. 양식의 메서드는 이고 작업은 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에서 어떻게 보이는지 보여, 컴파일되지 않은
<?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; 
    } 
?> 

. 특히 입력 및 오류 검사의 유효성을 확인하는 작업이 많이 있습니다.

호프가 도움이되었거나 올바른 방향으로 안내해 줄 수 있기를 바랍니다.

+0

$ 총 비교는 2 중 등가 (==) 여야하며, 그렇지 않으면 항상 true를 반환합니다. – Matthew

+0

@konforce, 내 대답을 편집 해 주셔서 감사합니다. –

0

지금은 전환에 도움이되지 않지만 봇을 다루기 위해 사용자의 제출 버튼을 숨기고 자바 스크립트를 사용하여 페이지에 포함시킬 수도 있습니다.

0

코드에서 양식이 제출 될 곳을 찾아야합니다. 그러나 제출 된 요소의 ID가 아니라 이름입니다.
$ _GET [ 'name of element'] 및 $ _POST [ 'post request에있는 요소의 이름']
문자열 결과를 얻었 으면 intval ('')을 사용하여 다음과 같이 변환 할 수 있습니다. int

1

저는 항상 클라이언트 측 (자바 스크립트 사용)과 서버 측 (사용하는 경우 모두)에서 유효성을 검사하는 것이 좋습니다.

이렇게하면 사용자가 실수로 페이지를 새로 고칠 때까지 기다리지 않아도되지만 사용자가 자바 스크립트를 사용하지 않아서 앱에 잘못된 입력이 없음을 확신 할 수 있습니다 , 악의적이든 아니든 (많은 사용자는 기본적으로 자바 스크립트를 사용하지 않습니다).

여기에 유행어는 정상적인 저하라고 생각합니다. 내 말은, 자바 스크립트없이 웹 사이트를 사용하는 것이 가능해야한다는 것입니다. 그리고 양식을 사용하면 실제로 데이터를 사용하기 전에 데이터를 정리해야하는 중요한 이유가 있습니다.

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의 값이오고 있는지 확인합니다. 또한 숫자를 비교하는 경우 위와 같이 도트 대신 +를 지정해야합니다. 몇 가지 입력 유형과 양식을 포함,

내 가정 HTML 페이지 : 변환이 내가 몇 가지를 생각해야 할 것이다, 일, 그래서 내 일반 가정으로 당신에게 변환을 보여주게하기 위해서는