[MYSQL] Ver se o código introduzido já está validado.

c|_|

Banido
Boa tarde, estou a tentar fazer um sistema de validação de códigos em PHP+MySQL, ou seja, introduz-se um código de 6 dígitos no campo e em seguida acontece um destes três casos:

caso 1 - O código foi correctamente validado.
caso 2 - O código não existe, por favor verifique o seu código.
caso 3 - O código que introduziu já foi validado.

Na base de dados tenho os códigos armazenados da seguinte forma:

id: 01
chave_cod: 123456
valido_cod: 0/1 (0 se não estiver validado, 1 se estiver)

Alguém me pode dar umas luzes disto?
Muito obrigado!



 
Fazes uma form que recebe em post (ou caso queiras em get) e depois qualquer coisa tipo:

PHP:
// presumindo que os códigos sejam numéricos a maneira mais rápida de impedir sql injection pode usar-se a função ctype_digit() <--- tive a ler a página php da função e tem uns problemas... intval() também serve.

/* removido mas deixo aqui à mesma
if(ctype_digit($_POST['codigo'])) {
  $codigo = $_POST['codigo'];
} else {
  echo 'código inválido';
}*/

$codigo = intval($_POST['codigo']);

// query na database (supondo que já fizeste o mysql connect)

$verificar = mysql_query("SELECT * FROM `tabela_de_codigos` WHERE `chave_cod`='{$codigo}'") or die(mysql_error());

// gosto de usar list para coisas deste tipo mas também podes usar mysql_fetch_assoc e usar tipo $cod = mysql_fetch_assoc($verificar) e depois $cod['id'] e por aí além

list($id,$chave,$valido) = mysql_fetch_row($verificar);

if(mysql_num_rows($verificar) == 0) {
echo "código inválido";
}
elseif(mysql_num_rows($verificar) == 1 && $valido == 0) {
echo 'código ainda não foi validado';
}
elseif(mysql_num_rows($verificar) == 1 && $valido == 1) {
  echo 'código já validado com sucesso';
}

Em vez dos echo podes fazer qualquer coisa...
 
Última edição:
Fazes uma form que recebe em post (ou caso queiras em get) e depois qualquer coisa tipo:

PHP:
// presumindo que os códigos sejam numéricos a maneira mais rápida de impedir sql injection pode usar-se a função ctype_digit() <--- tive a ler a página php da função e tem uns problemas... intval() também serve.

/* removido mas deixo aqui à mesma
if(ctype_digit($_POST['codigo'])) {
  $codigo = $_POST['codigo'];
} else {
  echo 'código inválido';
}*/

$codigo = intval($_POST['codigo']);

// query na database (supondo que já fizeste o mysql connect)

$verificar = mysql_query("SELECT * FROM `tabela_de_codigos` WHERE `chave_cod`='{$codigo}'") or die(mysql_error());

// gosto de usar list para coisas deste tipo mas também podes usar mysql_fetch_assoc e usar tipo $cod = mysql_fetch_assoc($verificar) e depois $cod['id'] e por aí além

list($id,$chave,$valido) = mysql_fetch_row($verificar);

if(mysql_num_rows($verificar) == 0) {
echo "código inválido";
}
elseif(mysql_num_rows($verificar) == 1 && $valido == 0) {
echo 'código ainda não foi validado';
}
elseif(mysql_num_rows($verificar) == 1 && $valido == 1) {
  echo 'código já validado com sucesso';
}

Em vez dos echo podes fazer qualquer coisa...

Não imaginas o mundo que me acabaste de abrir! FANTÁSTICO! MUITO OBRIGADO!

PS: São números e letras como posso impedir injection?
 
Última edição:
Back
Topo