pensar 1 Denunciar post Postado Outubro 19, 2006 Galera é o seguinte tenho um sistema de baner randomico e esta normal......Mas o que acontece que tem 15 baners cadastrados e tem vez que ele aparece 3 vezes o mesmo baner quando a pagina da um refresh .. tem como ele alternar e mostrar todos os cadastrados e somente depois de alternar todos ele volta ao inicio? segue abaixo o script da listagem dos baner... <?phpinclude("adm/config.php");$data = date("Y-m-d");$sql = mysql_query("SELECT * FROM $tabela_banner WHERE banner_mostrar = 'sim' AND banner_data_inicio <= '$data' AND banner_data_final >= '$data' ORDER BY RAND() LIMIT 1");$aux = mysql_fetch_array($sql);$nome = $aux["banner_nome"];$tipo = $aux["banner_tipo"];$link = $aux["banner_link"];if ($tipo == "flash") {echo "<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0' width='120' height='60'>";echo " <param name='movie' value='$caminho_site/$nome'>";echo " <param name='quality' value='high'>";echo " <embed src='$caminho_site/$nome' quality='high' pluginspage='http://www.macromedia.com/go/getflashplayer' type='application/x-shockwave-flash' width='120' height='60'></embed>";echo "</object>";} else {if ($link == "") {echo "<img src='$caminho_site/$nome' border='0'>";} else {echo "<a href='$link' target=_blank><img src='$caminho_site/$nome' border='0'></a>";}}?> Compartilhar este post Link para o post Compartilhar em outros sites
Apokalypse 0 Denunciar post Postado Outubro 19, 2006 As vezes acontece sim, pois você tem poucos banners, pode acontecer de repetir. Compartilhar este post Link para o post Compartilhar em outros sites
pensar 1 Denunciar post Postado Outubro 19, 2006 No total serao 30 cadastrados...È possivel ele listar sem repetir ate o ultimo cadastrado? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Outubro 19, 2006 sim se você usar outro esquema, tipo indo por ordem que ta gravado no banco ou montando outro esquema onde ele salva num temp o id de qual ja foi e nao mostra depois que acabou zera e começa de novo Compartilhar este post Link para o post Compartilhar em outros sites
pensar 1 Denunciar post Postado Outubro 19, 2006 Ah sim Fabyo ..Teria como você me dar um exemplo pra mim ... no caso de ordenar por odem do banco .. Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Outubro 19, 2006 só tirar o ORDER BY RAND() Compartilhar este post Link para o post Compartilhar em outros sites
Apokalypse 0 Denunciar post Postado Outubro 19, 2006 Eu já fiz algo parecido, para receitas que eu queria que aparecessem apenas 1 vez até todas serem exibidas, sem repetir; Como você pode fazer: adiciona a tabela de banners um campo chamado 'exibido' do tipo tinyint. Ai quando você for fazer teu sql, faz assim: $sql = 'select * from banners where exibido = 0 order by rand() limit 1';ai você pega o id deste resultado e faz isso: $sql = 'update banners set exibido = 1 where id = ' . $id;ai quando você executar o primeiro sql, e retornar 0 registros, significa que todos já foram exibidos, então você precisa re-comecar o loop, definindo o campo exibido para 0. $sql = 'update banners set exibido = 0';Ai começa tudo denovo...... Espero q tenha entendido...abçs; Compartilhar este post Link para o post Compartilhar em outros sites
pensar 1 Denunciar post Postado Outubro 19, 2006 Eu usei a dica do fabio mas ele nao randomizou...Vou ver agora a sua dica Apokalipse Compartilhar este post Link para o post Compartilhar em outros sites
Apokalypse 0 Denunciar post Postado Outubro 19, 2006 Eu usei a dica do fabio mas ele nao randomizou...Vou ver agora a sua dica ApokalipseDo jeito q eu passei, além de ser randômico, ele nunca vai repetir o registro, pois a cada exibição ele 'desabilita' o banner, e quanto todos forem exibidos, ele re-habilita todos.Se tu não manjar de fazer usando oop, crie funções que fazem essa execução, ai fica mais facil.Exemplo$id = ProximoBanner(); // pega o proximo id, e atualiza o 'exibido' para 1ReiniciaLoop(); // define todos os registros para 'exibido' = 0// e assim por diante, facilita a programação, e já é um 'inicio' para o oop. Compartilhar este post Link para o post Compartilhar em outros sites
pensar 1 Denunciar post Postado Outubro 19, 2006 Apokalipse criei o campo exibido como você falou ..Tem como dar uma clareada mais nessas funções com o Sql tipo onde eu colocaria elas no script... Compartilhar este post Link para o post Compartilhar em outros sites
pensar 1 Denunciar post Postado Outubro 19, 2006 Seria mais ou menos isso ... eu criei a pagina funcoes.php AGora como implementaria ela melhor no script de visualização?? funcoes.php <?php include("adm/config.php"); // function ProximoBaner() { $sql = 'update $tabela_banner set exibido = 1 where id = ' . $id; } function ReiniciaLoop() { $sql = 'update $tabela_banner set exibido = 0'; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Apokalypse 0 Denunciar post Postado Outubro 19, 2006 To te dando o bagulho mastigadinho hein..eheh Não testei pra ver se ta funcionando, mas é basicamente isso...agora se vira rapaz... ;) function AtualizaBanner($id) // atualiza o banner{ $sql = 'UPDATE ' . $GLOBALS['tabela_banner'] . ' SET exibido = 1 WHERE id = ' . $id; mysql_query($sql) or die(mysql_error());}function ReiniciaLoop() // define exibido = o para todos os itens{ $sql = 'UPDATE ' . $GLOBALS['tabela_banner'] . ' SET exibido = 0'; mysql_query($sql) or die(mysql_error());}function PegaDadosBanner() // retorna dados do banner{ $sql = 'SELECT * FROM ' . $GLOBALS['tabela_banner'] . ' WHERE exibido = 0 ORDER BY RAND() LIMIT 1'; $query = mysql_query($sql) or die(mysql_error()); if (!mysql_num_rows($query)) { ReiniciaLoop(); $sql = 'SELECT * FROM ' . $GLOBALS['tabela_banner'] . ' WHERE exibido = 0 ORDER BY RAND() LIMIT 1'; $query = mysql_query($sql) or die(mysql_error()); } $resultado = mysql_fetch_array($query); AtualizaBanner($resultado['id']); return $resultado;}// uso$DadosBanner = PegaDadosBanner(); // joga para $DadosBanner os valores do BD sobre o banner atual. É soh adaptar agora. abçs; Compartilhar este post Link para o post Compartilhar em outros sites
pensar 1 Denunciar post Postado Outubro 19, 2006 beleza vou testar aqui Compartilhar este post Link para o post Compartilhar em outros sites
pensar 1 Denunciar post Postado Outubro 21, 2006 Apokalipse eu testei aqui o codigo com as funções e verifiquei no banco esta funcionando conforme você disse. Agora estou com a dificuldade de implementar ele no script para visualizar.... Alguem ai pode me ajudar ...Segue os scripts abaixo function AtualizaBanner($id) // atualiza o banner[code]{ $sql = 'UPDATE ' . $GLOBALS['tabela_banner'] . ' SET exibido = 1 WHERE id = ' . $id; mysql_query($sql) or die(mysql_error());}function ReiniciaLoop() // define exibido = o para todos os itens{ $sql = 'UPDATE ' . $GLOBALS['tabela_banner'] . ' SET exibido = 0'; mysql_query($sql) or die(mysql_error());}function PegaDadosBanner() // retorna dados do banner{ $sql = 'SELECT * FROM ' . $GLOBALS['tabela_banner'] . ' WHERE exibido = 0 ORDER BY RAND() LIMIT 1'; $query = mysql_query($sql) or die(mysql_error()); if (!mysql_num_rows($query)) { ReiniciaLoop(); $sql = 'SELECT * FROM ' . $GLOBALS['tabela_banner'] . ' WHERE exibido = 0 ORDER BY RAND() LIMIT 1'; $query = mysql_query($sql) or die(mysql_error()); } $resultado = mysql_fetch_array($query); AtualizaBanner($resultado['id']); return $resultado;}// uso$DadosBanner = PegaDadosBanner(); // joga para $DadosBanner os valores do BD sobre o banner atual. Script de visualização <?phpinclude("adm/config.php");$data = date("Y-m-d");$sql = mysql_query("SELECT * FROM $tabela_banner WHERE banner_mostrar = 'sim' AND banner_data_inicio <= '$data' AND banner_data_final >= '$data' ORDER BY RAND() LIMIT 1");$aux = mysql_fetch_array($sql);$nome = $aux["banner_nome"];$tipo = $aux["banner_tipo"];$link = $aux["banner_link"];if ($tipo == "flash") {echo "<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0' width='120' height='60'>";echo " <param name='movie' value='$caminho_site/$nome'>";echo " <param name='quality' value='high'>";echo " <embed src='$caminho_site/$nome' quality='high' pluginspage='http://www.macromedia.com/go/getflashplayer' type='application/x-shockwave-flash' width='120' height='60'></embed>";echo "</object>";} else {if ($link == "") {echo "<img src='$caminho_site/$nome' border='0'>";} else {echo "<a href='$link' target=_blank><img src='$caminho_site/$nome' border='0'></a>";}}?> Compartilhar este post Link para o post Compartilhar em outros sites