Estou com um probleminha no formulário abaixo. Tenho a função de validação do formulário MM_validateForm() que fiz algumas adaptações para validar CPF e CNPJ. Mas ela só está chamando a função de validar CPF. Mesmo quando o radio button está marcado em CNPJ ele está chamando a função validaCPF, sendo que quando o CNPJ estiver marcado ele deveria chamar a função validaCNPJ.
Alguém poderia me ajudar a identificar qual é o problema?
Código atualizado
<?
include("config.php");
if($acao == 'cadastra'){
$sql = "SELECT * FROM users where login='$CampoNumero'";
$resultado = mysql_query($sql)
or die ("Não foi possível realizar a consulta ao banco de dados");
if(mysql_num_rows($resultado)>0) {
while ($linha=mysql_fetch_array($resultado)) {
$CampoNumero = $linha["loginc"];
}
}
if(($CampoNumero == $loginc) && ($CampoNumero != "")){
echo"<script>alert('Este CPF/CNPJ já está cadastrado. Entre com outro CPF/CNPJ');
history.back(-1);</script>";
}else{
if (${"chkCPF"}=="on"){
$nome = $_POST['nome'];
$email = $_POST['email'];
$ddd = $_POST['ddd'];
$telefone = $_POST['telefone'];
$endereco = $_POST['endereco'];
$cep = $_POST['cep'];
$cidade = $_POST['cidade'];
$estado = $_POST['estado'];
$cpf = $_POST['CampoNumero'];
$cnpj = '';
$login = $_POST['CampoNumero'];
$senha = $_POST['senha'];
$sql = mysql_query("Insert into users values('$id', '$nome', '$email', '$ddd', '$telefone', '$endereco', '$cep', '$cidade', '$estado', '$cpf', '$cnpj', '$login', '$senha')");
if($sql){
echo "<script>alert('Usuário cadastrado com sucesso.');
location.href='index.php';
</script>
";
} else {
echo "<script>alert('Não foi possível cadastrar usuário.');
history.back(-1);
</script>
";
}
}else{
$nome = $_POST['nome'];
$email = $_POST['email'];
$ddd = $_POST['ddd'];
$telefone = $_POST['telefone'];
$endereco = $_POST['endereco'];
$cep = $_POST['cep'];
$cidade = $_POST['cidade'];
$estado = $_POST['estado'];
$cpf = '';
$cnpj = $_POST['CampoNumero'];
$login = $_POST['CampoNumero'];
$senha = $_POST['senha'];
$sql = mysql_query("Insert into users values('$id', '$nome', '$email', '$ddd', '$telefone', '$endereco', '$cep', '$cidade', '$estado', '$cpf', '$cnpj', '$login', '$senha')");
if($sql){
echo "<script>alert('Usuário cadastrado com sucesso.');
location.href='index.php';
</script>
";
} else {
echo "<script>alert('Não foi possível cadastrar usuário.');
history.back(-1);
</script>
";
}
}
}
} else {
echo"
<HTML>
<head>
<title>$nsite</title>
</head>
<form action=\"cadastrar.php?acao=cadastra\" method=\"post\" onSubmit=\"MM_validateForm('nome','','R','email','','NisEmail','ddd','','RisNum','telefone','','RisNum','endereco','','R','cep','','RisNum','cidade','','R','estado','','R','CampoNumero','','RisNum','senha','','RinRange6:8');return document.MM_returnValue\">
<table width=\"100%\" align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">
<tr><td class=\"texto\">Nome: </td><td><input class=\"campo\" name=\"nome\" type=\"text\" size=\"30\" maxlength=\"255\"></td></tr>
<tr><td class=\"texto\">E-mail: </td><td><input class=\"campo\" name=\"email\" type=\"text\" size=\"30\" maxlength=\"100\"></td></tr>
<tr><td class=\"texto\">DDD(xx) - Telefone(somente números): </td><td><input class=\"campo\" name=\"ddd\" type=\"text\" size=\"2\" maxlength=\"2\"> - <input class=\"campo\" name=\"telefone\" type=\"text\" size=\"15\" maxlength=\"8\"></td></tr>
<tr><td class=\"texto\">Endereço: </td><td><input class=\"campo\" name=\"endereco\" type=\"text\" size=\"30\"></td></tr>
<tr><td class=\"texto\">CEP (Somente números): </td><td><input class=\"campo\" name=\"cep\" type=\"text\" size=\"15\" maxlength=\"8\"></td></tr>
<tr><td class=\"texto\">Cidade: </td><td><input class=\"campo\" name=\"cidade\" type=\"text\" size=\"30\"></td></tr>
<tr><td class=\"texto\">Estado: </td><td><input class=\"campo\" name=\"estado\" type=\"text\" size=\"30\"></td></tr>
<tr><td class=\"texto\"><input type=\"radio\" name=\"chkCPF\" id=\"chkCPF\" value=\"on\" checked>CPF (pessoa física) ou</td></tr>
<tr><td class=\"texto\"><input type=\"radio\" name=\"chkCPF\" id=\"chkCPF\" value=\"off\">CNPJ (pessoa jurídica)</td></tr>
<tr><td class=\"texto\">Número (CPF/CNPJ):</td><td><input class=\"campo\" type=\"text\" name=\"CampoNumero\" id=\"CampoNumero\" size=\"18\" maxlength=\"14\"></td></tr>
<tr><td class=\"texto\">Senha:</td><td><input class=\"campo\" type=\"password\" name=\"senha\" id=\"senha\" size=\"18\" maxlength=\"8\"></td></tr>
<tr><td class=\"texto\"></td><td><input class=\"campo\" name=\"cadastrar\" type=\"submit\" value=\"Cadastrar\"></td></tr>
<tr><td class=\"texto\"></td><td><a href=java script:history.go(-1)>«« Voltar</a></td></tr>
</table>
</HTML>
";
}
?>
<HTML>
<head>
<script language="JavaScript" type="text/JavaScript">
<!--
function validaCPF(cpf) {
erro = new String;
if (cpf.length != 11) erro += "CPF deve conter 11 dígitos numéricos! \n\n";
var nonNumbers = /\D/;
if (nonNumbers.test(cpf)) erro += "A verificacao de CPF suporta apenas numeros! \n\n";
if (cpf == "00000000000" || cpf == "11111111111" || cpf == "22222222222" || cpf == "33333333333" || cpf == "44444444444" || cpf == "55555555555" || cpf == "66666666666" || cpf == "77777777777" || cpf == "88888888888" || cpf == "99999999999"){
erro += "Numero de CPF invalido!"
}
var a = [];
var b = new Number;
var c = 11;
for (i=0; i<11; i++){
a[i] = cpf.charAt(i);
if (i < 9) b += (a[i] * --c);
}
if ((x = b % 11) < 2) { a[9] = 0 } else { a[9] = 11-x }
b = 0;
c = 11;
for (y=0; y<10; y++) b += (a[y] * c--);
if ((x = b % 11) < 2) { a[10] = 0; } else { a[10] = 11-x; }
if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10])){
erro +="Digito verificador com problema!";
}
if (erro.length > 0){
return erro;
}
return true;
}
function validaCNPJ(CNPJ) {
erro = new String;
if (CNPJ.length != 14) erro += "CNPJ deve conter 14 dígitos numéricos! \n\n";
//substituir os caracteres que não são números
if(document.layers && parseInt(navigator.appVersion) == 4){
x = CNPJ.substring(0,2);
x += CNPJ.substring (3,6);
x += CNPJ.substring (7,10);
x += CNPJ.substring (11,14);
CNPJ = x;
} else {
CNPJ = CNPJ.replace (".","");
CNPJ = CNPJ.replace (".","");
CNPJ = CNPJ.replace ("-","");
CNPJ = CNPJ.replace ("/","");
}
var nonNumbers = /\D/;
if (nonNumbers.test(CNPJ)) erro += "A verificação de CNPJ suporta apenas números! \n\n";
var a = [];
var b = new Number;
var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];
for (i=0; i<12; i++){
a[i] = CNPJ.charAt(i);
b += a[i] * c[i+1];
}
if ((x = b % 11) < 2) { a[12] = 0 } else { a[12] = 11-x }
b = 0;
for (y=0; y<13; y++) {
b += (a[y] * c[y]);
}
if ((x = b % 11) < 2) { a[13] = 0; } else { a[13] = 11-x; }
if ((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13])){
erro +="Dígito verificador com problema!";
}
if (erro.length > 0){
return erro;
} else {
return true;
}
}
function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_validateForm() { //v4.0
var i,p,que,nm,test,num,min,max;
var errors='';
var args=MM_validateForm.arguments;
var aux=document.getElementById('senha').value;
var cpfcnpj=document.getElementById('CampoNumero').value;
var checkcpf=document.getElementById('chkCPF').value;
for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
if (val) { nm=val.name; if ((val=val.value)!="") {
if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
if (p<1 || p==(val.length-1)) errors+='O campo '+nm+' requer um endereço de email válido.\n';
} else if (test!='R') { num = parseFloat(val);
if (isNaN(val)) errors+='O campo '+nm+' aceita somente números.\n';
if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
min=test.substring(8,p); max=test.substring(p+1);
if (aux.length<min || max<aux.length) errors+='- '+nm+' deve conter no mínimo '+min+' dígitos e no máximo '+max+' dígitos.\n';
} } } else if (test.charAt(0) == 'R') errors += 'O campo '+nm+' deve ser preenchido.\n'; }
}
if (checkcpf == "on"){ aux = validaCPF(cpfcnpj); if (aux != true) errors += aux; } else {
aux = validaCNPJ(cpfcnpj); if (aux != true) errors += aux; }
if (errors) alert('Erro ao preencher o formulário:\n'+errors);
document.MM_returnValue = (errors == '');
}
//-->
</script>
</head>
</html>
Desculpem aí pela falta de identação!!!
EDIT: Problema resolvido! Problema estava que os botões tipo radio estavam com o mesmo ID. Aqui vai código validando corretamente todos os campos.
<?
####################################
# Protegendo páginas v. 2.5 #
# Script desenvolvido por |paes| #
####################################
include("config.php");
if($acao == 'cadastra'){
$sql = "SELECT * FROM users where login='$CampoNumero'";
$resultado = mysql_query($sql)
or die ("Não foi possível realizar a consulta ao banco de dados");
if(mysql_num_rows($resultado)>0) {
while ($linha=mysql_fetch_array($resultado)) {
$CampoNumero = $linha["loginc"];
}
}
if(($CampoNumero == $loginc) && ($CampoNumero != "")){
echo"<script>alert('Este CPF/CNPJ já está cadastrado. Entre com outro CPF/CNPJ');
history.back(-1);</script>";
}else{
if (${"chkCPF"}=="on"){
$nome = $_POST['nome'];
$email = $_POST['email'];
$ddd = $_POST['ddd'];
$telefone = $_POST['telefone'];
$endereco = $_POST['endereco'];
$cep = $_POST['cep'];
$cidade = $_POST['cidade'];
$estado = $_POST['estado'];
$cpf = $_POST['CampoNumero'];
$cnpj = '';
$login = $_POST['CampoNumero'];
$senha = $_POST['senha'];
$sql = mysql_query("Insert into users values('$id', '$nome', '$email', '$ddd', '$telefone', '$endereco', '$cep', '$cidade', '$estado', '$cpf', '$cnpj', '$login', '$senha')");
if($sql){
echo "<script>alert('Usuário cadastrado com sucesso.');
location.href='index.php';
</script>
";
} else {
echo "<script>alert('Não foi possível cadastrar usuário.');
history.back(-1);
</script>
";
}
}else{
$nome = $_POST['nome'];
$email = $_POST['email'];
$ddd = $_POST['ddd'];
$telefone = $_POST['telefone'];
$endereco = $_POST['endereco'];
$cep = $_POST['cep'];
$cidade = $_POST['cidade'];
$estado = $_POST['estado'];
$cpf = '';
$cnpj = $_POST['CampoNumero'];
$login = $_POST['CampoNumero'];
$senha = $_POST['senha'];
$sql = mysql_query("Insert into users values('$id', '$nome', '$email', '$ddd', '$telefone', '$endereco', '$cep', '$cidade', '$estado', '$cpf', '$cnpj', '$login', '$senha')");
if($sql){
echo "<script>alert('Usuário cadastrado com sucesso.');
location.href='index.php';
</script>
";
} else {
echo "<script>alert('Não foi possível cadastrar usuário.');
history.back(-1);
</script>
";
}
}
}
} else {
echo"
<HTML>
<head>
<title>$nsite</title>
</head>
<form action=\"cadastrar.php?acao=cadastra\" method=\"post\" onSubmit=\"MM_validateForm('nome','','R','email','','NisEmail','ddd','','RisNum','telefone','','RisNum','endereco','','R','cep','','RisNum','cidade','','R','estado','','R','CampoNumero','','RisNum','senha','','RinRange6:8');return document.MM_returnValue\">
<table width=\"100%\" align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">
<tr valign=\"top\"><td align=\"center\" colspan=\"2\"><h1>Cadastro de Clientes</h1></td></tr>
<tr><td colspan=\"2\"> </td></tr>
<tr><td class=\"texto\">Nome: </td><td><input class=\"campo\" name=\"nome\" type=\"text\" size=\"30\" maxlength=\"255\"></td></tr>
<tr><td class=\"texto\">E-mail: </td><td><input class=\"campo\" name=\"email\" type=\"text\" size=\"30\" maxlength=\"100\"></td></tr>
<tr><td class=\"texto\">DDD(xx) - Telefone(somente números): </td><td><input class=\"campo\" name=\"ddd\" type=\"text\" size=\"2\" maxlength=\"2\"> - <input class=\"campo\" name=\"telefone\" type=\"text\" size=\"15\" maxlength=\"8\"></td></tr>
<tr><td class=\"texto\">Endereço: </td><td><input class=\"campo\" name=\"endereco\" type=\"text\" size=\"30\"></td></tr>
<tr><td class=\"texto\">CEP (Somente números): </td><td><input class=\"campo\" name=\"cep\" type=\"text\" size=\"15\" maxlength=\"8\"></td></tr>
<tr><td class=\"texto\">Cidade: </td><td><input class=\"campo\" name=\"cidade\" type=\"text\" size=\"30\"></td></tr>
<tr><td class=\"texto\">Estado: </td><td><input class=\"campo\" name=\"estado\" type=\"text\" size=\"30\"></td></tr>
<tr><td class=\"texto\"><input type=\"radio\" name=\"chkCPF\" id=\"chkCPF\" value=\"on\" checked>CPF (pessoa física) ou</td></tr>
<tr><td class=\"texto\"><input type=\"radio\" name=\"chkCPF\" id=\"chkCNPJ\" value=\"off\">CNPJ (pessoa jurídica)</td></tr>
<tr><td class=\"texto\">Número (CPF/CNPJ):</td><td><input class=\"campo\" type=\"text\" name=\"CampoNumero\" id=\"CampoNumero\" size=\"18\" maxlength=\"14\"></td></tr>
<tr><td class=\"texto\">Senha:</td><td><input class=\"campo\" type=\"password\" name=\"senha\" id=\"senha\" size=\"18\" maxlength=\"8\"></td></tr>
<tr><td class=\"texto\"></td><td><input class=\"campo\" name=\"cadastrar\" type=\"submit\" value=\"Cadastrar\"></td></tr>
<tr><td class=\"texto\"></td><td><a href=java script:history.go(-1)>«« Voltar</a></td></tr>
</table>
</HTML>
";
}
?>
<HTML>
<head>
<script language="JavaScript" type="text/JavaScript">
<!--
function validaCPF(cpf) {
erro = new String;
if (cpf.length != 11) erro += "CPF deve conter 11 dígitos numéricos! \n";
var nonNumbers = /\D/;
if (nonNumbers.test(cpf)) erro += "A verificacao de CPF suporta apenas numeros! \n";
if (cpf == "00000000000" || cpf == "11111111111" || cpf == "22222222222" || cpf == "33333333333" || cpf == "44444444444" || cpf == "55555555555" || cpf == "66666666666" || cpf == "77777777777" || cpf == "88888888888" || cpf == "99999999999"){
erro += "Numero de CPF invalido!"
}
var a = [];
var b = new Number;
var c = 11;
for (i=0; i<11; i++){
a[i] = cpf.charAt(i);
if (i < 9) b += (a[i] * --c);
}
if ((x = b % 11) < 2) { a[9] = 0 } else { a[9] = 11-x }
b = 0;
c = 11;
for (y=0; y<10; y++) b += (a[y] * c--);
if ((x = b % 11) < 2) { a[10] = 0; } else { a[10] = 11-x; }
if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10])){
erro +="Digito verificador com problema!";
}
if (erro.length > 0){
return erro;
}
return true;
}
function validaCNPJ(CNPJ) {
erro = new String;
if (CNPJ.length != 14) erro += "CNPJ deve conter 14 dígitos numéricos! \n";
//substituir os caracteres que não são números
if(document.layers && parseInt(navigator.appVersion) == 4){
x = CNPJ.substring(0,2);
x += CNPJ.substring (3,6);
x += CNPJ.substring (7,10);
x += CNPJ.substring (11,14);
CNPJ = x;
} else {
CNPJ = CNPJ.replace (".","");
CNPJ = CNPJ.replace (".","");
CNPJ = CNPJ.replace ("-","");
CNPJ = CNPJ.replace ("/","");
}
var nonNumbers = /\D/;
if (nonNumbers.test(CNPJ)) erro += "A verificação de CNPJ suporta apenas números! \n";
var a = [];
var b = new Number;
var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];
for (i=0; i<12; i++){
a[i] = CNPJ.charAt(i);
b += a[i] * c[i+1];
}
if ((x = b % 11) < 2) { a[12] = 0 } else { a[12] = 11-x }
b = 0;
for (y=0; y<13; y++) {
b += (a[y] * c[y]);
}
if ((x = b % 11) < 2) { a[13] = 0; } else { a[13] = 11-x; }
if ((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13])){
erro +="Dígito verificador com problema!";
}
if (erro.length > 0){
return erro;
} else {
return true;
}
}
function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_validateForm() { //v4.0
var i,p,que,nm,test,num,min,max;
var errors='';
var args=MM_validateForm.arguments;
var aux=document.getElementById('senha').value;
var cpfcnpj=document.getElementById('CampoNumero').value;
var checkcpf=document.getElementById('chkCPF');
for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
if (val) { nm=val.name; if ((val=val.value)!="") {
if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
if (p<1 || p==(val.length-1)) errors+='O campo '+nm+' requer um endereço de email válido.\n';
} else if (test!='R') { num = parseFloat(val);
if (isNaN(val)) errors+='O campo '+nm+' aceita somente números.\n';
if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
min=test.substring(8,p); max=test.substring(p+1);
if (aux.length<min || max<aux.length) errors+='- '+nm+' deve conter no mínimo '+min+' dígitos e no máximo '+max+' dígitos.\n';
} } } else if (test.charAt(0) == 'R') errors += 'O campo '+nm+' deve ser preenchido.\n'; }
}
if (checkcpf.checked == true){ aux = validaCPF(cpfcnpj); if (aux != true) errors += aux; } else {
aux = validaCNPJ(cpfcnpj); if (aux != true) errors += aux; }
if (errors) alert('Erro ao preencher o formulário:\n'+errors);
document.MM_returnValue = (errors == '');
}
//-->
</script>
</head>
</html>
Pergunta
frlouzada
Fala galera,
Estou com um probleminha no formulário abaixo. Tenho a função de validação do formulário MM_validateForm() que fiz algumas adaptações para validar CPF e CNPJ. Mas ela só está chamando a função de validar CPF. Mesmo quando o radio button está marcado em CNPJ ele está chamando a função validaCPF, sendo que quando o CNPJ estiver marcado ele deveria chamar a função validaCNPJ.
Alguém poderia me ajudar a identificar qual é o problema?
Código atualizado
Desculpem aí pela falta de identação!!! EDIT: Problema resolvido! Problema estava que os botões tipo radio estavam com o mesmo ID. Aqui vai código validando corretamente todos os campos.Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados