Ir para conteúdo
André Monjardim

Alguém poderia me auxiliar pra fazer um loop com foreach para um sorteio?

Recommended Posts

Estou com uma dúvida aqui e não estou conseguindo achar uma solução.

Criei um sistema de sorteio onde corre e salva no banco uma sequências numeral de forma aleatória.

No foreach eu determinei que deverá procurar 5 sequências entre 1 à 10 sem repetir... e caso ele ache no banco, já salvo anteriormente por outro apostador um nº repetido, ele deveria somar + 1 no final do laço e continuar a buscar outro numero até finalizar as 5 sequências. Só que quando ele soma + 1 ele não transfere essa soma para o forech, pois o laço inicia numa linha abaixo.

No trecho abaixo eu simulei um número salvo no banco que seria o "00004" e no loop ele deverá pular esse nº.

Será que consegui passar a minha dúvida?

// GERAR NÚMEROS ALEATÓRIOS
function getRandomNumbers($qnt, $min, $max, $repeat = false, $sort = true,
$sort_order = 0){ if ((($max - $min) + 1) >= $qnt) {
$numbers = array();
while (count($numbers) < $qnt) {
$number = mt_rand($min, $max);
if ($repeat) {
$numbers[] = $number;
} elseif (!in_array($number, $numbers)) {
$numbers[] = $number;
}
}
if($sort){
switch ($sort_order){
case 0:
sort($numbers);
break;
case 1:
rsort($numbers);
break;
}
}
return $numbers;
} else {
return 'A faixa de valores entre $min e $max deve ser igual ou superior à ' .
'quantidade de números requisitados'; }}
// Após declará-la:


