Nasıl bir kullanıcı benim alanlarında misformated girdileri yazar eğer benim form gönderilecektir önleyebilirsiniz?

3 Cevap php

What happens:

Ben iki metin kutularına iki değer yazarken, sayfa Tebrikler mesajı gerektiği gibi görünmüyor. Ben sadece 1 değerini yazarken, doğru bir şey tebrikler mesajı göstermek değil, hangi olur.

What should happen:

Bir kullanıcı sadece 1 değer yazar, form hala orada önceden doldurulacak alanlar ile görünmelidir. Bir kullanıcı tüm alanları değerleri yazar, Tebrikler görünmelidir.

Edit - Finally got it working, in case any other newbies want to check it out:

<html>
<head>
    <?php
    $validForm = false;

    function getValue($field){
        if(isset($_GET[$field])){
            return htmlspecialchars(trim($_GET[$field]));
        }
        else{
            return "";
        }
    }

    function validateForm($value,$type){
        $field = $_GET[$value];

        //magic goes here.
        switch ($type){
            case 'required':
                if (!isset($field) || ($field=="")){
                    global $validForm;
                    $validForm = false;
                }
                else{
                    global $validForm;
                    $validForm = true;
                }
                break;
            case 'email':
                $regexp = "/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z-][0-9a-zA-Z-]+\.)+[a-zA-Z](2,6)$/";
                if(isset($field) && preg_match($regexp,$field)){
                    global $validForm;
                    $validForm = true;
                }
                else {
                    global $validForm;
                    $validForm = false;
                }
                break;
            case 'number':
                if(!isset($field) || ($field=="") || (!is_numeric($field))){
                    global $validForm;
                    $validForm = false;
                }
                else{
                    global $validForm;
                    $validForm = true;
                }
                break;
            default:
                die('Validacion desconocida.');
        }         
    }        
    ?>
</head>

<body>
    <?php validateForm('name','required'); ?>
    <?php validateForm('lastname','required'); ?>

    <?php if($validForm == false){ ?>
    <form action="class2.php" method="get">
        <dl>
            <dt>First Name:</dt>
            <dd><input type="text" value="<?php echo htmlspecialchars(getValue('name')) ?>" name="name" />                
            </dd>                

            <dt>Last Name:</dt>
            <dd><input type="text" value="<?php echo htmlspecialchars(getValue('lastname')) ?>" name="lastname" />                
            </dd>

            <br />                
            <dt>
                <input type="submit" value="enviar" name="validate"/>
            </dt>                
        </dl>
    </form>
    <?php
    } else {
    ?>

    <h1>Congratulations, you succesfully filled out the form!</h1>

    <?php }
    ?>
</body>

3 Cevap

validateForm fonksiyonunda $ validForm değişkeni ile bir sorun var görünüyor.

Ben fonksiyon içinde $ validForm için varsayarak değişiklikler, işlev dışındaki aynı değişken adını değiştirin düşünüyorum. Eğer global bir değişken olarak ayarlamak değil çünkü sizin için bu yapmayacağım.

PHP Değişken kapsamı bakmak gerekir.

http://php.net/manual/en/language.variables.scope.php

Bu, bu değişkeni ele nasıl açıklayacağız. Eğer fonksiyonu değerini dönebilirsiniz ..

Bu fonksiyon, sadece değişken döndürmek için ıla örneğin:

    function validateField($value,$type){


    //magic goes here.
    switch ($type){
        case 'required':
            if (!isset($value) || ($value== "")){
                $valid = false;
            }
            else{
                $valid = true;
            }
            break;
        case 'email':
            $regexp = "/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z-][0-9a-zA-Z-]+\.)+[a-zA-Z](2,6)$/";
            if(isset($value) && preg_match($regexp,$variable)){
                $valid = true;
            }
            else {
                $valid = false;
            }
            break;
        case 'number':
            if(!isset($value) || ($value=="") || (!is_numeric($value))){
                $valid = false;
            }
            else{
                $valid = true;
            }
            break;
        default:
            die('Validacion desconocida.');
    } 
    return $valid;
}        

Bu işlevi sorunu çözecek

değişkeni almak için dışarı yapın:

$formValid = true;
if (!validateField($_GET['name'],'required'))
{
    $formValid = false;
}
if (!validateField($_GET['lastname'],'required'))
{
    $formValid = false;
}

if ($ formValid) ....

Sorun, $validForm değerini kontrol sonra validateForm() aradığınız olmasıdır. Eğer doğru vücut etiketinden sonra $validForm kontrol ettiğimiz zaman, her zaman yanlış olacak. Bu ikinci alana geçmiş aşağı alır zaman (Form geçerli olduğunu varsayarak) ayarlamak true alacak, ancak bu noktada if deyimi ilk dalı zaten, bu nedenle " tebrikler "mesajı asla gösterilmeyecektir.

, Düzeltmek sadece doğrulama size değerini kontrol önce çağırır hareket $validForm için:

<body>
     <?php
    validateForm($_GET['name'],'required');
    validateForm($_GET['lastname'],'required');

    if($validForm == false){ ?>
    <form>

Ve böylece.

2 şey:

1) I don't think your $validForm variable is in scope with the function validateForm. It seems that you would need to call global on it inside the function global $validate form.

False ayarladıktan sonra 2) validateForm diyoruz. Eğer koşullu yapmadan önce kontroller yapmak gerekir.