Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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;$numbers[] = $number;
}
}
if($sort){sort($numbers);
break;rsort($numbers);
break;
}
}
return $numbers;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'");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;
}
}>
9 minutos atrás, Jack Oliveira disse:
Ola de uma olha aqui FÓRUM... veja se vai lhe ajudar.
Tô fazendo uma gambiarra aqui e acho que vou conseguir.. já posto o que fiz! Mas obrigado!
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!
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.
>
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.
Já consegui aqui... vou fazer mais uns testes e deixar aqui pra quem quiser. Mas obrigado pela disposição!
Já consegui aqui... vou fazer mais uns testes e deixar aqui pra quem quiser. Mas obrigado pela disposição!
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!!
Ola de uma olha aqui FÓRUM... veja se vai lhe ajudar.