验证表单php时出错

时间:2012-09-16 15:58:15

标签: php javascript forms validation

我是php新手并尝试使用javascript验证用户表单中的某些字段。 问题有时是有效的,有时候不行,当警报消失时,用户所填写的所有字段都是空白的。

继承我的PHP代码:

<script>
            function validar(formulario){
                if(formulario.nome.value == ''){
                    alert("O campo NOME é obrigatório.");
                    return false;
                }
                if(formulario.Email.value == ''){
                    alert("O campo EMAIL é obrigatório.");
                    return false;
                }
                if(formulario.Email.value.indexOf(('@' && '.'),0)== -1){
                    alert("EMAIL invalido.");
                    return false;
                }
                if(formulario.usuario.value == ''){
                    alert("O campo USUÁRIO é obrigatório.");
                    return false;
                }
                if(formulario.senha.value == ''){
                    alert("O campo SENHA é obrigatório.");
                    return false;
                }
                if(formulario.uf.value.length > 3 || formulario.uf.length <=1){
                    alert("O campo UF é inválido.");
                    return false;
                }
                if(formulario.crm.value.length < 4){
                    alert("O número do CRM é inválido.");
                    return false;
                }
                if(formulario.cidade.value.value == ''){
                    alert("O número do CRM é inválido.");
                    return false;
                }
                return true;
            }
        </script>
</head>
<body>

<form id="formulario" method="post" onsubmit="return validar(this);" action="cadastrar.php">
 <B>Nome: </B><input type=text name=nome size="50"> <br>
<BR>
<B>E-mail: </B><input type=text name=Email size="50"><br>
<BR>
<B>Nome de Usuário: </B><input type=text name=usuario size="50"><br>
<BR>
<B>Senha: </B><input type=text name=senha size="10"><br>
<BR>
<B>CRM: </B><input type=text name=crm size="5"><br>
<BR>
<B>UF: </B><input type=text name=uf size="2"><br>
<BR>
<B>Cidade: </B><input type=text name=cidade size="20"><br>
<BR>
<B>Especialidade Médica: </B><input type=text name=esp size="30"><br>
<BR>

<input type="submit" name="Submit" value="Enviar" /> <br />

</form>

3 个答案:

答案 0 :(得分:1)

尝试清理代码:

<script type="text/javascript">
    function validar(formulario) {
        var nome = formulario.nome.value;
        if (nome == '') {
            alert("O campo NOME é obrigatório.");
            return false;
        }
        var email = formulario.Email.value;
        if (email == '') {
            alert("O campo EMAIL é obrigatório.");
            return false;
        }
        if (email.indexOf('@') < 0 || email.indexOf('.') < 0) {
            alert("EMAIL invalido.");
            return false;
        }
        var usuario = formulario.usuario.value;
        if (usuario == '') {
            alert("O campo USUÁRIO é obrigatório.");
            return false;
        }
        var senha = formulario.senha.value;
        if(senha == '') {
            alert("O campo SENHA é obrigatório.");
            return false;
        }
        var uf = formulario.uf.value;
        if (uf.length > 3 || uf.length <= 1) {
            alert("O campo UF é inválido.");
            return false;
        }
        var crm = formulario.crm.value;
        if (crm.length < 4) {
            alert("O número do CRM é inválido.");
            return false;
        }
        var cidade = formulario.cidade.value;
        if (cidade == '') {
            alert("O número do CRM é inválido.");
            return false;
        }
        return true;
    }
</script>
</head>
<body>

<form id="formulario" method="post" onsubmit="return validar(this);" action="cadastrar.php">
    <b>Nome: </b><input type="text" name="nome" size="50" /><br/><br/>
    <b>E-mail: </b><input type="text" name="Email" size="50" /><br/><br/>
    <b>Nome de Usuário: </b><input type="text" name="usuario" size="50" /><br/><br/>
    <b>Senha: </b><input type="text" name="senha" size="10"><br/><br/>
    <b>CRM: </b><input type="text" name="crm" size="5"><br/><br/>
    <b>UF: </b><input type="text" name="uf" size="2"><br/><br/>
    <b>Cidade: </b><input type="text" name="cidade" size="20"/><br/><br/>
    <b>Especialidade Médica: </b><input type="text" name="esp" size="30"/><br/><br/>
    <input type="submit" name="Submit" value="Enviar" /><br />
</form>

答案 1 :(得分:0)

Sloppy coding

这样可以更好地DEMO

function validar(formulario){
  if(formulario.nome.value == ''){
    alert("O campo NOME é obrigatório.");
    return false;
  }
  if(formulario.Email.value == ''){
    alert("O campo EMAIL é obrigatório.");
    return false;
  }
  if(formulario.Email.value.indexOf(('@' && '.'),0)== -1){
    alert("EMAIL invalido.");
    return false;
  }
  if(formulario.usuario.value == ''){
    alert("O campo USUÁRIO é obrigatório.");
    return false;
  }
  if(formulario.senha.value == ''){
    alert("O campo SENHA é obrigatório.");
    return false;
  }
  if(formulario.crm.value.length < 4){
    alert("O número do CRM é inválido.");
    return false;
  }
  if(formulario.uf.value.length > 3 || formulario.uf.length <=1){
    alert("O campo UF é inválido.");
    return false;
  }
  if(formulario.cidade.value == ''){
    alert("O número do cidade é inválido.");
    return false;
  }
  return true;
}​

我还建议添加

function isEmail(str) { // http://stackoverflow.com/a/4964763/295783
  return /(.+)@(.+){2,}\.(.+){2,}/.test(str);
}

并且

if(!isEmail(formulario.Email.value)){
  alert("EMAIL invalido.");
  return false;
}

答案 2 :(得分:0)

重写脚本以便轻松扩展

function validar(formulario){
    var checkEmptyString = function(x){
            return x === undefined || x === null || x === '';
        },
        minLen = function(s, i){
            return s.length >= i;
        },
        maxLen = function(s, i){
            return s.length <= i;
        },
        betweenLen = function(s, min, max){
            return s.length >= min && s.length <= max;
        },
        containsChars = function(s, chars){
            var i = 0;
            for( i=0; i<chars.length; i++ ) if(s.indexOf(chars[i]) === -1) return false;
            return true;
        },
        testEmpty = ['nome', 'Email', 'usuario', 'senha', 'cidade'],
        testContain = {'Email': '@.'},
        testMin = {},
        testMax = {'crm':4},
        testBetween = {'uf':[2, 3]},
        i = 0;
    for( i=0; i<testEmpty.length; i++){
        if( checkEmptyString( formulario[ testEmpty[i] ].value ) )
            return alert('O campo '+testEmpty[i].toUpperCase()+' é obrigatório.'),
                   false;
    }
    for( i in testContain ){
        if( false === containsChars( formulario[ i ].value, testContain[i] ) )
            return alert(i.toUpperCase()+' invalido.'),
                   false;
    }
    for( i in testMin ){
        if( false === minLen( formulario[ i ].value, testMin[i] ) )
            return alert('O número do '+i.toUpperCase()+' é invalido.'),
                   false;
    }
    for( i in testMax ){
        if( false === maxLen( formulario[ i ].value, testMax[i] ) )
            return alert('O número do '+i.toUpperCase()+' é invalido.'),
                   false;
    }
    for( i in testBetween ){
        if( false === betweenLen( formulario[ i ].value, testBetween[i][0], testBetween[i][1] ) )
            return alert('O campo '+i.toUpperCase()+' é invalido.'),
                   false;
    }
    return true;
}

我知道这个回应有点晚了