Ir para conteúdo

POWERED BY:

Arquivado

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

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

  • 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.