繁体   English   中英

如果用户在字段中输入格式错误的条目,如何防止发送表单? 即。 数字字段中的字母

[英]How can I prevent my form being sent if a user writes misformated entries in my fields? ie. Letters in number fields

怎么了:

当我在两个文本框中都写两个值时,页面没有按应有的方式显示祝贺消息。 当我只写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>

validateForm函数中的$ validForm变量似乎有问题。

我认为您假设对函数内部的$ validForm所做的更改会在函数外部更改相同的变量名称。 因为您尚未将其设置为全局变量,所以不会为您执行此操作。

您需要查看PHP中的Variable作用域。

http://php.net/manual/zh/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;
}

如果($ formValid)....

问题是,您在检查$validForm的值之后正在调用validateForm() 当您在body标签后立即检查$validForm ,它总是会为false。 当它经过第二个字段时,它将被设置为true(假设表单是有效的),但是此时您已经在if语句的第一分支中,因此“祝贺”消息将永远不会显示。

要解决此问题,只需将验证调用移至,然后再检查$validForm的值:

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

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

等等。

2件事:

1)我不认为您的$ validForm变量在函数validateForm的范围内。 似乎您需要在函数global $ validate表单中对其进行全局调用。

2)将其设置为false后,调用validateForm。 您需要先进行检查,然后再进行有条件的检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM