Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

  • 1
  • 3
  • 4
  • 5
  • 6
  • 7
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

Re: Banner aleatório sem repetição

20-03-2017 16:26

Estou pesquisando bastante sobre isso, mas os exemplos não "casam" com o array do código constante do arquivo criado. Normalmente somente aparece $array com os valores entre parêntesis separados por vírgula. Pelo vídeo que você passou parece ser array simples e o usado neste código seria array com posição.

Eu tentei mexer dentro do foreach do seu código, mas não consegui.

Tentei com for, chega a informar quantos resultados há na coluna grupo iguais ao valor da variável $grupo que vem por $_GET, mas não somados, e preciso da soma.

Fiz isso, mas creio estar errado (ressaltando que não soma):

for($i = 0; $i < count($banner); $i++) { if($banner[$i][1]==$grupo) { $conta_grupo = count($banner[$i][1]); echo $conta_grupo; echo "-"; echo "variável conta_grupo"; echo "<br>"; } }

Essa contagem eu vou compará-la com a variável $quantidade. Pode ser depois do foreach ou tem de ser antes? Como faço a linha de contagem como você sugeriu?
0
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

Re: Banner aleatório sem repetição

20-03-2017 16:29

Aliás, eu vou definir a variável $quantidade a partir dessa contagem.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: Banner aleatório sem repetição

20-03-2017 16:36

Com esse exemplo ai você pode criar uma variável e ir incrementando dentro do if do grupo.

$v = 0; // variável criada for($i = 0; $i < count($banner); $i++) { if($banner[$i][1]==$grupo) { $v++; // caso seja do grupo o valor é incrementado, 1, 2, etc. $conta_grupo = count($banner[$i][1]); echo $conta_grupo; echo "-"; echo "variável conta_grupo"; echo "<br>"; } } echo $v; // exibindo o total

Lembrando que o echo de exibição deve estar fora do for e do if.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

Re: Banner aleatório sem repetição

20-03-2017 16:52

Deu certo. Obrigado. Ainda tenho outras dúvidas sobre o array.
1
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

Re: Banner aleatório sem repetição

22-03-2017 12:05

Há uma outra situação.

Exibindo conforme a consulta no banco de dados, eu filtro através do grupo enviado por GET, e, também por um grupo referente à exibição na home page e outro referente à exibição em todas as páginas, conforme abaixo:

<?php /* Grupo 1 - frutas (exibe banners da categoria frutas); Grupo 2 - legumes (exibe banners da categoria legumes); Grupo 3 - verduras (exibe banners da categoria verduras); Grupo 4 - home (exibe banners da categoria home page); Grupo 5 - todas as páginas (exibe banners da categoria todas as páginas) Ainda há o tipo, mas não quero complicar agora. */ if($_GET['grupo'] == '4'){ $consulta = "select * from banners where grupo = '4' or grupo = '5' order by RAND()"; }//fecha if($_GET['grupo'] == '4'){ elseif($_GET['grupo'] < '4'){ $consulta = "select * from banners where grupo = '".$_GET['grupo']."' or grupo = '5' order by RAND()"; }//fecha elseif($_GET['grupo'] < '4'){ else{ if($_GET['grupo'] == '5'){ $consulta = "select * from banners where grupo = '5' order by RAND()"; }//fecha if($_GET['grupo'] == '5'){ }//fecha else{ ?>

Como posso, usando o array, filtrar, além do grupo que vem por GET, pelos grupos "home page" e "todas as páginas"?

Código original:

