Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

JRRC

Verificar se CPF já foi cadastrado

Recommended Posts

Amigão, vamos tentar uma pegada diferente.

 

1. Você DEVE criar um índice UNIQUE para a coluna CPF da sua tabela.

2. Adicione mais uma coluna na sua tabela chamada: editado com o tipo BOOLEAN ou TINYINT(1)

ALTER TABLE `cliente` ADD COLUMN `editado` tinyint(1) UNSIGNED NOT NULL AFTER `celular`,
ADD INDEX `editados`(`editado`),
ADD UNIQUE `cpf`(`cpf`);

 

3. Remova os 2, o select e o insert, trocando pelo código abaixo:

<?php
$nome			= $_GET["nome"];
$cpf			= $_GET["cpf"];
$rg			= $_GET["rg"];
$sexo			= $_GET["sexo"];
$endereco		= $_GET["endereco"];
$cidade			= $_GET["cidade"];
$cep			= $_GET["cep"];
$uf			= $_GET["uf"];
$data_nascimento	= $_GET["data_nascimento"];
$email			= $_GET["email"];
$ddd			= $_GET["ddd"];
$ddd1			= $_GET["ddd1"];
$fone			= $_GET["fone"];
$cadastro		= $_GET["cadastro"];
$celular		= $_GET["celular"];
$cpf			= mysql_escape_string( $cpf );
$sql			= sprintf( '
INSERT INTO
	cliente(`nome`,`cpf`,`rg`,`sexo`,`endereco`,`cidade`,`cep`,`uf`,`data_nascimento`,`email`,`ddd`,`ddd1`,`fone`,`cadastro`,`celular`)
	VALUES("%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s",now(),"%s") ON DUPLICATE KEY UPDATE `editado`=1;',
	$nome,$cpf,$rg,$sexo,$endereco,$cidade,$cep,$uf,$data_nascimento,$email,$ddd,$ddd1,$fone,$celular
);

if ( mysql_query( $sql ) !== false ){
if ( ( $res = mysql_query( sprintf( 'SELECT `id`,`editado` FROM `cliente` WHERE `cpf`="%s";' , $cpf ) ) ) !== false ){
	if ( ( $row = mysql_fetch_array( $res , MYSQL_ASSOC ) ) !== false ){
		if ( (int) $row[ 'editado' ] ){
			echo '<script> history.go(-1); alert("Login ja cadastrado no sistema!");</script>';
		}
	}
}
}

mysql_close( $conn );

 

Por padrão vamos tentar cadastrar o registro, como o CPF tem um índice UNIQUE o INSERT vai falhar se já houver outro registro com o mesmo CPF, nesse ponto entrará o ON DUPLICATE KEY UPDATE que irá modificar a coluna editado e colocar o valor 1. Feito isso, faremos uma consulta pelo CPF informado (que estará em cache) e recuperamos o valor da coluna editado, se for 0 significa que acabamos de cadastrar um novo registro, se for 1 significa que o registro já existia e foi atualizado.

 

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

E aí JRRC, bom dia cara!!!É cara...a parada não são só flores não é...rsssBom...conforme a dica do nosso amigo João Batista Neto

1. Você DEVE criar um índice UNIQUE para a coluna CPF da sua tabela.

Realmente você DEVE sim colocar a condição de UNIQUE no campo CPF. Eu indiquei a minha segunda dica, pois não conhecia esse metodo que o nosso amigo aí indicou...e como você queria alterar o campo né...então...pensei que aquela seria não a melhor mais um boa opção...porém...pensando em sua teoria

mais então pensei "E se sem querer na hora do cadastro o kra digitou o CPF errado ?!".

então o metodo dele é o mais viavel :grin: ...até pq...irei adaptar aos meus sistemas. :assobiando:Em sistemas que eu já fiz, eu NÃO tiro a condição de UNIQUE do campo CPF, porém...não deixo o mesmo ser alterado, pois tenho um validador de CPF, portanto...se o danado digitar errado, o CPF pode ser incorreto daí não passaria de qualquer jeito o obrigando a digitar o correto, porém...como nesse nosso mundo não é bom deixar para o Deus dará :clap: ...então... vou ter que adaptar a dica do João Batista Neto tambem. :joia:Abraços amigos... :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opaaaa.. obrigado amigo, irei testá-lo mais tarde, pois tenho que apresentar o sistema daqui a pouco na facul.. então irei usar esse metódo para usar em futuras aplicações, ou melhor, no aperfeiçoamento desse que ja estou fazendo Imagem Postada

