Как я могу предотвратить отправку моей формы, если пользователь вводит в мои поля неверные записи?то есть.Буквы в числовых полях - PullRequest
1 голос
/ 19 февраля 2010

Что происходит:

Когда я пишу два значения в обоих текстовых полях, на странице не появляется сообщение Поздравления, как должно.Когда я пишу только 1 значение, происходит правильная вещь, которая не показывает сообщение с поздравлением.

Что должно произойти:

Еслипользователь записывает только 1 значение, форма должна отображаться с ранее заполненными полями.Если пользователь записывает значения во все поля, должны появиться поздравления.

Правка - наконец-то все заработало, если другие новички захотят проверить это:

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

1 голос
/ 19 февраля 2010

Похоже, что проблема с переменной $ validForm в функции validateForm.

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

Вам нужно взглянуть на область действия переменной в PHP.

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

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

например, для этой функции просто вернуть переменную:

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

Это решит проблему в функции

чтобы получить переменную, выполните:

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

if ($ formValid) ....

0 голосов
/ 19 февраля 2010

2 вещи:

1) Я не думаю, что ваша переменная $ validForm находится в области видимости с функцией validateForm.Похоже, вам нужно будет вызывать global внутри функции global $ validate.

2) вы вызываете validateForm после того, как вы установили его в falseВы должны сделать проверки, прежде чем делать условные.

0 голосов
/ 19 февраля 2010

Проблема в том, что вы звоните validateForm() после проверки значения $validForm.Когда вы проверяете $validForm сразу после тега body, оно всегда будет ложным.Он будет установлен в значение true (при условии, что форма действительна) к тому времени, как он пройдет через второе поле, но вы уже находитесь в первой ветви оператора if на этом этапе, поэтому сообщение "поздравления" будетникогда не будет отображаться.

Чтобы исправить, просто переместите вызовы для проверки, прежде чем проверять значение $validForm:

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

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

и т. д.

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