Gans 0 Denunciar post Postado Setembro 23, 2009 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
rodrigopaivaf 0 Denunciar post Postado Setembro 23, 2009 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
Will Fernando 2 Denunciar post Postado Setembro 23, 2009 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
Gans 0 Denunciar post Postado Setembro 23, 2009 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
Will Fernando 2 Denunciar post Postado Setembro 24, 2009 =] 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
Gans 0 Denunciar post Postado Setembro 24, 2009 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
lucaswxp 22 Denunciar post Postado Setembro 24, 2009 É 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
Gans 0 Denunciar post Postado Setembro 24, 2009 lucaswxp muito obrigado deu certo os dois códigos... Pois é ainda não mexi muito com PHP 5 http://forum.imasters.com.br/public/style_emoticons/default/blush.gif Obrigado a todos pelas respostas... Compartilhar este post Link para o post Compartilhar em outros sites