Obrigado pela dica

porém...como nesse nosso mundo não é bom deixar para o Deus dará

É verdade, nesse mundo em que caras metidos a apertos aparecem aos montes Imagem Postada é melhor previnir do que remediar.

 

Vou testar mais tarde esse metodo e depois volto aqui para dizer o resultado que eu obtive.. mais só deixando uma pergunta já em aberto, esse metódo serve para o UPDATE tambem ?!

 

E sim, como que eu o incrementaria lá no código ?!

 

Mais uma vez muito obrigado a todos Imagem Postada .. valeu galera fiquem com Deus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

E sim, como que eu o incrementaria lá no código ?!

Ele é, vamos dizer, um INSERTUPDATE, heheheh

 

Veja que eu apenas atualizei o campo editado, agora se você quiser atualizar também o nome, ou endereço:

 

$sql = sprintf(
'INSERT INTO
cliente(`nome`,`cpf`,`rg`,`sexo`,`endereco`,`cidade`,`cep`,`uf`,`data_nascimento`,`email`,`ddd`,`ddd1`,`fone`,`cadastro`,`celular`)
VALUES("%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s",now(),"%s") ON DUPLICATE KEY
UPDATE `editado`=1,`nome`=VALUES(nome),`endereco`=VALUES(endereco);',
$nome,$cpf,$rg,$sexo,$endereco,$cidade,$cep,$uf,$data_nascimento,$email,$ddd,$ddd1,$fone,$celular
);

 

Perceba que no UPDATE foi colocado apenas VALUES(nome) e VALUES(endereco), você fará isso para todos os campos que quiser atualizar, da seguinte forma:

`nomedocampo`=VALUES(nomedocampo)

 

Primeiro o INSERT irá rodar, se o registro já existir ele pega os valores que você colocou no INSERT e jogar no UPDATE.

 

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi brother, então no caso se o nome desse arquivo fosse por exemplo insup.php, nos formulários para Alterar e Inserir no action de ambos eu colocaria action="insup.php" ?!

 

Mais uma vez obrigadissimo.. Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi brother, então no caso se o nome desse arquivo fosse por exemplo insup.php, nos formulários para Alterar e Inserir no action de ambos eu colocaria action="insup.php" ?!

 

Sim, ou alguma coisa mais explícita como action="save.php"

Compartilhar este post


Link para o post
Compartilhar em outros sites

João Batista Neto,

Tentei fazer da forma que está abaixo e está dando o seguinte erro Warning: sprintf() [function.sprintf]: Too few arguments in C:\Program Files (x86)\VertrigoServ\www\safen\cliente\cad_cliente.php on line 34.

 

Sendo que nesta linha 34 está o seguinte código );, que é o parentese que fecha a função sprintf. Que erro pode ser esse daí ?! E a forma que estou fazendo está correta ?!

 

 

<?php
include "../conexao.php";

$opcao  = $_GET["opcao"];
$codigo = $_GET["codigo"];

$cidade      = $_GET["cidade"];
$bairro 	 = $_GET["bairro"];
$endereco	 = $_GET["endereco"];
$nome		 = $_GET["nome"];
$numero_casa = $_GET["numero_casa"];
$complemento = $_GET["complemento"];
$cpf		 = $_GET["cpf"];
$rg			 = $_GET["rg"];
$foneresi	 = $_GET["foneresi"];
$fonecom     = $_GET["fonecom"];
$fonecel	 = $_GET["fonecel"];
$datacad	 = $_GET["datacad"];
$datanasc	 = $_GET["datanasc"];
$sexo		 = $_GET["sexo"];
$peso		 = $_GET["peso"];
$altura		 = $_GET["altura"];
$profissao   = $_GET["profissao"];
$estadocivil = $_GET["estadocivil"];
$idade		 = $_GET["idade"];
$cpf         = mysql_escape_string( $cpf );

