Ir para conteúdo

POWERED BY:

Arquivado

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

Emmanuel Magno

Problema em impedir cadastro com pesquisa em tres campos

Recommended Posts

Estou tendo, problema em fazer funcionar a função de impedir o cadastro em banco de dados, estou desenvolvendo um sistema simples, mais preciso que o sistema verifique se o nome, data de nascimento e nome da mae, já está cadastrado, mais impedirá se somente os três forem forem precisos, supondo que somente 01 ou 02 estejam cadastrado e o 03 não ele realizará o cadastro. Bem verificando outros pots conseguir fazer ele verificar e impedir o cadastro, mas no caso ele verifica e se tiver dois que coincidem e um não mesmo assim ele impede o cadastro.

 

Segue o código completo, estou usando o sistema ou função PDO, desculpem sou novo na programação

 

<?php if(isset($_POST['executar']) && $_POST['executar'] == 'Cadastrar'){
$seq_n = strip_tags(trim($_POST['armario']));
$armario = strip_tags(trim($_POST['armario']));
$gaveta = strip_tags(trim($_POST['gaveta']));
$ano = strip_tags(trim($_POST['ano']));
$nome = strip_tags(trim($_POST['nome']));
$dt_nasc = strip_tags(trim($_POST['dt_nasc']));
$mae = strip_tags(trim($_POST['mae']));
$sql_verifica = 'SELECT * FROM cad_arqmorto WHERE nome = :nome; data_nascimento = :dt_nasc, mae = :mae';
try{
$query_verifica = $conecta->prepare($sql_verifica);
$query_verifica->bindValue(':nome',$nome,PDO::PARAM_STR);
$query_verifica->bindValue(':dt_nasc',$dt_nasc,PDO::PARAM_STR);
$query_verifica->bindValue(':mae',$mae,PDO::PARAM_STR);
$query_verifica->execute();
$count_verifica = $query_verifica->rowCount(PDO::FETCH_ASSOC);
}catch(PDOexception $error_verificao){
echo 'Erro ao executar verificação'.$error_verificao->getMessage();
}
if($count_verifica >= '1'){
echo 'Dados verificados já foram cadastrados no sistema';
}else{
$sql_cadastrararq_morto = 'INSERT INTO cad_arqmorto (armario, gaveta, ano, nome, data_nascimento, mae) ';
$sql_cadastrararq_morto .= 'VALUES (:armario, :gaveta, :ano, :nome, :dt_nasc, :mae)';
try{
$query_cadastrararq_morto = $conecta->prepare($sql_cadastrararq_morto);
$query_cadastrararq_morto->bindValue(':armario',$armario,PDO::PARAM_STR);
$query_cadastrararq_morto->bindValue(':gaveta',$gaveta,PDO::PARAM_STR);
$query_cadastrararq_morto->bindValue(':ano',$ano,PDO::PARAM_STR);
$query_cadastrararq_morto->bindValue(':nome',$nome,PDO::PARAM_STR);
$query_cadastrararq_morto->bindValue(':dt_nasc',$data_nascimento,PDO::PARAM_STR);
$query_cadastrararq_morto->bindValue(':mae',$mae,PDO::PARAM_STR);
$query_cadastrararq_morto->execute();
}catch(PDOexception $error_cadastrararq_morto){
echo 'Erro ao cadastrar dados'.$error_cadastrararq_morto->getMessage();
}
}
}?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

ao que parece, essa SQL "non eczizte":

 

'SELECT * FROM cad_arqmorto WHERE nome = :nome; data_nascimento = :dt_nasc, mae = :mae';

 

verifique a sintaxe (e outras dicas boas):

 

http://www.linhadecodigo.com.br/artigo/2975/comandos-basicos-em-sql-insert-update-delete-e-select.aspx
http://www.linhadecodigo.com.br/artigo/75/principais-instrucoes-em-sql.aspx

(sugestão: tente "OR")

 

e habilite as mensagens de erro, como mostrado aqui:

http://forum.imasters.com.br/topic/375800-orientacoes-para-uma-boa-participacao/

Compartilhar este post


Link para o post
Compartilhar em outros sites

troquei mais naum sei se foi no local certo:

 

$sql_verifica = 'SELECT * FROM cad_arqmorto WHERE nome = :nome OR data_nascimento = :dt_nasc OR mae = :mae';

 

