PHP jQuery değerleri geçen

5 Cevap php

İşte durum:

Ben benim formları doğrulamak için jquery.validate.js kullanıyorum, ama ben bir sunucu tarafı doğrulama katman eklemeniz gerekir. jQuery Validate ne yapması gerektiğini belirlemek için form elemanları içinde sınıf adlarını kullanır - Ben sunucu tarafında aynı doğrulamaları gerçekleştirmek böylece PHP içine bu sınıf adlarını almak istiyoruz.

Ben böyle bir şey yapmak için umuyorum:

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

Soru, ben bu yapabilirim? JQuery / w eleman sınıf adlarını almak ve PHP onları geçmek miyim?

5 Cevap

JQuery formu ile birlikte sınıf isimlerini göndermek için alabilir - ANCAK bu ciddi güvenlik sorunlarına yol açmaktadır. Sunucuya gönderilen her şey gerçekten kullanıcıların tarayıcıları tarafından yapıldığı gibi gören, kullanıcıların daha sonra doğrulama kurallarını değiştirmek için yeteneğine sahip olacak ve bu bypass gibi onlara, ve burada tüm amaç işe yaramaz hale getirecektir. Bunun yerine aşağıdaki öneririz.

Bir form elemanının adı almak ve uygun sınıf adları dönmek için php bir işlevi yapmak. Form için her bir form elemanı oluştururken, (ve sonra jQuery doğrulama uygulayarak) sınıf adlarını almak için bu işlevini çağırın. Eğer PHP kodu içinde formu okuduğumda - sınıf adlarını almak için aynı işlevi kullanın ve sonra da sunucu tarafı php kodu uygulamak için hangi doğrulama kuralları biliyorum.

Bu mantıklı umuyoruz.

Istemci (tarayıcı) asla güvenme!

Sen istemci üzerinde bir şey yayınlanan bilgilerin geçerliliğini sınamak için nasıl sunucuya dikte izin asla.

Bu çok kötü bir fikir.

istemci tarafı:

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

Bu yardımcı olacaktır ... Bu basit bir yolu var ve bunu daha resmiyet yapabilirim emin umuyoruz.

serializeArray JSON form verilerinizi dönüştürmek olacaktır:

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

Genellikle oradan alabilir sunucuya tüm json dize gönderebilirsiniz.

Yukarıda belirtildiği gibi, PHP değerleri geçirmek için AJAX ve JSON kullanabilirsiniz. (PHP hala JS bağlıdır beri) Bu, ancak, normal JS doğrulaması daha güvenli doğrulama vermez

Eğer bu yöntemi kullanmayı tercih ederseniz, burada Evgeniy Savichev tarafından daha önce sağlanan komut bazı iyileştirmeler

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

Ancak daha iyi bir çözüm otomatik olarak oluşturmak ve form öğeleri doğrulamak için olduğunu. Zend Framework bunu yapmak için büyük bir sınıfı vardır. Ben bir şey sizin kendi el yazısı yazmaya karar durumda bakmak nasıl basitleştirilmiş bir sürümünü dahil ettim.

Ben bu sizin için bazı yardımcı olabilir umuyoruz

  • 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
        }
    }
    ?>