if ($opcao == "")
{
	$sql = sprintf( '
					INSERT INTO cliente  (cidade, bairro, endereco, nome, numero_casa, complemento, cpf, rg, foneresi, fonecom, fonecel, datacad, datanasc, sexo, peso, altura, profissao, estadocivil, idade)
					VALUES ("%s", %s", %s", %s", %s", %s", %s", %s", %s", %s", %s", %s", %s", %s", %s", %s", %s", %s", "%s", "%s") ON DUPLICATE KEY UPDATE editado=1, cidade=VALUES(cidade), bairro=VALUES(bairro), endereco=VALUES(endereco), nome=VALUES(nome), numero_casa=VALUES(numero_casa), complemento=VALUES(complemento), cpf=VALUES(cpf), rg=VALUES(rg), foneresi=VALUES(foneresi), fonecom=VALUES(fonecom), fonecel=VALUES(fonecel), datacad=VALUES(datacad), sexo=VALUES(sexo), peso=VALUES(peso), altura=VALUES(altura), profissao=VALUES(profissao), estadocivil=VALUES(estadocivil), idade=VALUES(idade);',
					$cidade, $bairro, $endereco, $nome, $numero_casa, $complemento, $cpf, $rg, $foneresi, $fonecom, $fonecel, $datacad, $datanasc, $sexo, $peso, $altura, $profissao, $estadocivil, $idade
				);

	if ( mysql_query( $sql ) != false )
	{
		if ( ( $res = mysql_query( sprintf( 'SELECT id, editado FROM cliente WHERE cpf="%s";' , $cpf ) ) ) != false )
		{
			if ( ( $row = mysql_fetch_array( $res , MYSQL_ASSOC ) ) != false )
			{
				if ( (int) $row[ 'editado' ] )
				{
					echo '<script> history.go(-1); alert("Login ja cadastrado no sistema!");</script>';
				}
			}
		}
	}


}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

seguinte erro Warning: sprintf() [function.sprintf]: Too few arguments

 

Está faltando argumentos para o sprintf. você tem um número X de %s e um número menor de variáveis para substituir.

 

$sql = sprintf( '
INSERT INTO cliente (cidade, bairro, endereco, nome, numero_casa, complemento, cpf, rg, foneresi, fonecom, fonecel, datacad, datanasc, sexo, peso, altura, profissao, estadocivil, idade)
VALUES ("%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s") ON DUPLICATE KEY UPDATE editado=1, cidade=VALUES(cidade), bairro=VALUES(bairro), endereco=VALUES(endereco), nome=VALUES(nome), numero_casa=VALUES(numero_casa), complemento=VALUES(complemento), cpf=VALUES(cpf), rg=VALUES(rg), foneresi=VALUES(foneresi), fonecom=VALUES(fonecom), fonecel=VALUES(fonecel), datacad=VALUES(datacad), sexo=VALUES(sexo), peso=VALUES(peso), altura=VALUES(altura), profissao=VALUES(profissao), estadocivil=VALUES(estadocivil), idade=VALUES(idade);',
$cidade, $bairro, $endereco, $nome, $numero_casa, $complemento, $cpf, $rg, $foneresi, $fonecom, $fonecel, $datacad, $datanasc, $sexo, $peso, $altura, $profissao, $estadocivil, $idade
);

 

Veja: http://br.php.net/manual/en/function.sprintf.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

seguinte erro Warning: sprintf() [function.sprintf]: Too few arguments

 

Está faltando argumentos para o sprintf. você tem um número X de %s e um número menor de variáveis para substituir.

 

$sql = sprintf( '
INSERT INTO cliente (cidade, bairro, endereco, nome, numero_casa, complemento, cpf, rg, foneresi, fonecom, fonecel, datacad, datanasc, sexo, peso, altura, profissao, estadocivil, idade)
VALUES ("%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s") ON DUPLICATE KEY UPDATE editado=1, cidade=VALUES(cidade), bairro=VALUES(bairro), endereco=VALUES(endereco), nome=VALUES(nome), numero_casa=VALUES(numero_casa), complemento=VALUES(complemento), cpf=VALUES(cpf), rg=VALUES(rg), foneresi=VALUES(foneresi), fonecom=VALUES(fonecom), fonecel=VALUES(fonecel), datacad=VALUES(datacad), sexo=VALUES(sexo), peso=VALUES(peso), altura=VALUES(altura), profissao=VALUES(profissao), estadocivil=VALUES(estadocivil), idade=VALUES(idade);',
$cidade, $bairro, $endereco, $nome, $numero_casa, $complemento, $cpf, $rg, $foneresi, $fonecom, $fonecel, $datacad, $datanasc, $sexo, $peso, $altura, $profissao, $estadocivil, $idade
);

 

Veja: http://br.php.net/manual/en/function.sprintf.php

 

Na verdade estava faltando uma aspa (") na maioria dos "%s", no entanto quando mando ele inserir um novo registro agora agora, ele faz é substituir o ultimo registro cadastrado e ainda aparece a mensagem do alert quando mando inserir

 

Uma coisa que percebi que tem no seu é uma variavel chamada cadastro e um tipo de valor no VALUES now() por o meu nao ter esses dois atributos influencia alguma coisa ?!

 

Que que pode ter errado agora ?!

 

if ($opcao == "")
{
	$sql = sprintf( '
			INSERT INTO cliente  (cidade, bairro, endereco, nome, numero_casa, complemento, cpf, rg, foneresi, fonecom, fonecel, datacad, datanasc, sexo, peso, altura, profissao, estadocivil, idade)
			VALUES ("%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s") ON DUPLICATE KEY UPDATE editado=1, cidade=VALUES(cidade), bairro=VALUES(bairro), endereco=VALUES(endereco), nome=VALUES(nome), numero_casa=VALUES(numero_casa), complemento=VALUES(complemento), cpf=VALUES(cpf), rg=VALUES(rg), foneresi=VALUES(foneresi), fonecom=VALUES(fonecom), fonecel=VALUES(fonecel), datacad=VALUES(datacad), sexo=VALUES(sexo), peso=VALUES(peso), altura=VALUES(altura), profissao=VALUES(profissao), estadocivil=VALUES(estadocivil), idade=VALUES(idade);',
					$cidade, $bairro, $endereco, $nome, $numero_casa, $complemento, $cpf, $rg, $foneresi, $fonecom, $fonecel, $datacad, $datanasc, $sexo, $peso, $altura, $profissao, $estadocivil, $idade
				);

	if ( mysql_query( $sql ) != false )
	{
		if ( ( $res = mysql_query( sprintf( 'SELECT id, editado FROM cliente WHERE cpf="%s";' , $cpf ) ) ) != false )
		{
			if ( ( $row = mysql_fetch_array( $res , MYSQL_ASSOC ) ) != false )
			{
				if ( (int) $row[ 'editado' ] )
				{
					echo '<script> history.go(-1); alert("CPF ja cadastrado no sistema!");</script>';
				}
			}
		}
	}


}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fazendo uns teste aqui percebi algo, acredito que importante.

 

Por exemplo, quando vou inserir um novo cadastro com um CPF ja tenha sido cadastrado antes, ele dá a mensagem do ALERT e faz um UPDATE naquele registro que contém o CPF que tentei cadastrar um novo registro.

 

Com essa função não tinha apenas como se caso eu tente fazer um novo cadastro com um CPF já cadastrado ele apenas mostre a mensagem do ALERT e não atualize os dados do outro registro já existente ?!

 

E quando vou mandar fazer um UPDATE por exemplo apenas no nome ou qualquer outro campo ele não realiza, só lembrando que o mesmo action que coloquei no form de cadastrado está do alterar.

 

Segue abaixo o codigo.

 

if ($opcao == "")
{
	$sql = sprintf( '
			INSERT INTO cliente (cidade, bairro, endereco, nome, numero_casa, complemento, cpf, rg, foneresi, fonecom, fonecel, datacad,
			datanasc, sexo, peso, altura, profissao, estadocivil, idade)
			VALUES ("%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s") 
			ON DUPLICATE KEY UPDATE editado=1, cidade=VALUES(cidade), bairro=VALUES(bairro), endereco=VALUES(endereco), nome=VALUES(nome),
			numero_casa=VALUES(numero_casa), complemento=VALUES(complemento), cpf=VALUES(cpf), rg=VALUES(rg), foneresi=VALUES(foneresi),
				fonecom=VALUES(fonecom), fonecel=VALUES(fonecel), datacad=VALUES(datacad), sexo=VALUES(sexo), peso=VALUES(peso), altura=VALUES(altura), 
			profissao=VALUES(profissao), estadocivil=VALUES(estadocivil), idade=VALUES(idade);',
			$cidade, $bairro, $endereco, $nome, $numero_casa, $complemento, $cpf, $rg, $foneresi, $fonecom, $fonecel, $datacad, $datanasc, 
			$sexo, $peso, $altura, $profissao, $estadocivil, $idade

				);

	if ( mysql_query( $sql ) != false )
	{
		if ( ( $res = mysql_query( sprintf( 'SELECT id, editado FROM cliente WHERE cpf="%s";' , $cpf ) ) ) != false )
		{
			if ( ( $row = mysql_fetch_array( $res , MYSQL_ASSOC ) ) != false )
			{
				if ( (int) $row[ 'editado' ] )
				{
					echo '<script> history.go(-1); alert("CPF ja cadastrado no sistema!");</script>';
				}
			}
		}
	}


}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com essa função não tinha apenas como se caso eu tente fazer um novo cadastro com um CPF já cadastrado ele apenas mostre a mensagem do alert e não atualize os dados do outro registro já existente ?!

Amigão, é exatamente isso que é feito no POST #21.

 

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

 

Com essa função não tinha apenas como se caso eu tente fazer um novo cadastro com um CPF já cadastrado ele apenas mostre a mensagem do alert e não atualize os dados do outro registro já existente ?!

Amigão, é exatamente isso que é feito no POST #21.

 

Imagem Postada

 

 

 

Mais aí que está o problema, em vez dela apenas mostrar o ALERT e não deixar cadastrar, está fazendo quase que o contrário, ou seja, mostra o ALERT e muda os dados de um cadastro já existente.

 

Por exempo, tenho um cadastro já com os seguintes dados.

 

Nome -> João Idade -> 30 Endereço -> Av. Fulana -> 01 CPF -> 123.456.789 - 10

 

E então vou inserir um novo registro qualquer com os seguintes dados.

 

Nome -> Pedro Idade -> 30 Endereço -> Av. Cicrana -> 30 CPF -> 123.456.789 - 10

 

Ou seja, como os CPF são iguais a função não deve deixar esse segundo cadastro ser efetuado com sucesso CORRETO ?! Ela até faz isso, não me deixa inserir o segundo registro, no entanto, os valores do segundo registro sobre-escrevem os dados do primeiro registro.

 

Então eu gostaria que isso não acontecesse, ou seja, que os dados do primeiro registro continuassem e aparecesse a mensagem do ALERT. Deu pra entender melhor qual o meu objetivo ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais aí que está o problema, em vez dela apenas mostrar o alert e não deixar cadastrar, está fazendo quase que o contrário, ou seja, mostra o alert e muda os dados de um cadastro já existente.

Isso é impossível, hehe, execute o código abaixo duas vezes e veja o resultado:

 

$cidade = 'Lugar nenhum'; //Na segunda vez troque para outro valor qualquer
$bairro = 'Bairro'; //Na segunda vez troque por outro valor qualquer
$endereco = 'Rua dos Bobos';
$numero_casa = 0;
$nome = 'Fulano de tal'; //Na segunda vez troque para outro valor
$complemento = '';
$cpf = '000.000.000-00'; //Nas duas execuções você irá manter esse campo idêntico
$rg = '00.000.000-0';
$foneresi = '1234-5678';
$fonecom = '8765-4321';
$fonecel = '9999-9999';
$datacad = date( 'Y-m-d H:i:s' );
$datanasc = '1981-09-05 12:32:00';
$sexo = 'M';
$peso = 20;
$altura = 1.83;
$profissao = 'profissao';
$estadocivil = 'estadocivil';
$idade = 200;

$sql = sprintf( '
INSERT INTO cliente (cidade, bairro, endereco, nome, numero_casa, complemento, cpf, rg, foneresi, fonecom, fonecel, datacad,
datanasc, sexo, peso, altura, profissao, estadocivil, idade)
VALUES ("%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s")
ON DUPLICATE KEY UPDATE editado=1;',
$cidade , $bairro , $endereco , $nome , $numero_casa , $complemento , $cpf , $rg , $foneresi , $fonecom , $fonecel ,
$datacad , $datanasc , $sexo , $peso , $altura , $profissao , $estadocivil , $idade
);

if ( mysql_query( $sql ) != false ){
if ( ( $res = mysql_query( sprintf( 'SELECT id, editado FROM cliente WHERE cpf="%s";' , $cpf ) ) ) != false ){
if ( ( $row = mysql_fetch_array( $res , MYSQL_ASSOC ) ) != false ){
if ( (int) $row[ 'editado' ] ){
echo '<script> history.go(-1); alert("CPF ja cadastrado no sistema!");</script>';
}
}
}
} else echo mysql_error();

 

Para fazer o teste usei a seguinte tabela:

CREATE TABLE `cliente` (
`id` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
`cidade` varchar(100) NOT NULL,
`bairro` varchar(100) NOT NULL,
`endereco` varchar(100) NOT NULL,
`nome` varchar(100) NOT NULL,
`numero_casa` smallint(5) UNSIGNED NOT NULL,
`complemento` varchar(100) NOT NULL,
`cpf` char(14) NOT NULL,
`rg` varchar(15) NOT NULL,
`foneresi` varchar(20) NOT NULL,
`fonecom` varchar(20) NOT NULL,
`fonecel` varchar(20) NOT NULL,
`datacad` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`datanasc` datetime NOT NULL,
`sexo` char(1) NOT NULL,
`peso` decimal(5,2) UNSIGNED NOT NULL,
`altura` decimal(5,2) UNSIGNED NOT NULL,
`profissao` varchar(100) NOT NULL,
`estadocivil` varchar(50) NOT NULL,
`idade` smallint(3) UNSIGNED NOT NULL,
`editado` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE `new_index`(`cpf`)
)

 

Não tem como não funcionar.

 

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nesta linha tem que por o Return(False);

echo '<script> history.go(-1); alert("CPF ja cadastrado no sistema!");</script>';

echo "<script> history.go(-1); alert('CPF ja cadastrado no sistema!'); return(false);</script>";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é impossível, hehe, execute o código abaixo duas vezes e veja o resultado:

 

Da forma que está aí emcima realmente dá certo, a diferença que está ai para o meu é que esse seu não tem a opção de UPDATE.

Tem alguma forma para que eu crie uma opçao para o UPDATE, para que ele não me deixe alterar um CPF de um cadastro para um já existente no banco ?!

 

O meu estava da forma que está abaixo, por isso que ele estava dando o erro que citei anteriomente.

 

 

$sql = sprintf( '
                     INSERT INTO cliente (cidade, bairro, endereco, nome, numero_casa, complemento, cpf, rg, foneresi, fonecom, fonecel, datacad,
                               datanasc, sexo, peso, altura, profissao, estadocivil, idade)
                               VALUES ("%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s") 
                    ON DUPLICATE KEY UPDATE editado=1, cidade=VALUES(cidade), bairro=VALUES(bairro), endereco=VALUES(endereco), nome=VALUES(nome),
                               numero_casa=VALUES(numero_casa), complemento=VALUES(complemento), cpf=VALUES(cpf), rg=VALUES(rg), foneresi=VALUES(foneresi),
                               fonecom=VALUES(fonecom), fonecel=VALUES(fonecel), datacad=VALUES(datacad), sexo=VALUES(sexo), peso=VALUES(peso), altura=VALUES(altura), 
                               profissao=VALUES(profissao), estadocivil=VALUES(estadocivil), idade=VALUES(idade);',
                               $cidade, $bairro, $endereco, $nome, $numero_casa, $complemento, $cpf, $rg, $foneresi, $fonecom, $fonecel, $datacad, $datanasc, 
                               $sexo, $peso, $altura, $profissao, $estadocivil, $idade

                                       );

               if ( mysql_query( $sql ) != false )
               {
                       if ( ( $res = mysql_query( sprintf( 'SELECT id, editado FROM cliente WHERE cpf="%s";' , $cpf ) ) ) != false )
                       {
                               if ( ( $row = mysql_fetch_array( $res , MYSQL_ASSOC ) ) != false )
                               {
                                       if ( (int) $row[ 'editado' ] )
                                       {
                                               echo '<script> history.go(-1); alert("CPF ja cadastrado no sistema!");</script>';
                                       }
                               }
                       }
               }


       }
?>

 

Como voce deve ter visto a opção update está presente no código

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim

Quando o usuário digitar o CPF, você verifica se tem:

$cpf = $_POST['cpf'];

$sql = "select cpf from tabela where cpf = '$cpf'";
$exe = mysql_query($sql);
$linhas = mysql_num_rows($exe);

if($linhas > 0) // Se for maior que 0, eh pq ele encontrou um registro, portanto ja tem o cpf
{
   echo "CPF já cadastrado";
}
else
{
   // UPDATEEE!
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

...não atualize os dados do outro registro já existente ?!

 

Tem alguma forma para que eu crie uma opçao para o UPDATE, para que ele não me deixe alterar um CPF de um cadastro para um já existente no banco ?!

 

Amigão você precisa decidir, você quer ou não quer atualizar os dados ???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigão você precisa decidir, você quer ou não quer atualizar os dados ???

 

Vamos voltar ao quase principio de tudo certo ?!

 

Inicialmente eu gostaria de uma função que limitasse o cadastro de uma pessoa a apenas um único CPF. Então usei a que está abaixo e funcionou corretamente, no entanto voce disse que seria melhor se eu usasse uma outra a que está logo a abaixo dessa primeira por ela ser mais eficiente.

 

$sql = "SELECT cpf FROM cliente WHERE cpf = '".$cpf."'";
	$resultado  = mysql_query($sql);
	$linha      = mysql_fetch_assoc($resultado);//Monta o array
	$retorno    = mysql_num_rows ($resultado); //Verifica se encontrou algo

	if($retorno > 0)
	{
		echo '<script> history.go(-1); alert("CPF já cadastrado no sistema!");</script>'; 
	} 
	else 
	{
                   ...
                }

 

 

$sql = sprintf( '
INSERT INTO cliente (cidade, bairro, endereco, nome, numero_casa, complemento, cpf, rg, foneresi, fonecom, fonecel, datacad,
datanasc, sexo, peso, altura, profissao, estadocivil, idade)
VALUES ("%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s")
ON DUPLICATE KEY UPDATE editado=1;',
$cidade , $bairro , $endereco , $nome , $numero_casa , $complemento , $cpf , $rg , $foneresi , $fonecom , $fonecel ,
$datacad , $datanasc , $sexo , $peso , $altura , $profissao , $estadocivil , $idade
);

if ( mysql_query( $sql ) != false ){
if ( ( $res = mysql_query( sprintf( 'SELECT id, editado FROM cliente WHERE cpf="%s";' , $cpf ) ) ) != false ){
	if ( ( $row = mysql_fetch_array( $res , MYSQL_ASSOC ) ) != false ){
		if ( (int) $row[ 'editado' ] ){
			echo '<script> history.go(-1); alert("CPF ja cadastrado no sistema!");</script>';
		}
	}
}
}

 

Agora o que eu gostaria era uma função que durante o UPDATE não deixasse a pessoas mudar o CPF para um já existente no banco, ou seja, caso ela fizesse isso e confirmasse a alteração um ALERT surgisse dizendo qeu o CPF ja estava cadastrado.

 

Então uso a seguinte função abaixo para fazer isso, no entanto quando faço uma alteração para um CPF já existente ela não me mostra o ALERT e sim uma mensagem de erro como Duplicate entry '123.456.789-10' for key 2, mais ela é eficiente para quando quero apenas mudar apenas um nome, endereço o algo do tipo aceita numa boa.

 

$sql = "SELECT cpf FROM cliente WHERE cpf = '".$cpf."'";
	$resultado  = mysql_query($sql);
	$linha      = mysql_fetch_assoc($resultado);//Monta o array
	$retorno    = mysql_num_rows ($resultado); //Verifica se encontrou algo

	if($retorno != 0 && $id == $codigo)
	{
		echo '<script> history.go(-1); alert("CPF já cadastrado no sistema!");</script>'; 
	} 
	else 
	{
                   ...
                }

 

O que eu gostaria agora era uma função que caso eu quisesse mudar apenas um nome, endereço e não mexesse no CPF ela aceitasse as alterações numa boa, e caso eu mudasse o numero para um CPF já existente me mostrasse um ALERT, entendeu ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei outras maneiras aqui e nada.. ninguém tem idéia de como que faça isso da forma para funcionar corretamente ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.