<?php echo "<meta http-equiv=\"refresh\" content=\"2\">"; // banners a serem exibidos do grupo //echo $_GET["grupo"]; echo "-"; echo "variável grupo"; echo "<br>"; $grupo = $_GET["grupo"]; //echo $grupo; echo "-"; echo "variável grupo"; echo "<br>"; // lista de banners $banner = Array(); include("banners.php"); //var_dump($banner); $v = 0; // variável criada for($i = 0; $i < count($banner); $i++) { if($banner[$i][1]==$grupo) { $v++; // caso seja do grupo o valor é incrementado, 1, 2, etc. $conta_grupo = count($banner[$v][1]); //echo $conta_grupo; echo "-"; echo "variável conta_grupo"; echo "<br>"; }//fecha if($banner[$i][1]==$grupo) { }//fecha for($i = 0; $i < count($banner); $i++) { //echo $v; echo "-"; echo "variável v"; echo "<br>";// exibindo o total $conta = $v; //echo $conta; echo "-"; echo "variável conta"; echo "<br>"; if($conta > 4){ $quantidade = 4; }//fecha if($conta > 4){ else{ if($conta <= 4){ $quantidade = $conta - 1; }//fecha if($conta <= 4){ }//fecha else{ //echo $quantidade; echo "-"; echo "variável quantidade"; echo "<br>"; // filtrando e removendo a chave de itens diferente de 1 foreach($banner AS $k => $v){ if($v[1]!=$grupo){ //if($v[1]!=$grupo) { unset($banner[$k]); }//fecha foreach($banner AS $k => $v) { }//fecha if($v[1]!=$grupo){ // reordenando o array após o unset $banner = array_values($banner); if(count($banner) >= $quantidade){ $sorteado = array(); while(count($sorteado) <= ($quantidade-1)){ $numero = rand(0,count($banner)-1); //sorteia um numero if(!in_array($numero,$sorteado)){ $sorteado[] = $numero; }//fecha if(!in_array($numero,$sorteado)){ }//fecha while(count($sorteado) <= ($quantidade-1)){ }//fecha if(count($banner) >= $quantidade){ //exibe banners for($i=0;$i<count($sorteado);$i++){ $img = $banner[$sorteado[$i]][0]; $lnk = $banner[$sorteado[$i]][1]; $alt = $banner[$sorteado[$i]][2]; /* echo $img; echo "&nbsp;-&nbsp;"; echo "variável bnd"; echo "<br>"; echo $lnk; echo "&nbsp;-&nbsp;"; echo "variável lnk"; echo "<br>"; echo $alt; echo "&nbsp;-&nbsp;"; echo "variável alt"; echo "<br>"; */ echo "<a href=\"$lnk\" title=\"$alt\"><img src=\"$img\" alt=\"$alt\"></a>"; } ?>

Grato.
0
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

Re: Banner aleatório sem repetição

22-03-2017 12:30

Fiz isso:

$valor1 = $_GET["grupo"]; $valor2 = 4; $valor3 = 5; $grupo = ($valor1 || $valor2 || $valor3); echo $grupo; echo "-"; echo "variável grupo"; echo "<br>";

Estou no caminho?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: Banner aleatório sem repetição

22-03-2017 14:27

Se os grupos serão sempre fixos você pode fazer como fez nessa query

select * from banners where grupo = '".$_GET['grupo']."' or grupo = '5' order by RAND()
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

Re: Banner aleatório sem repetição

22-03-2017 14:50

Há como eu fazer isso desconsiderando o banco de dados? Você sugeriu que se usasse o arquivo contendo os dados do banco de dados para não sobrecarregar o banco de dados. E é o que estou tentando fazer. Vamos supor que eu não estivesse trabalhando com banco de dados. Você pode dizer como se pode fazer isso somente com o array sem o banco de dados? O que fiz na mensagem anterior está no caminho? Grato.
0
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

Re: Banner aleatório sem repetição

22-03-2017 15:51

Estou pesquisando sobre variáveis e vi a possibilidade de se criarem funções com elas.

Há como se criar uma função com os dados abaixo, na qual a variável $grupo pode assumir o valor da variável $valor1, da variável $valor2 ou da variável $valor3?

$valor1 = $_GET["grupo"]; $valor2 = 4; $valor3 = 5; $grupo = ($valor1 || $valor2 || $valor3); echo $grupo; echo "-"; echo "variável grupo"; echo "<br>";

0
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

Re: Banner aleatório sem repetição

