Ir para conteúdo
Fórum Script Brasil
  • 0

php - Gerar números aleatórios, salvar ao banco de dados sem repetição


rfreitas84

Pergunta

Estou tentando fazer um gerador de apostas, onde cada usuário irá gerar uma sequência de números únicos dentro do valor disponível. Consegui gerar os números, mas não consegui eliminar os do banco de dados, em outro código posso eliminar os do banco de dados, mas não gera a quantidade de números. Como gerar a quantidade certa de números, eliminando aqueles que já estão no db.

Neste código eu posso gerar a sequência, mas ela não elimina as que já estão no banco de dados:

  function lottery($maxn = "49", $maxb = "6")
    {

        include_once 'conecta_e1.php';

        $maxn = 60;

        $new_array = array();

        $quer = "SELECT num_sorte FROM tbl_aposta";

        $query = mysqli_query($conexao, $quer);
        while ($query_get = mysqli_fetch_array($query)) {
            $new_array[] = $query_get["numeros_compra"];

            srand((float) microtime() * 1000000);

            while (1 > 0) {
                do { //Aqui gera os números mas não fil
                    $lottery[] = rand(0, $maxn);
                    $lottery = array_unique($lottery);
                    $new_array = array_unique($new_array);
                } while (in_array($lottery, $new_array));

                if (sizeof($lottery) == $maxb) break;
            }
            sort($lottery);
            return implode(", ", $lottery);
            
        }
    }
    $lotterynums = lottery();

    echo $lotterynums;
    exit;

Fazendo assim, eu posso comparar, mas ele só gera um número de cada vez:

do{ 
        $rand = rand(00,04);
}while (in_array($rand, $new_array));

 

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 1
<?php
$loteria=[null,null,null,null,null];
$final=[1,1,1,1,1];
While($loteria<>$final){
    $sorteio=rand(0,4);
    if(!$loteria[$sorteio]){
        echo "Número sorteado $sorteio <br>";
        $loteria[$sorteio]=1;
    }
}

Estudei o seu algoritmo, e acho que o problema está nessa linha:

 

 $quer = "SELECT num_sorte FROM tbl_aposta";

o correto deveria ser:

 

$quer="select * from tbl_aposta";

Não sei como o seu algoritmo funciona, mas ele funciona!

Para eu testar o seu algoritmo, eu fiz essas modificações:

 

<?php
/* mysql
CREATE TABLE `tbl_aposta` (
   `num_sorte` int NOT NULL,
   `numeros_compra` int DEFAULT NULL,
    PRIMARY KEY (`num_sorte`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin 
    
Testando: num_sorte=3; numeros_compra=1    
    */

function lottery($maxn = "49", $maxb = "6"){
    $conexao=new mysqli('localhost','root','','astudy');
    $maxn = 60;
    $new_array = array();
    $quer="select * from tbl_aposta";
    $query = mysqli_query($conexao, $quer);
    while ($query_get = mysqli_fetch_array($query)) {
        $new_array[] = $query_get["numeros_compra"];
        srand((float) microtime() * 1000000);
        while (1 > 0) {
            do { //Aqui gera os números mas não fil
                $lottery[] = rand(0, $maxn);
                $lottery = array_unique($lottery);
                 $new_array = array_unique($new_array);} while (in_array($lottery, $new_array));
                if (sizeof($lottery) == $maxb) break;}
            sort($lottery);
            return implode(", ", $lottery);}  }

$lotterynums = lottery();
echo $lotterynums;
exit;

 

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...