Jump to content
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;
}
}

 

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

 

Share this post


Link to post
Share on other 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!!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By ivansilvask83
      Pessoal preciso mostrar na tabela o valor de nome, email e cotas o problema é que não estou conseguindo mostrar a quantidade de cotas porque preciso de 2 variaveis foreach ou 2 foreach.
      segue o codígo:
      <tbody>                                 <?php                                 if(!empty($indicados_nivel)){                                     foreach($indicados_nivel as $indicado){                                         $indicadoInfo = $this->conta_model->InfoUser($indicado); foreach ($cotas as $cota) {                                     ?>                                     <tr>                                     <td width="200">                                          <?php echo $indicadoInfo->nome;?>                                     </td>                                     <td width="250">                                         <?php echo $indicadoInfo->email;?>                                     </td>                                     <td width="50">                                         <?php echo $cota->quantidade; ?> //Aqui Preciso Mostrar a Quantidade de cotas que cada usuario tem//                                     </td>                                 </tr>                                     <?php                                     }                                 }                                 ?> </tbody>  
    • By Pitag346
      Olá pessoal, tudo bem ? Estou com um probleminha, espero que me ajudem...
       
      Seguinte, tenho uma tabela onde faço a exibição de alguns dados, tais como:
       
      NOME, 
      QUANTIDADE, 
      VALOR
       
      Eu quero buscar o valor, em outra tabela e exibir dentro desse while. Porem, ele está exibindo em todos os resultados.
      Seguinte, 
      Cada usuário que efetuar uma vendo do produto tal, é salvo na tabela VENDIDOS, onde o mesmo armazena o "ticket_promote_id". 
      Ao fazer o while das vendas, quero pegar o valor do produto em outra tabela com o "ticket_promote_id" que mencionei acima, porem ao fazer isso, ele me retorna o valor de um produto em todos os resultados do while. 
       
      Alguém sabe por que ? Segue meu código abaixo:
      $valueTotali = 0; while($dados = mysqli_fetch_assoc($sql_promoters)){ $user = $dados['id']; $sqlIngress = $conn->query("SELECT * FROM vendidos WHERE ticket_promote_id = '$user' "); $cont = $sqlIngress->num_rows; if($cont > 0){ $dadosIngress = mysqli_fetch_assoc($sqlIngress); $loteId = $dadosIngress['ticket_lote_id']; $sqlLote = $conn->query("SELECT * FROM ingress WHERE lote_id = '$loteId' "); while($data = mysqli_fetch_assoc($sqlLote)){ $valueTotali += $data['lote_preco']; } }  
      Segue a imagem da tabela com o mesmo valor sendo replicado em todos os resultados:

       
       
    • By PeeWee
      Opaa, o problema é o seguinte: preciso fazer uma busca no BD com esse código:
       
      $buscar = $pdo->prepare("SELECT * FROM `produtos` WHERE `titulo` LIKE '%$textoBusca%'");
              $buscar->execute();
              $retorno = array();
              $retorno['dados'] = '';
              $retorno['qtd'] = $buscar->rowCount();
              if($retorno['qtd'] >= 0){
                  while($conteudo = $buscar->fetchObject()){
                      $retorno['dados'] .= '<a href="#" id="'.$conteudo->id.':'.$conteudo->valor.'">'.utf8_encode($conteudo->titulo).'</a>';
                  }
              }
       
      O problema é que os resultados estão vindo duplicados (no BD só há 3 registros)
       
      Não tenho idéia do que fazer, se alguem puder ajudar agradeço desde já. 
       
    • By gustavodubarbosa
      Estou criando uma página que realize monitoramento de atividades.
      No meu código PHP defini uma variável que busca a data atual, depois passei o parâmetro de conexão com o banco de dados, depois criei um while para buscar as informações, dentro do while criei um if, a condição if é que se a variável data for igual a data cadastrada na atividade, exiba toda a atividade cadastrada. Mas o problema é que o if não está controlando essa condição, está passando direto e exibindo tudo.
      <?php $number = ('23'); $data = date("Y-m-d"); echo "$data"; /*Aqui realizo a conexão com o banco de dados, passo os dados para conectar, caso dê algum erro, o sistema me retorna uma mensagem de erro*/ $conect = mysqli_connect('localhost','root','','projeto_pessoal') or die ('Erro na conexão com o banco de dados'); /*Aqui passo o comando para realizar a busca no banco de dados, aplicando o filtro de pesquisa*/ $result_pesquisa = "SELECT * FROM cadastrar_atividade"; /*Neste momento, mando a execução, preciso passar como parametro a variável com a conexão e a variável com o comando, caso dê erro, será exibido uma mensagem*/ $resultado_pesquisa = mysqli_query($conect, $result_pesquisa); /*Aqui é aberto um laço de repetição para fazer uma varredura no banco de dados, em seguida realizo a exibição do que foi encontrado*/ ?> <h1>Resultado da Pesquisa</h1> <?php while($rows_pesquisa = mysqli_fetch_array($resultado_pesquisa)){ if($rows_pesquisa['prazo'] == $data) echo '<p class="title">'.'ID da atividade: '.'</p>'.'<p class="result">'.$rows_pesquisa['id'].'<br>'.'</p>'; echo '<p class="title">'.'Nome da atividade: '.'</p>'.'<p class="result">'.$rows_pesquisa['nome_atividade'].'<br>'.'</p>'; echo '<p class="title">'.'Descrição da atividade: '.'</p>'.'<p class="result">'.$rows_pesquisa['desc_atividade'].'<br>'.'</p>'; echo '<p class="title">'.'Prioridade: '.'</p>'.'<p class="result">'.$rows_pesquisa['prioridade'].'<br>'.'</p>'; echo '<p class="title">'.'Prazo: '.'</p>'.'<p class="result">'.$rows_pesquisa['prazo'].'<br>'.'</p>'; echo 'carregado'; echo '<hr></hr>'; } ?>  
    • By Rogeriodc9
      Bom dia à todos.

      Estou tendo problemas em colocar um valor, oriundo de uma tabela de dados, no lugar do valor de condição de testes, no comendo While. Abaixo uma parte da expressão, preciso colocar no lugar do valor que condiciona o contador, uma variavel contendo um valor de um registro de uma tabela de dados.

      $conta=1;
          while($conta<=$qpa){

      A variável $qpa deve conter o valor de uma linha de uma tabela. Mas não consigo fazer com que a variável retorne o valor, ela entra na expressão do comando com o valor zerado.

      Estou "pegando" da tabela acordos, a quantidade de parcelas ($qpa), que deve fazer um loop, gerando o parcelamento que será incluído em outra tabela.

      Agradeço se puderem me ajudar.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.