e ao testar ainda fica dando erro, o erro que faz é o seguinte, supondo que em uma escola estudaram irmao gemeos e ao cadastra-los os ítens que iriam ficar duplicados seriam a data de nascimento e o nome da mae, mas se os individuos tem nomes diferentes, o sistema faria primeiro a busca e só vendo essa coincidencia permitiria o cadastro de ambos, o sistema só poderia impedir o cadastro se fosse o da própria pessoa, pois ai sim ficaria em duplicidade. E ao fazer a troca da ',' por 'OR' ele acusa que a dados cadastrado mas mesmo assim faz um cadastro em branco na base de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bem utilizando o Unique key deu certo, so que eu queria que ele so bloqueasse o cadastro se no banco de dados na mesma linha estivesse se repetindo o cadastro, mas ele bloqueia se estiver em linha separadas.

 

ex.:

 

 

Id nome Data nasc Mae

01 João da Silva Filho 17/02/1995 Maria da Silva Filho

02 Estefany Carvalho Moreira 25/08/1999 Solange Carvalho Moreira

 

levando em consideração ao que já foi feito e utilizando o UNIQUE KEY se o campo data de nascimento se repetir em qualquer cadastro ele retorna um erro de duplicidade, mas não é dessa forma que quero que ele faça, quero que ele só bloquei se o cadastro for se repetir por completo. se eu ja tiver por exemplo o cadastro 02 e lá no 850 ele for se repetir ele só irá acusa nesse momento a duplicidade e impedir o cadastro novamente. Mas eu tiver por exemplo o cadastro 02 e essa pessoa tem uma irma gemea e quando eu tiver no numero 25 e for cadastrar essa irma, a única coisa que vai diferenciar os dois cadastro sera o nome, mas a dt de nasc e nome da mae serao o mesmo e nesse caso ele permitira o cadastro.

 

 

segue o codigo alterado, os campos unique key alterei no proprio banco de dados

  <?php if(isset($_POST['executar']) && $_POST['executar'] == 'Cadastrar'){
	  
   $seq_n = strip_tags(trim($_POST['armario']));
   $armario = strip_tags(trim($_POST['armario']));
   $gaveta = strip_tags(trim($_POST['gaveta']));
   $ano = strip_tags(trim($_POST['ano']));
   $nome = strip_tags(trim($_POST['nome']));
   $data_nascimento = strip_tags(trim($_POST['dt_nasc']));
   $mae = strip_tags(trim($_POST['mae']));
   
   $sql_verifica = 'SELECT * FROM cad_arqmorto WHERE nome = :nome OR data_nascimento = :dt_nasc OR mae = :mae';

try{
	$query_verifica = $conecta->prepare($sql_verifica);
	$query_verifica->bindValue(':nome',$nome,PDO::PARAM_STR);
	$query_verifica->bindValue(':dt_nasc',$data_nascimento,PDO::PARAM_STR);
	$query_verifica->bindValue(':mae',$mae,PDO::PARAM_STR);
	$query_verifica->execute();
	
	$count_verifica = $query_verifica->rowCount(PDO::FETCH_ASSOC);
	
	}catch(PDOexception $error_verificao){
		echo 'Erro ao executar verificação'.$error_verificao->getMessage();	
		}
    if($count_verifica >= '1'){
		echo 'Dados verificados já foram cadastrados no sistema';
		}else{

		   $sql_cadastrararq_morto  = 'INSERT INTO cad_arqmorto (armario, gaveta, ano, nome, data_nascimento, mae) ';
		   $sql_cadastrararq_morto .= 'VALUES (:armario, :gaveta, :ano, :nome, :dt_nasc, :mae)';
		   
		   try{
			   $query_cadastrararq_morto = $conecta->prepare($sql_cadastrararq_morto);
			   $query_cadastrararq_morto->bindValue(':armario',$armario,PDO::PARAM_STR);
			   $query_cadastrararq_morto->bindValue(':gaveta',$gaveta,PDO::PARAM_STR);
			   $query_cadastrararq_morto->bindValue(':ano',$ano,PDO::PARAM_STR);
			   $query_cadastrararq_morto->bindValue(':nome',$nome,PDO::PARAM_STR);
			   $query_cadastrararq_morto->bindValue(':dt_nasc',$data_nascimento,PDO::PARAM_STR);
			   $query_cadastrararq_morto->bindValue(':mae',$mae,PDO::PARAM_STR);
			   $query_cadastrararq_morto->execute();

			   }catch(PDOexception $error_cadastrararq_morto){
				   echo 'Erro ao cadastrar dados'.$error_cadastrararq_morto->getMessage();
           }
		}
   }?>

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.