Передача значений из jQuery в PHP - PullRequest
1 голос
/ 23 мая 2009

Вот ситуация:

Я использую jquery.validate.js для проверки моих форм, но мне нужно добавить слой проверки на стороне сервера. jQuery Validate использует имена классов внутри элементов формы, чтобы определить, что он должен делать - я хочу извлечь эти имена классов в PHP, чтобы я мог выполнять те же проверки на стороне сервера.

Я надеюсь сделать что-то вроде этого:

foreach($_POST as $key=>$value) {
     $class=array(...// get this #key element class name list with jQuery
     $error=...// based on the class names, perform specific PHP validations
     if($error=="")
         return true;
     else
         return false;
}

Вопрос в том, могу ли я это сделать? Могу ли я получить имена классов элементов с помощью jQuery и передать их в PHP?

Ответы [ 5 ]

2 голосов
/ 24 мая 2009

Никогда не доверяй клиенту (браузеру)!

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

Это очень плохая идея.

2 голосов
/ 23 мая 2009

Вы можете заставить jQuery отправлять имена классов вместе с формой - ОДНАКО это приводит к серьезным проблемам безопасности. Поскольку все, что размещено на вашем сервере, действительно выполняется вашими браузерами, ваши пользователи будут иметь возможность изменять ваши правила проверки и, таким образом, обходить их, что сделает вашу цель совершенно бесполезной. Вместо этого я бы предложил следующее.

Создайте функцию в php, чтобы взять имя элемента формы и вернуть соответствующие имена классов. При создании каждого элемента формы для формы, вызовите эту функцию, чтобы получить имена классов (и затем примените проверку jQuery). Когда вы читаете форму в своем PHP-коде - используйте ту же функцию для получения имен классов, а затем вы знаете, какие правила проверки применяются в вашем php-коде на стороне сервера.

Надеюсь, это имело смысл.

1 голос
/ 24 мая 2009

на стороне клиента:

function validate()
{
    var params = {
       var1: {key:$('#field1').get(0).className, value:$('#field1').get(0).value},
       var2: {key:$('#field2').get(0).className, value:$('#field2').get(0).value},    
       ...
    }
    $.post('http://host/validate_script.php', params, onValidate);
}
function onValidate(data)
{
    alert(data);
}

надеюсь, это поможет ... конечно, это простой способ, и вы можете сделать это более формализованным.

0 голосов
/ 24 мая 2009

Как уже упоминалось выше, вы можете использовать AJAX и JSON для передачи значений в PHP. Это, однако, не обеспечит более надежную проверку, чем ваша обычная проверка JS (поскольку ваш PHP все еще будет зависеть от вашего JS)

Если вы решите использовать этот метод, вот некоторые улучшения сценария, ранее предоставленные Евгением Савичевым

<script type="text/javascript">
params = {
    elementName : {
        className : $('elementId').attr('class'),
        elementValue : $('elemenetId').val()
    },
    anotherElement : {
        //etc
    }

}

$.post('http://host/validate_script.php', params, onValidate);

function onValidate(data)
{
    alert(data);
}
</script>

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

Я надеюсь, что это может вам помочь

  • Wim

    $elements = array(
        'email-field' => array('email', 'required'),
        'integer'  => array('integer')
    );
    
    if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
        $error = false;
        foreach($elements as $elementName => $validators) {
            if (array_key_exists($elementName, $_POST)) {
                foreach ($elements[$elementName] as $validator ) {
                    switch($validator) {
                        case 'email':
                            if (filter_input(FILTER_VALIDATE_EMAIL, $elementValue)) {
                                $error = true;
                            }
                            break;
                        case 'integer':
                            // etc
                            break;
                        default :
                            break;
                    }
                }
            } else {
                if ( in_array('required', $validators) ) {
                    $error = true;
                }
            }
        }
        if ( $error ) {
            // etc
        }
    }
    ?>
    
0 голосов
/ 23 мая 2009

serializeArray преобразует данные вашей формы в JSON:

var json = $('#formid').serializeArray();

Как правило, вы можете отправить всю строку JSON на сервер, который может взять ее оттуда.

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