22-03-2017 16:12

O que eu pretendo fazer pode ser implementado com o código abaixo? Ele está numa postagem neste link: http://pt.stackoverflow.com/questions/1 ... 900#121900. O seu autor diz que o usa sempre que uma variável pode assumir diversos valores.

$possibilidades = array( 'fulano@email.com', 'ciclano@email.com', ); if(in_array($email, $possibilidades)){ // O valor assumir alguma das possibilidades } if(!in_array($email, $possibilidades)){ // O valor não assumir nenhuma das possibilidades }


O autor também diz: "O in_array pode ser usado como um || para várias possibilidades.
Também facilitando a inserção de novas possibilidades
".

É pertinente? Você pode me ajudar nisso, também?

Grato.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: Banner aleatório sem repetição

22-03-2017 16:40

Quanto ao post 133 o script da consulta é só para gerar os arrays para a rotação de banners, não?

Para trabalhar com grupos você tem que trabalhar com array.

Já o in_array eu não entendi como pretende usar os valores do grupo. Explica mais detalhes de como pretende usar o grupo.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

Re: Banner aleatório sem repetição

22-03-2017 17:49

Além do valor que GET receberá, eu preciso que a variável $grupo possa assumir outros 2 valores, assim:

$valor1: $_GET["grupo"];
$valor2: 4;
$valor3: 5.


A variável $valor1 diz respeito aos banners que serão exibidos numa página de acordo com aquela categoria; a variável $valor2 diz respeito aos banners que serão exibidos somente na home page; e a variável $valor3 diz respeito aos banners que serão exibidos em todo o site.

Os banners referentes à variável $valor3 serão exibidos conjuntamente com os banners referentes às demais variáveis. Esse esquema eu já fiz.

Para ilustrar, vou repetir o que coloquei na minha mensagem 130:

Grupo 1 - frutas (exibe banners da categoria frutas); Grupo 2 - legumes (exibe banners da categoria legumes); Grupo 3 - verduras (exibe banners da categoria verduras); Grupo 4 - home (exibe banners da categoria home page); Grupo 5 - todas as páginas (exibe banners da categoria todas as páginas)

Grupos 1 a 3 dizem respeito ao que vem por GET e se referem à variável $valor1.

O grupo 4 se refere à variável $valor2.

O grupo 5 se refere à variável $valor3.

Eu preciso, então, que a variável $grupo assuma o valor da variável $valor1 ou o valor da variável $valor2 ou o valor da variável $valor3.

Eu mesclei o código que postei na mensagem 135 com o código deste link: http://www.mauricioprogramador.com.br/p ... ay-com-php:

$array = array('valor1', 'valor2', 'valor3'); if(in_array('valor1', $array)) { echo 'O valor existe no array'; } else { echo 'o valor não existe no array'; }


Consegui exibir o valor das variáveis $valor1, $valor2 e $valor3:

echo $_GET["ca1"]; echo "-"; echo "variável GET ca1"; echo "<br>"; $valor1 = 37; $valor2 = 38; $valor3 = $_GET["ca1"]; $array = array($valor1, $valor2, $valor3); //$array = array('valor1', 'valor2', 'valor3'); if(in_array($valor1, $array)){ echo "O valor $valor1 existe no array"; echo "<br>"; } else{ echo "o valor não existe no array"; echo "<br>"; } if(in_array($valor2, $array)){ echo "O valor $valor2 existe no array"; echo "<br>"; } else{ echo "o valor não existe no array"; echo "<br>"; } if(in_array($valor3, $array)){ echo "O valor $valor3 existe no array"; echo "<br>"; } else{ echo "o valor não existe no array"; echo "<br>"; }

E consegui exibir a variável $grupo conforme as variáveis do código acima:

if(in_array($valor1, $array)){ $grupo = $valor1; echo $grupo; echo " - "; echo "variável grupo"; echo "<br>"; } if(in_array($valor2, $array)){ $grupo = $valor2; echo $grupo; echo " - "; echo "variável grupo"; echo "<br>"; } if(in_array($valor3, $array)){ $grupo = $valor3; echo $grupo; echo " - "; echo "variável grupo"; echo "<br>"; }

Isso está correto? Há que se fazer outra coisa usando || ou or referente à variável $grupo?

Se o que eu fiz estiver correto, mas estiver com excesso de código, como posso fazer isso de forma mais simplificada?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: Banner aleatório sem repetição

22-03-2017 18:08

Eu ainda não entendi a lógica que pretende desenvolver.

$array = array($valor1, $valor2, $valor3);

Se os valores do array são variáveis, ou seja, podem mudar para que comparar?

if(in_array($valor1, $array) || ){

Geralmente se usa valores fixos no array para comparar com valores variáveis com in_array.

$array = Array(1,2,3,4); if(in_array(isset($_GET['valor']), $array)) { echo "o valor do GET está no array"; }

Nesse exemplo eu verifico se o valor enviado por GET está presente no array.

A questão de $grupo veja se é isso:

<?php $valor2 = "abcd"; $grupo = ""; if(isset($valor1)) { $grupo = $valor1; } if(isset($valor2)) { $grupo = $valor2; } if(isset($valor3)) { $grupo = $valor3; } echo $grupo; ?>

Nesse exemplo existe o bloco de if. Você pode definir no início qual será a variável. $valor1, $valor2 ou $valor3.
Qual for definida no início $grupo passa a ter o mesmo valor.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

Re: Banner aleatório sem repetição

22-03-2017 19:22

Sobre o que você referiu no princípio, coloquei daquela forma por conta de minha falta de conhecimento, apenas para ilustrar. Na verdade, o que vem por GET é que caberia numa variável. Os outros valores, 4 e 5, ao menos por enquanto, são fixos.

Sobre o código que você postou ao final, não o compreendi bem.

Eu pretendo que a variável $grupo assuma o valor 4, ou o valor 5, ou o valor da variável $_GET["grupo"].

Como devo fazer isso?

Grato.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: Banner aleatório sem repetição

22-03-2017 21:15

Para você definir o valor para uma variável ela tem que existir ou se passada como no caso do GET.

Foi o que fiz nesse exemplo do post 138. $grupo vai ter o valor de umas das variáveis caso elas existam.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

Re: Banner aleatório sem repetição

23-03-2017 01:15

Não compreendi. Onde entram os valores fixos 4 e 5, se não devo inseri-los numa variável?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: Banner aleatório sem repetição

23-03-2017 06:45

Talvez a lógica usada esteja incompatível com os valores que você tem.

Eu até agora não entendi muito bem o que você quer fazer.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

Re: Banner aleatório sem repetição

23-03-2017 17:24

Categoria 1: frutas (valor vem por GET).
Categoria 2: verduras (valor vem por GET).
Categoria 3: legumes (valor vem por GET).
Categoria 4: home Page.
Categoria 5: todo o site (exibe conjuntamente com categorias anteriores).

Preciso que a variável $grupo assuma os valores 1, 2 ou 3 vindos por get, OU o valor 4 OU o valor 5.

Quando se envia por GET serão exibidos na página banners referentes às categorias 1, 2 ou 3 MAIS os banners da categoria 5.

Quando se acessa a home page, serão exibidos banners da categoria 4, MAIS os banners da categoria 5.
0
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

Re: Banner aleatório sem repetição

23-03-2017 19:27

Entendeu?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: Banner aleatório sem repetição

23-03-2017 19:52

Acho que agora entendi. Você pode simplesmente capturar a categoria e trabalhar com if.

Testa esse exemplo:

<?php $grupo = Array(); // quando se envia por get terá o grupo + 5 if(isset($_GET['grupo'])=='1' || isset($_GET['grupo'])=='2' || isset($_GET['grupo'])=='3') { $grupo[] = $_GET['grupo']; $grupo[] = 5; } else { // quando não se envia pelo GET, grupo terá 4 e 5 // relativo a home page $grupo[] = 4; $grupo[] = 5; } print_r($grupo); ?>

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

Re: Banner aleatório sem repetição

24-03-2017 07:56

Obrigado. Vou testar o que você fez.

Mas, apenas para ilustrar, conforme minha tentativa leiga, é o seguinte:

No código abaixo, eu consigo exibir o valor das variáveis $grupo1, $grupo2 e $grupo3.

$valor1 = $_GET["grupo"]; $valor2 = 4; $valor3 = 5; $array = array($valor1, $valor2, $valor3); if(in_array($valor1, $array)){ $grupo1 = $valor1; echo $grupo1; echo " - "; echo "variável grupo1"; echo "<br>"; } if(in_array($valor2, $array)){ $grupo2 = $valor2; echo $grupo2; echo " - "; echo "variável grupo2"; echo "<br>"; } if(in_array($valor3, $array)){ $grupo3 = $valor3; echo $grupo3; echo " - "; echo "variável grupo3"; echo "<br>"; }

Eu preciso que a variável $grupo assuma o valor da variável $grupo1 OU da variável $grupo2 OU da variável $grupo3.

Algo como (isso é um chute, apenas para exemplificar):

$grupo = ($grupo1 || $grupo2 || $grupo3);

0
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

Re: Banner aleatório sem repetição

24-03-2017 08:37

No seu código, quando se envia por GET, está exibindo, supondo que o valor de GET seja 1: Array ( [0] => 1 [1] => 5 ).

Mas parece que quando não se envia por GET, o que está no else não está funcionando, pois, ao invés de exibir Array ( [0] => 4 [1] => 5 ) está exibindo Array ( [0] => [1] => 5 ).

E me parece que o código de exibição não está reconhecendo o valor de $grupo do array.

Como pode ser feita a exibição de $grupo conforme coloquei em minha mensagem anterior?

Algo que tenha o efeito disso?

$grupo = ($grupo1 || $grupo2 || $grupo3);

Grato.
0
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

Re: Banner aleatório sem repetição

24-03-2017 08:41

Cara, parece que isto $grupo = ($grupo1 || $grupo2 || $grupo3); está funcionando. Está correto?
0
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1254
Sexo: Masculino

Re: Banner aleatório sem repetição

24-03-2017 09:06

Não está funcionando. Nem do jeito que coloquei abaixo:

if($_GET["grupo"] != ""){ $grupo = ($grupo1 || $grupo3); } if($_GET["grupo"] == ""){ $grupo = ($grupo2 || $grupo3); } echo $grupo; echo " - "; echo "variável grupo"; echo "<br>";

Estão sendo exibidos banners de todos os grupos. O que vem por GET não é respeitado.

Mas o "espírito" do que pretendo fazer é isso.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17583
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: Banner aleatório sem repetição

24-03-2017 10:06

Você só pode fazer isso

$grupo = ($grupo1 || $grupo2 || $grupo3);

Se você usar array, porque ai você pode dizer que $grupo pode ser um dos valores.

O exemplo que eu postei é de acordo com que você postou.

Categoria 1: frutas (valor vem por GET).
Categoria 2: verduras (valor vem por GET).
Categoria 3: legumes (valor vem por GET).
Categoria 4: home Page.
Categoria 5: todo o site (exibe conjuntamente com categorias anteriores).

Preciso que a variável $grupo assuma os valores 1, 2 ou 3 vindos por get, OU o valor 4 OU o valor 5.


No exemplo que eu postei na mensagem 145, se você enviar um valor por GET esse valor vai alimentar o array grupo.
Preciso que a variável $grupo assuma os valores 1, 2 ou 3 vindos por get

Se não enviar valores por GET $grupo vai ter os valores 4 ou 5. Mas ai você precisa definir uma regra para qual dos valores será mostrado.
0
A melhor hospedagem para o seu site HostGator!
  • 1
  • 3
  • 4
  • 5
  • 6
  • 7

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado