Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
tenho um sistema de cadastro rodando em um site, e preciso verificar se o número de matrícula do usuário já foi cadastrado. Alguém sabe como posso fazer essa busca no banco de Dados?
Beleza Mário, o meu ficou assim:
<?php $query = "SELECT ID FROM usuarios WHERE matricula='".$_POST['matricula']."' LIMIT 1"; $result = @mysql_query($query); if(@mysql_num_rows($result)){ echo "Matrícula já cadastrada"; header ("Location: erro.php"); }else{ header ("Location: cadastra.php"); exit(0); }?>
Eu salvei esse arquivo como verifica2.php e apontei o action do form direto pra ele, + ele continua cadastrando assim mesmo, como se ele ignorasse a condição (if) e indo direto pro "cadastra.php", depois, alterei o código dessa forma:
<?php $query = "SELECT ID FROM usuarios WHERE matricula='".$_POST['matricula']."' LIMIT 1"; $result = @mysql_query($query); if(@mysql_num_rows($result)){ header ("Location: cadastra.php"); }else{ echo "Matrícula já cadastrada"; header ("Location: erro.php"); exit(0); }?>
Dessa forma, ele não cadastra nenhuma matícula, nem as existentes e nem as inexistentes...
Retira o @ do @mysql_num_rows($result) e roda novamente para ver se aparece algum erro.
Retornou o seguinte erro:Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /usr/home/coopolo/htdocs/login/cad01teste/verifica2.php on line 4Matrícula já cadastradaWarning: Cannot modify header information - headers already sent by (output started at /usr/home/coopolo/htdocs/login/cad01teste/verifica2.php:4) in /usr/home/coopolo/htdocs/login/cad01teste/verifica2.php on line 8
Então ele não deve estar encontrando a tabela no banco ou a celula. Como está montado seu banco?
Gustavo Freitas se você tem um campo no banco que nao pode ser repetido coloque ele como UNIQUE e o header tem que ser usado antes de qualquer saida html ou se você controlar a saida html
Tendi^^! Vou tentar aki e falo como fikou...
Beleza Fabyo, eu defini o campo como Unique e ele realmente não cadastra o usuário se a matrícula já existir. No entanto, eu tenho que retornar de alguma forma para o usuário que o seu cadastro não foi efetuado pq a matrícula já existe... como eu posso fazer isso?
Usa javascript.
exemplo:
blablabla if(matricula cadastrada) {
echo("Matrícula já cadastrada, redirecionando à página de cadastro.<script>window.setTimeout('changeurl();',5000); function changeurl(){window.location='http://www.imasters.com.br';}</script>");bla bla bla } // fecha if
Tipo, é contado em milésimo de segundos,
5000 = 5 segundos
1000 = 1 segundos
Não é bem isso.. dexa que explicar melhor...eu tenho um arquivo para fazer a verificação, assim:<?php $query = "SELECT * FROM usuarios WHERE matricula='".$_POST['matricula']."' LIMIT 1"; $result = @mysql_query($query); if(@mysql_num_rows($result)==1){ header ("Location: cadastra.php"); }else{ echo "ERRO - Matrícula já cadastrada"; exit(0); }?>Só que independete do resultado, ele sempre retorna "ERRO - Matrícula já cadastrada"...Acho que você se enganou no if. O certo seria:
if(!@mysql_num_rows($result)){ header ("Location: cadastra.php");}else{ echo "ERRO - Matrícula já cadastrada"; exit(0);}Ou seja, se não for encontrado nenhum resultado em que matricula=$_POST['matricula'], então ele vai para a página de cadastro.
Valeu pela dica Mário, mas o que está acountecendo é o seguinte:
1º Defini o campo matrícula como UNIQUE;
2º Alterei o código como você passou, ficou assim:
<?php $query = "SELECT * FROM michellin WHERE matricula='".$_POST['matricula']."' LIMIT 1";
$result = @mysql_query($query);
if(!@mysql_num_rows($result)){
header ("Location: cadastra.php");
}else{
echo "ERRO - Matrícula já cadastrada";
exit(0);
}
?>
Beleza, rodei o prog... agora ele não cadastra mais se a matrícula existir, + ele não roda o ELSE e não mostra "ERRO - Matrícula já cadastrada", segue como se tivesse efetuado o cadastro... ele não exibe nenhuma mensagem ao usuário.
Bom.... estamos no caminho certo :D Faz o seguinte: tire todos os @ pra vermos se aparece algum erro.
Eu sei... ele não está cadastrando as matrículas existentes pq como o Fabyo falou, o campo está definido como UNIQUE, já tirei os @ antes e retornou um erro...
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /usr/home/coopolo/htdocs/login/cad01teste/verifica2.php on line 4Matrícula já cadastradaWarning: Cannot modify header information - headers already sent by (output started at /usr/home/coopolo/htdocs/login/cad01teste/verifica2.php:4) in /usr/home/coopolo/htdocs/login/cad01teste/verifica2.php on line 8
Parece que a consulta ao banco não está sendo feita.Posta seu script completo (desde a abertura do banco até o fechamento)
Beleza!
Tá quase...
Consegui fazer ele executar o teste e ficou assim:
Entro no form incluir
<form name=\"form1\" method=\"post\" onSubmit=\"return valida(this);\" action=\"verifica2.php\">...
Faço a verificação no verifica2.php
<?phpinclude"conecta.php"; $query = "SELECT matricula FROM tb_cadastro WHERE matricula='".$_POST['matricula']."' LIMIT 1"; $result = mysql_query($query); if(!mysql_num_rows($result)){ header ("Location: cadastra.php"); }else{ echo "ERRO - Matrícula já cadastrada"; exit(0);}?>
Se a matrícula não existe, ele segue pro cadastra...
<?$codigo = $_POST["codigo"];$nome = $_POST["nome"];$user = $_POST["user"];$matricula = $_POST["matricula"];$setor = $_POST["setor"];$ccusto = $_POST["ccusto"];$terceiros = $_POST["terceiros"];$ramal = $_POST["ramal"];$telefone = $_POST["telefone"];$endereco = $_POST["endereco"];$bairro = $_POST["bairro"];$cidade = $_POST["cidade"];$uf = $_POST["uf"];$ref = $_POST["ref"];$email = $_POST["email"];$senha = $_POST["senha"];include"setup.php"; mysql_query("INSERT INTO tb_cadastro (codigo,nome,user,matricula,setor,ccusto,terceiros,ramal,telefone,endereco,bairro,cidade,uf,ref,email,senha) VALUES ('$codigo','$nome','$user','$matricula','$setor','$ccusto','$terceiros','$ramal','$telefone','$endereco','$bairro','$cidade','$uf','$ref','$email','$senha') ",$conexion); if ($res == 0) { header ("Location: [http://www.meusite.com.br/index.php");](http://www.meusite.com.br/index.php) } else header ("Location: [http://www.meusite.com.br/erro.php");?>](http://www.meusite.com.br/erro.php)
Só que aqui ele não recebe as variáveis postadas... + a condição está funcionando beleza!
Ele não ta recebendo as variáveis pelo fato do action do form estar para o verifica2.php e nao pra cadastro.phpSoluções:Tira o header ("Location: cadastra.php"); e põe o script do cadastro (pra q 2 arquivos se pode fazer com 1 ? )... caso contrário, inicia as variáveis com $_SESSION ou $_COOKIE e busca no cadastro.phpAHhh EDIT;;tu pode usar ajax também, ai verifica no banco de dados sem sair da página...!
BELEZA \o/ Botei o código do cadastro dentro do if e deu certo... valeu mesmo pela força!!!
Basicamente é isso.