Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Amigos, bom dia a todos!
No sistema tem uma mensagem de erro onde informa se um CPF já está cadastrado no sistema, porém, mesmo se o usuário não preencher o campo CPF, a mensagem de erro é informada.
No caso do campo CPF não ser preenchido, a mensagem de erro não deve ser informada e o cadastro deverá ser efetuado com sucesso, mesmo porque o campo CPF não é obrigatório.
Onde errei? O que está faltando nesse código?
foreach ($_POST as $campo => $valor) { $$campo = strip_tags($valor); }
$sql = "SELECT * FROM clientes WHERE cpf = '$varCPF'";
$query = mysql_query($sql);
$total = mysql_num_rows($query);
if($total == 0){
$query = "INSERT INTO clientes(empresas_idempresas, tipopessoa, nomecliente, nomefantasia, ramo, cpf, rg, cnpj, ie, logradouro, numero, complemento, bairro, cep, cidade, uf, tipotel, numerotel, fax, observacaotel, tiponet, email, observacaonet, tiporeferencia, nomereferencia, telefonereferencia, bancoreferencia, logradouro2, numero2, complemento2, bairro2, cep2, cidade2, uf2, tipoobservacao, observacaocliente, datacadastro) VALUES ('$varEmpresas_idempresas', '$varTipopessoa', '$varNome', '$varFantasia', '$varRamo', '$varCPF', '$varRG', '$varCNPJ', '$varIE', '$varLogradouro', '$varNumero', '$varComplemento', '$varBairro', '$varCEP', '$varCidade', '$varUF', '$varTipotel', '$varNumerotel', '$varFax', '$varObservacaotel', '$varTiponet', '$varContatonet', '$varObservacaonet', '$varTiporef', '$varNomeref', '$varTelefoneref', '$varBancoref', '$varLogradouro2', '$varNumero2', '$varComplemento2', '$varBairro2', '$varCEP2', '$varCidade2', '$varUF2', '$varTipoobs', '$varObservacaocliente', '$varDatacadastro')";
$result = mysql_query($query); }
else{
echo "<a class='gridmsg'>CPF ja cadastrado no sistema!<a><br>";
}Sim, preciso fazer isso... mas como fazer essa verificação?
if($varCPF == ""){
exit;
}
so n sei da onde vem o $varCPF
Com esse complemento, não mostrou a mensagem mas também não gravou o cadastro. :(
>
mais alguma dica? :)
Este tipo de post não é permitido. Sugiro que leia as orientações para uma boa participação.
-------------
Sobre a sua dúvida, você precisa adicionar a condição do CPF no mesmo if.
if(($total == 0) || empty($varCPF)){
Deve funcionar.
Carlos Eduardo
Mil perdões Matias pelo post inadequado, prometo não repetir tal erro.
A sua dica funcionou perfeitamente!
Muito obrigado pela ajuda!
Grande abraço!
Apareceu outro problema nesse sentido! :(
O sistema é usado por duas empresas distintas, onde cada uma tem seu idempresa e uma não vê os registros da outra.
Nesse caso, imaginemos que um CPF é cliente da empresa A e posteriormente se torna cliente da empresa B, logo, a empresa B irá fazer o cadastro e o sistema emitirá a mensagem: "CPF já cadastrado no sistema!".
E agora? como resolver isso? :|
Adiciona o id da empresa que está consultado na cláusula where da primeira consulta, a que vê se o CPF está cadastrado. Algo assim:
$sql = "SELECT * FROM clientes WHERE cpf = '$varCPF' AND empresas_idempresas = $idDaEmpresa ";
Carlos Eduardo
Coloquei, porém, agora ele deixa repetir o CPF... :|
Dentro da mesma empresa? Poste o código como ficou.
Carlos Eduardo
Isso mesmo, tá deixando duplicar o CPF dentro da mesma empresa.
Veja só, eu pego a sessão da empresa desta forma no início do código:
<?php
session_start();
if (!isset($_SESSION["empresas_idempresas"]) || !isset($_SESSION["senha"]) || !isset($_SESSION["login"]) || ($_SESSION["nivel"])... ?>
Agora vem a parte interessada:
$sql = "SELECT * FROM clientes WHERE cpf = '$varCPF' AND empresas_idempresas = empresas_idempresas ";
$query = mysql_query($sql);
$total = mysql_num_rows($query);
if(($total == 0) || empty($varCPF)){
$query = "INSERT INTO clientes(empresas_idempresas, tipopessoa, nomecliente, nomefantasia, ramo, cpf, rg, cnpj, ie, logradouro, numero, complemento, bairro, cep, cidade, uf, tipotel, numerotel, fax, observacaotel, tiponet, email, observacaonet, tiporeferencia, nomereferencia, telefonereferencia, bancoreferencia, logradouro2, numero2, complemento2, bairro2, cep2, cidade2, uf2, tipoobservacao, observacaocliente, datacadastro) VALUES ('$varEmpresas_idempresas', '$varTipopessoa', '$varNome', '$varFantasia', '$varRamo', '$varCPF', '$varRG', '$varCNPJ', '$varIE', '$varLogradouro', '$varNumero', '$varComplemento', '$varBairro', '$varCEP', '$varCidade', '$varUF', '$varTipotel', '$varNumerotel', '$varFax', '$varObservacaotel', '$varTiponet', '$varContatonet', '$varObservacaonet', '$varTiporef', '$varNomeref', '$varTelefoneref', '$varBancoref', '$varLogradouro2', '$varNumero2', '$varComplemento2', '$varBairro2', '$varCEP2', '$varCidade2', '$varUF2', '$varTipoobs', '$varObservacaocliente', '$varDatacadastro')";
$result = mysql_query($query); }
else {
echo "<a class='gridmsg'>CPF já cadastrado no sistema!<a><br>";
}
if($result)
$msg = "<a class='gridmsgok'>Cliente cadastrado com sucesso!<a> <br>";
else
$msg = "<a class='gridmsg'>Erro ao cadastrar cliente!<a><br>".mysql_error();
}
if(isset($msg)) {
echo utf8_encode($msg);
}$sql = "SELECT * FROM clientes WHERE cpf = '$varCPF' AND empresas_idempresas = empresas_idempresas ";
Olha bem com atenção a condição... se empresass_idempresas = empresas_idempresas... ou seja, isto SEMPRE vai ser verdadeiro. Na segunda parte deve estar a variável que recebe o id da empresa que está acessando. Parece ser $_SESSION['empresas_idempresas'].
Carlos Eduardo
Bom dia amigo!
Tentei das seguintes formas:
$sql = "SELECT * FROM clientes WHERE cpf = '$varCPF' AND empresas_idempresas = $_SESSION[empresas_idempresas] ";
$sql = "SELECT * FROM clientes WHERE cpf = '$varCPF' AND empresas_idempresas = $idempresas ";
$sql = "SELECT * FROM clientes WHERE cpf = '$varCPF' AND empresas_idempresas = $empresas_idempresas ";
E mesmo assim continua permitindo a duplicidade do CPF na mesma empresa.
Agora é debugar, exibindo a consulta antes de executar, colocando pra exibir todos os erros, inclusive possíveis erros do mysql, encontrando a variável que está o id da empresa. Você leu o link que eu postei antes, sobre as orientações para participação? Sugiro que leia, pois tem coisas lá que você não fez ainda, senão apareceriam mensagens de erro.
Leia o tópico e siga as orientações. Se conseguir resolver sozinho, poste aqui a solução. Se não conseguir, poste o que tentou fazer, quais erros apareceram, enfim, os resultados do debug.
Abraços
Carlos Eduardo
Pronto, encontrei o problema, rsrsrsr...
Na realidade eu acabei alterando o código e apartir dai o problema surgiu.
Como eu queria a rotina também no CNPJ acabei acrescentando o $varCNPJ no código:
if(($total == 0) || empty($varCPF)){
ficando da seguinte forma:
if(($total == 0) || empty($varCPF) || empty($varCNPJ)){
Então ele começou a deixar duplicar o CPF. Retirei o empty($varCNPJ) e começou a funcionar perfeitamente, deixando cadastrar um CPF na empresa B que já havia sido cadastrado na empresa A e não deixou duplicar o CPF na mesma empresa.
O select ficou da seguinte forma:
$sql = "SELECT * FROM clientes WHERE cpf = '$varCPF' AND empresas_idempresas = '$empresas_idempresas'";
Abraços :)