foreach (getRandomNumbers(5, 1, 10, false, false) as $number){
$number = str_pad($number , 6 , '0' , STR_PAD_LEFT);

// EXIBIR NA TELA DE TESTE OS NÚMEROS PARA SORTEIO
echo " $number<br>";

// $sql =  mysqli_query($con, "SELECT * FROM sorteios WHERE num_sorteados='$number'");
// while($array = mysqli_fetch_array($sql)){
// $num_sorteados = $array['num_sorteados'];
// }
// TESTE
$num_sorteados = 000004;
//

if($num_sorteados == false or $num_sorteados != $number){
$query = "INSERT INTO sorteios (referencia, num_sorteados) VALUES ('$reference','$number')";
mysqli_query($con, $query) or die (" Erro ao inserir dados sorteados");
}
else
{
$qtde_numeros = $qtde_numeros + 1;
}
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não consegui concluir... na verdade o que preciso é achar um local pra essa procura do loop no banco de participantes anteriores para nunca haver duplicidade de números. Tô aqui quebrando a cabeça, mas tenho pouco conhecimento ainda. Quem puder me ajudar com esse código, será bem vindo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo str_pad() comportamento de s também. Vamos voltar ao antigo estábulo sprintf().

 

<?php
header('Content-Type: text/plain');

$test = [
     1,
     12,
     123,
     1234,
     12345,
     123456
];

foreach($test as $n){
    echo sprintf('%06d' . PHP_EOL, $n);
}
?>

 

 

Resultado:

000001
000012
000123
001234
012345
123456

Talvez não seja uma resposta, mas espero que pode ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 horas atrás, Jack Oliveira disse:

Não entendi bem onde no seu exemplo como faz pra rodar o rand e como eu busco no banco mysql se há duplicidade, pois não poderá repetir. É como se fosse uma loteria federal de 6 dígitos e que somente uma pessoa poderá ser sorteada. Entendeu?

Pelo str_pad() comportamento de s também. Vamos voltar ao antigo estábulo sprintf().

5 horas atrás, Jack Oliveira disse:

<?php
header('Content-Type: text/plain');

$test = [
     1,
     12,
     123,
     1234,
     12345,
     123456
];

foreach($test as $n){
    echo sprintf('%06d' . PHP_EOL, $n);
}
?>

 

 

Resultado:


000001
000012
000123
001234
012345
123456

Talvez não seja uma resposta, mas espero que pode ajudar.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz o proprio mysql escolher e salvar os dados do participante. Assim quando houver rodar novamente ele irá pular os dados cadastrados.

 

Nessa trecho eu criei no banco com o nome "sequencia" com um número fixo de linhas (999999) nº máximo do sorteio da Loteria Federal. 

<?php
include "config.php";
$i = 1;
while($i<= 999999){
$query = "INSERT INTO sequencia (referencia) VALUES ('')";
mysqli_query($con, $query) or die (" Erro ao inserir dados");
echo "$i<br>";
$i++;
}
?>

Abaixo eu peguei a resposta do pagseguro que diz que o pagamento foi aprovado e fiz o sisteminha rodar os números pra sorteio e já indo salvando o nome e a referência do participante... essa referência consta tb no pagseguro, email, etc.

<?php
$sql1 =  mysqli_query($con, "SELECT * FROM sequencia WHERE referencia='$reference'");
$num_reg = mysqli_num_rows($sql1);
if($num_reg == 0){
// GERAR NÚMEROS ALEATÓRIOS
$sql2 =  mysqli_query($con, "SELECT * FROM sequencia WHERE referencia='' ORDER BY rand() LIMIT $qtde_numeros");
while($busca = mysqli_fetch_array($sql2)){
$number = $busca['numero'];
$number = str_pad($number , 6 , '0' , STR_PAD_LEFT);
// testar numero na tela
// echo "$number<br>";
//
$data_hora = date("Y-m-d H:i:s");
$alterar = "UPDATE sequencia SET
referencia = '$reference',
comprador = '$comprador',
data_compra = '$data_hora'
where numero = '$number'";
mysqli_query($con, $alterar) or die ("Erro ao alterar dados");
}
} // FIM DO SORTEIO
?>

E para enviar os nº para o email do participante eu montei dentro do corpo do email o trecho abaixo

$sql =  mysqli_query($con, "SELECT * FROM sequencia WHERE referencia='$reference'");
while($array = mysqli_fetch_array($sql)){
$numero_email = $array['numero'];
$numero_email = str_pad($numero_email , 6 , '0' , STR_PAD_LEFT);
$email_conteudo .= " [ $numero_email ] ";
}

Pronto!! Tudo testado e aprovado!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Willian Simione
      Boa Noite, alguem poderia me ajudar em uma situação, estou tetnando gravar os dados da tela abaixo, porem nao estou conseguindo montar o jeito certo pra ele gravar todos os dados de uma vez

    • Por Giovanird
      Tenho uma tabela com a coluna média (valor decimal) .
       
      cod | media | cod_sala 1 1,98 5 2 2,34 2 3 1,32 5 4 2,51 3 5 1,65 1 6 2,78 5 7 4,95 4 8 0,75 4 9 1,23 1 10 1,63 2 11 1,55 3 Preciso no select MYSQL ou dentro do foreach multiplicar os valores do campo média, de acordo com o fitro por cod_sala
      Exemplo pelo cod_sala: 5
      Sendo o resultdo final: 1,98 * 1,32 * 2,78 = 7,26

      Desde já agradeço!
    • Por Giovanird
      Listo um array pelo foreach e preciso pegar os valores fora do foreach.
      Abaixo tenho o exemplo do foreach com os valores
       
      <?php foreach($turma $rsturma): if(($rsturma['id'] == 1){ echo $rsturma['nome']."<br>"; echo $rsturma['idade']."<br><br>"; } endforeach; //Dentro do foreach me retorna: Luis 13 Maria 12 Carlos 12 Matheus 14 Andréa 12 //Preciso pegar a posição e o valor desta lista $posicao1 = 1; $nome1 = Luis; $posicao2 = 2; $nome2 = Maria; $posicao3 = 3; $nome3 = Carlos; $posicao4 = 4; $nome4 = Matheus; $posicao5 = 5; $nome5 = Andréa;  
    • Por Ruyter
      Estou com problema para resolver uma solução que estou necessitando. Toda ajuda será bem-vinda!
       
      Tenho uma tabela onde há vários registros com um mesmo IDENTIFICADOR e vários INDENTIFICADORES diferentes em uma mesma coluna.
      Como percorrer os registros de uma tabela, com base nos IDENTIFICADORES?
      Preciso também analisar um período por data (>= e <=) e ABSTRAIR deste período o valor MIN e MAX de uma outra coluna
      Esta consulta precisa ser realizada em cada IDENTIFICADOR DISTINTO?
       
      Já utilizei o BETWEEN, mas ao usar o código com o foreach() no PHP ele lê apenas um registro.
      O código que estou trabalhando é este:
       
      SELECT conf_hidro_inatividade, cons_reg_ident_iot, cons_data, MIN(cons_leitura_atual), MAX(cons_leitura_atual), hidro_valvula, hidro_cliente FROM tab_conf_hidro, tab_consumo INNER JOIN tab_hidrometros ON cons_reg_ident_iot = hidro_ident_iot WHERE cons_reg_ident_iot = '20220701001' and conf_hidro_inatividade = 'sim' and hidro_valvula = 'aberta' and cons_data BETWEEN '2022-10-10' and '2022-10-13';  
      Com:

       
      SELECT conf_hidro_inatividade, cons_reg_ident_iot, cons_data, cons_leitura_atual, hidro_valvula, hidro_cliente /*(sem o MIN e MAX na mesma coluna)*/ WHERE cons_reg_ident_iot != ' ' and conf_hidro_inatividade = 'sim' and hidro_valvula = 'aberta';  
      usando dentro do foreach(), percorre todos os registros.
    • Por k9studio
      Meus amigos,
      preciso de um help
      seguinte tenho um credito quero lançar em varias faturas eum foreach até o valor do credito
      tipo exemplo a baixo:
      $credito = 100;
      foreach($shows as $rows){
      fatura 1 Valor 20,00  -100 marca como pago
      fatura 2 Valor 20,00  -80  marca como pago
      fatura 3 Valor 20,00  -60  marca como pago
      fatura 4 Valor 20,00  -40  marca como pago
      fatura 5 Valor 30,00  -20  aqui deixa como não pago
      }
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.