Ir para conteúdo

POWERED BY:

Arquivado

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

Gans

[Resolvido] "Looping" de script até retornar um valor dif

Recommended Posts

Olá pessoal, tenho um script que gera um serial, após gerar ele checa se já existe o serial no banco de dados, se existir ele teria que gerar outro serial e checar novamente, se não existir ele deveria inserir no banco de dados.

 

Fiz o script mas não sei como posso fazer ele executar novamente se o "mysql_num_rows" for maior que 0, sem atualizar a pagina.

 

<?php
$cr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$max = strlen($cr)-1;
$gera = null;
for($i=0; $i < 16; $i++) {
$gera .= $cr{mt_rand(0, $max)};
}
$gera = str_split($gera, 4);
$serial = "$gera[0]-$gera[1]-$gera[2]-$gera[3]";

$exe = mysql_query("SELECT * FROM codigos WHERE codigo = '$serial'");
$cont = mysql_num_rows($exe);

if($cont != 0) {
// EXECUTA NOVAMENTE O SCRIPT DO SERIAL E A VERIFICAÇÃO.
}
else {
        $sql = mysql_query("INSERT INTO `codigos` (`id`, `codigo`, `ativo`) VALUES ('', $serial, 0);");
        echo "Serial Gerado com Sucesso!<br />Serial: $serial";
}
?>

Alguém sabe como posso fazer? tentei algo com o FOR ou DO e não consegui, talvez minha lógica esteja errada.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já tentou while?

 


while($cont != 0) {
 $cr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
 $max = strlen($cr)-1;
 $gera = null;
 for($i=0; $i < 16; $i++) {
 $gera .= $cr{mt_rand(0, $max)};
 }
 $gera = str_split($gera, 4);
 $serial = "$gera[0]-$gera[1]-$gera[2]-$gera[3]";
}

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz uma funcao que gera o serial.. executa .. faz uma requisicao pra verifica se o serial ja existe .. retorna numa varialvel o resultado .. faz uma condicao caso resultado der q ja tem, executa o funcao novamente .. se nao da um retorno do serial =]

 

valww

Compartilhar este post


Link para o post
Compartilhar em outros sites

rodrigopaivaf, eu não consegui fazer uma lógica usando o WHILE... até fiz mas deu um looping infinito

 

Will Fernando, entendi o que você falou mas não consegui fazer... pode me dar um exemplo??

 

Obrigado a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

=] nao testei .. fiz agora meio com pressa mas espero que ajude =] *obs: so como exemplo pra ve a logica.. tem q adapta para o teu caso ..

 

<?php
class Gerador_serial extends Conexao
{
 public $serial;
  function __construct()
    {
      $this->serial = rand(0,9999999999999);
      $sql = "SELECT * Tabela WHERE campo_serial = $this->serial";
      $query = mysql_query($sql,$conn);
      if(mysql_num_rows($query) != 0)
        {
          New self();
        }
      else
        {
          return $this->serial;
        }
    }
}

$a = New Gerador_serial();
echo $a;
?>

valww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Will Fernando, obrigado pela resposta. Então eu fiz as alterações no seu código e não deu certo... Desculpe não sei muito PHP 5...

 

Segue o código:

<?php
include "../conecta.php";
class Gerador_serial 
{
 public $serial;
  function __construct()
    {
		$cr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
		$max = strlen($cr)-1;
		$gera = null;
		for($i=0; $i < 16; $i++) {
			$gera .= $cr{mt_rand(0, $max)};
		}
		$gera = str_split($gera, 4);
		$this->serial = "$gera[0]-$gera[1]-$gera[2]-$gera[3]";
		$sql = "SELECT * FROM chaves WHERE chave = '$this->serial'";
		$query = mysql_query($sql);
		if(mysql_num_rows($query) != 0)
        {
          New self();
        }
		else
        {
          return $this->serial;
        }
    }
}

echo New Gerador_serial();
?> 

Acontece este erro:

Catchable fatal error: Object of class Gerador_serial could not be converted to string in /home/gera.php on line 29

 

Sabe como arruma isso?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que você esta tentando imprimir um objeto, e não existe nenhum méto _toString ai.

Faça o seguinte:

<?php
include "../conecta.php";
class Gerador_serial 
{
 public $serial;
  function __construct()
    {
                $cr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
                $max = strlen($cr)-1;
                $gera = null;
                for($i=0; $i < 16; $i++) {
                        $gera .= $cr{mt_rand(0, $max)};
                }
                $gera = str_split($gera, 4);
                $this->serial = "$gera[0]-$gera[1]-$gera[2]-$gera[3]";
                $sql = "SELECT * FROM chaves WHERE chave = '$this->serial'";
                $query = mysql_query($sql);
                if(mysql_num_rows($query) != 0)
        {
          New self();
        }
                else
        {
          return $this->serial;
        }
    }
}
// Aqui era onde estava o erro
$objeto = New Gerador_serial(); // Aqui cria uma instancia da classe
echo $objeto->serial; // Aqui imprime o serial
?>

EDIT

 

Você disse que tinha dificuldade com PHP5 (OO), então uma outra idéia seria você definir uma variavel no começo como true, exemplo:

$sucesso = false;
Aí criar um loop while:

while (!$sucesso):
   // Faça as operações aqui, aí caso obtenha sucesso altere o valor da variavel $sucesso para true que ele parará o loop
endwhile;

Dá para fazer assim também, só que o outro metodo é mais organizado ;D

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.