Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

rjg

Penso que seja um loop

Recommended Posts

rjg

Olá a todos.

Estou com um "embroglio" pois não sei o que devo fazer para obter o que descrevo a seguir; será que alguém me pode dar uma ajuda?! O meu obrigado desde já.

1 - Gero um numero aleatorio

2 - Verifico se esse numero gerado ja existe na BD

3 - Se já existe volta ao inicio (1)

4 - Se não existe, então grava na BD esse número

Não estou a conseguir que no caso do numero já existir (3) ele volte ao inicio (1) e torne a gerar um numero e a verificar se existe na BD e assim sucessivamente até não existir o numero gerado na BD e então avançar para o passo seguinte (4)

// GERA UM NUMERO ALEATÓRIO

$Caracteresaceites = '12'; 
$max1 = strlen($Caracteresaceites)-1;
$numero = null;
for($i=0; $i < 2; $i++) { 
$numero .= $Caracteresaceites{mt_rand(0, $max1)};
}


// VERIFICA SE JÁ EXISTE O NUMERO NA BASE DE DADOS

$query = mysql_query("SELECT * FROM `$tabela` WHERE numero='$numero'", $db);
$resultado = mysql_num_rows($query);


if ( $resultado == 1 ) {

echo "Já existe o numero gerado na base dados, tem de gerar outro";


} else {


// INSERE OS DADOS NA BD

$cadastrar = mysql_query("INSERT INTO `$tabela` (numero) VALUES ('$numero')", $db);

echo "Gravou o novo numero gerado na base dados";

}

Share this post


Link to post
Share on other sites
KiNgPiTo

Metes um while ( $resultado == 1 ) { //geras aqui um novo numero }

Quando sair do while, o que significa que o resultado já é diferente de 1, então mete na base de dados...

Share this post


Link to post
Share on other sites
pedroserra

Para já não tens aí nada que o faça voltar ao inicio. Possivelmente falta-te um while algures por aí para conseguir esse efeito, tipo:

$Caracteresaceites = '12'; 
$max1 = strlen($Caracteresaceites)-1;

do
{
  $numero = null;
  for($i=0; $i < 2; $i++) { 
  $numero .= $Caracteresaceites{mt_rand(0, $max1)};
  }
} while ($resultado > 0)

$cadastrar = mysql_query("INSERT INTO `$tabela` (numero) VALUES ('$numero')", $db);

echo "Gravou o novo numero gerado na base dados";

E só por mera curiosidade científica: porquê?


Ah e tal não sei quê...

Share this post


Link to post
Share on other sites
rjg

Obrigado a todos pelo vosso tempo e preciosa ajuda, mas continuo encalhado não entendo os loopings, agora fiz desta maneira e dá-me erro de parse.

Parse error: syntax error, unexpected T_VARIABLE, expecting ';' in .......

do

{

$Caracteresaceites = '12';

$max1 = strlen($Caracteresaceites)-1;

$numero = null;

for($i=0; $i < 2; $i++) {

$numero .= $Caracteresaceites{mt_rand(0, $max1)};

}

// $query = mysql_query("SELECT * FROM `$tabela` WHERE numero='$numero'", $db);

// $resultado = mysql_num_rows($query);

} while ($resultado == 1)

$cadastrar = mysql_query("INSERT INTO `$tabela` (numero) VALUES ('$numero')", $db);

Quanto à curiosidade cientifica  :) passo a explicar, pretendo isto para adicionar um numero único e não sequencial a cada cliente como exemplo:

Registo de Cliente sequencial na BD: 234

Numero de referencia de Cliente aleatorio único na BD: 7034

Registo de Cliente sequencial na BD: 235

Numero de referencia de Cliente aleatorio único na BD: 976

Registo de Cliente sequencial na BD: 236

Numero de referencia de Cliente aleatorio único na BD: 896667

Com o nº de referencia de cliente, os clientes podem aceder a diversos conteudos do site e assim torna-se mais seguro do que se fossem numeros sequenciais 1,2,3, ..., 1000, 1001, etc...

Nota: depois nos numeros gerados aleatoriamente vao ser introduzidos outros caracteres alem dos numeros, para tornar a coisa mais segura.

Obrigado desde já e abraço,

Rui

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.