Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

rjg

Penso que seja um loop

Mensagens Recomendadas

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";

}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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ê...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.