Ricard0 0 Denunciar post Postado Janeiro 26, 2011 Lá vem eu denovo pedindo ajuda :lol: Estava fazendo um site, consegui fazer meu próprio painel para adicionar/deletar/editar noticias, ai fiz a conexão com o banco de dados do site que fiz, mais tem uma parte do site que vou fazer para aparecer os ultimos tópicos criado no forúm, só que não sei como criar 2 conexões uma para cada função.. Queria que a função 1 fizesse a conexao com a database do site e a função 2 fizesse conexao com a database do forum. Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Janeiro 27, 2011 Queria que a função 1 fizesse a conexao com a database do site e a função 2 fizesse conexao com a database do forum. Você pode utilizar Singleton Registry e armazenar a referência para as duas bases: Registry.php <?php class Registry { /** * @var Registry */ private static $instance; /** * @var ArrayObject */ private $storage; /** * Constroi o objeto do Registry */ private function __construct(){ $this->storage = new ArrayObject(); } /** * Recupera um valor armazenado no registro * @param string $key Chave do registro * @throws RuntimeException Se a chave não for encontrada */ public function get( $key ){ if ( $this->storage->offsetExists( $key ) ){ return $this->storage->offsetGet( $key ); } else { throw new RuntimeException( 'Chave não encontrada' ); } } /** * Recupera uma instância única de Registry * @return Registry */ public static function getInstance(){ if ( self::$instance == null ){ self::$instance = new Registry(); } return self::$instance; } /** * Registra um novo valor utilizando uma chave * @param string $key Chave do registro * @param mixed $value Valor que será registrado */ public function set( $key , $value ){ $this->storage->offsetSet( $key , $value ); } /** * Remove o registro de uma determinada chave * @param string $key Chave que será removida * @throws RuntimeException Se a chave não for encontrada */ public function remove( $key ){ if ( $this->storage->offsetExists( $key ) ){ $this->storage->offsetUnset( $key ); } else { throw new RuntimeException( 'Chave não encontrada' ); } } } Registrando: <?php $registry = Registry::getInstance(); $registry->set( 'site' , new PDO( 'mysql:host=host_do_site;dbname=base_do_site' , 'usuario' , 'senha' ) ); $registry->set( 'forum' , new PDO( 'mysql:host=host_do_forum;dbname=base_do_forum' , 'usuario' , 'senha' ) ); Usando em algum lugar: <?php $pdoSite = Registry::getInstance()->get( 'site' ); $stm = $pdoSite->query( 'SELECT alguma_coisa FROM base_do_site;" ); <?php $pdoForum = Registry::getInstance()->get( 'forum' ); $stm = $pdoForum->query( 'SELECT outra_coisa FROM base_do_forum;" ); ;) Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Janeiro 27, 2011 Jão e o cara dos OO ;D .. acho que da pra fazer assim tbm $connect = mysql_connect("local","root","123"); $db = mysql_select_db("db1",$connect); $db2 = mysql_select_db("db2",$connect); Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Janeiro 27, 2011 Dá sim Andrey. Bastaria, então, usar o segundo argumento de mysql_query() e cia., o qual especifica qual link de conexão usar. O problema desse uso é a falta de portabilidade em sistemas já criados, que ignoram esse parâmetro, já que o último link aberto será usado. Acontece que a partir do momento que o link referente ao Fórum tiver sido usado, todas as chamadas à mysql_query() (e cia.) ocorrerão sobre o link do Fórum, e vários erros poderiam ocorrer. Usando um Registry aliado à PDO (que por si só já é excelente) garante que você use os métodos de consulta sobre o link que quiser, a hora que quiser. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Janeiro 27, 2011 sim .. e ai da pro cara fazer uma classe pra trabalhar com query em um banco .. e query em outro .. como tambem da pra fazer a classe pra o registro dos links como o joão postou :clap: mais como você disse .. 'sistemas já criados' fica dificil mesmo .. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Ricard0 0 Denunciar post Postado Janeiro 27, 2011 Parece que deu certo, mais to precisando de uma pequena ajudinha nessa parte olha, aqui está a parte onde eu usei para aparecer os tópicos do forum : <div id="conteudo"> <div class="titulonoticias"><h1>Ultimas Noticias</h1></div> <div id="noticias_lista"> <div id="fundonoticia"> <?php include"scripts/noticias.php"; ?> </div> </div> <div id="noticias_forum"> <div class="titulonoticias"><h1>Ultimas Noticias do Forúm</h1></div> <div id="fundonoticia"> <?php $limite = '5'; $pdoForum = Registry::getInstance()->get( 'forum' ); $stm = $pdoForum->query("SELECT title, start_date, starter_name FROM topics ORDER BY start_date DESC LIMIT $limite"); if(@mysql_num_rows($pdoForum) <= '0'){ echo "Nenhuma notícia encontrada"; }else{ while($res_stm=mysql_fetch_array($pdoForum)){ $title = $res_noticias[0]; $start_date = $res_noticias[1]; $starter_name = $res_noticias[2]; $autor = $res_noticias[3]; $pega_autor = mysql_query("SELECT name FROM members WHERE id = '$autor'") or die(mysql_error()); if(@mysql_num_rows($pega_autor) <= '0') echo 'Erro ao selecionar o usuario'; else{ while($res_autor=mysql_fetch_array($pega_autor)){ $autor_do_post = $res_autor[0]; ?> <?php echo $title; ?><?php echo $start_date; ?><?php echo $starter_name; ?><?php echo $autor; ?> </div><!--noticias forum--> <br /> <div id="ranking"> <div class="titulonoticias"><h1>Ranking PvP</h1></div> <div id="fundonoticia"> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> </div> <br /> </div><!--ranking--> </div> <?php } } ?> <?php } } ?> Vejam se ta certo, pois no meu site só fica escrito : "Nenhuma notícia encontrada." Mais o IPB sempre vem com um tópico... Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Janeiro 27, 2011 Primeiro execute a query à parte, via phpMyAdmin por exemplo. Ela retorna algo? Se não, então ela está errada, se sim, então é o código. Se for no código, remova a supressão de erros (o arroba). Daí você pode ignorar o while porque a PDO tem um método chamado fetchAll() que faz todo processo do loop automaticamente. Quanto ao usuário autor da mensagem, das duas uma: Ou você inclui, se existir, o campo da tabela que contém o nome o autor OU, depois de retornar, você atribui à uma variável a informação do primeiro índice de todos os que forem retornados. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Janeiro 27, 2011 eu tambem tenho esse metodo hehe public function fetchAll(){ $arr = array(); while( $this->dados = mysql_fetch_assoc( $this->query ) ){ $arr[] = $this->dados; } return $arr; } ele deve ser usado em fluent interface sobre a minha função query .. vo postar tudo .. public function query( $sql ) { $this->query = mysql_query( $sql ); if( !$this->query ) throw new Exception( ' Query Error : '.mysql_error().' '); return $this; } public function fetchAll(){ $arr = array(); while( $this->dados = mysql_fetch_assoc( $this->query ) ){ $arr[] = $this->dados; } return $arr; } usando try{ $consulta = $SQL->query("select * from `db_conf`")->fetchAll(); foreach($consulta as $resultado){ echo $resultado['ini_parameters']; // meu campo .. } }catch(Exception $e){ echo $e->getMessage(); // tratamento de erros caso queira .. } no caso ele vai retornar todas as linhas .. o $SQL deve ser a instancia de sua classe ^^ mais pode fazer com a funçao nativa do pdo mesmo .. Compartilhar este post Link para o post Compartilhar em outros sites
Ricard0 0 Denunciar post Postado Janeiro 28, 2011 Do jeito que fiz ali encima como mostrei no spoiler, deixei uma mensagem de que quando existir tópicos, apareça ali, mais tem um tópico na db só que no site permanece a mensagem de nenhuma noticia encontrada... Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Janeiro 28, 2011 neste teu codigo , cade a outra instancia ? <div id="conteudo"> <div class="titulonoticias"><h1>Ultimas Noticias</h1></div> <div id="noticias_lista"> <div id="fundonoticia"> <?php include"scripts/noticias.php"; ?> </div> </div> <div id="noticias_forum"> <div class="titulonoticias"><h1>Ultimas Noticias do Forúm</h1></div> <div id="fundonoticia"> <?php $limite = '5'; $pdoForum = Registry::getInstance()->get( 'forum' ); $stm = $pdoForum->query("SELECT title, start_date, starter_name FROM topics ORDER BY start_date DESC LIMIT $limite"); if(@mysql_num_rows($pdoForum) <= '0'){ echo "Nenhuma notícia encontrada"; }else{ while($res_stm=mysql_fetch_array($pdoForum)){ $title = $res_noticias[0]; $start_date = $res_noticias[1]; $starter_name = $res_noticias[2]; $autor = $res_noticias[3]; $pega_autor = mysql_query("SELECT name FROM members WHERE id = '$autor'") or die(mysql_error()); if(@mysql_num_rows($pega_autor) <= '0') echo 'Erro ao selecionar o usuario'; else{ while($res_autor=mysql_fetch_array($pega_autor)){ $autor_do_post = $res_autor[0]; ?> <?php echo $title; ?><?php echo $start_date; ?><?php echo $starter_name; ?><?php echo $autor; ?> </div><!--noticias forum--> <br /> <div id="ranking"> <div class="titulonoticias"><h1>Ranking PvP</h1></div> <div id="fundonoticia"> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> </div> <br /> </div><!--ranking--> </div> <?php } } ?> <?php } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Ricard0 0 Denunciar post Postado Janeiro 28, 2011 Tipo, eu coloquei o código igual desse para mostrar os ultimos tópicos do forúm, só que um para site.. que no caso inclui ele ali "<?php include "scripts/noticias.php"; ?>" Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Janeiro 28, 2011 la chama a outra instancia do banco ? .. cara você ta trabalhando com consulta no laço .. isso não e bom .. poste o script noticias.php aqui Compartilhar este post Link para o post Compartilhar em outros sites
Ricard0 0 Denunciar post Postado Janeiro 28, 2011 Ta ai : <?php $limite = '5'; $noticias = mysql_query("SELECT id, titulo, texto, categoria, `data`, autor FROM rs_posts ORDER BY data DESC LIMIT $limite") or die(mysql_error()); if(@mysql_num_rows($noticias) <= '0'){ echo "Nenhuma notícia encontrada"; }else{ while($res_noticias=mysql_fetch_array($noticias)){ $id_do_post = $res_noticias[0]; $titulo = $res_noticias[1]; $texto = $res_noticias[2]; $categoria = $res_noticias[3]; $data = $res_noticias[4]; $autor = $res_noticias[5]; $pega_autor = mysql_query("SELECT nome FROM rs_users WHERE id = '$autor'") or die(mysql_error()); if(@mysql_num_rows($pega_autor) <= '0') echo 'Erro ao selecionar o usuario'; else{ while($res_autor=mysql_fetch_array($pega_autor)){ $autor_do_post = $res_autor[0]; ?> <ul> <a href="index.php?pagina=nav/single&topico=<?php echo $id_do_post; ?>"><?php echo $titulo; ?> <i>em</i> <?php echo date('d/m/Y', strtotime($data)); ?> | <strong><?php echo $categoria;?></strong></a> </ul> <br /> <?php } } ?> <?php } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Janeiro 28, 2011 voce não esta connectando no banco nesta pagina .. Compartilhar este post Link para o post Compartilhar em outros sites
Ricard0 0 Denunciar post Postado Janeiro 28, 2011 Eu me conectei ao banco de dados pela index.php, eu apenas coloquei aquele sisteminha de chamar as paginas pra dentro da index, olha como ta ele : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <?php include "Connections/config.php"; $conexao = mysql_connect("$hostname_config", "$username_config", "$password_config") or die(mysql_error()); $db = mysql_select_db("$database_config") or die(mysql_error()); ?> <?php include "scripts/limita_palavras.php"; ?> <script type="text/javascript" src="admin/scripts/bloq.js"></script> <title>RagnaMonster</title> <link href="style.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="js/jquery.js" /></script> <script type="text/javascript" src="js/cycle.js" /></script> <style type="text/css"> #slider{width:490px; height:163px;} #slider ul{list-style:none;} #slider img{border:none;} </style> <script type="text/javascript"> $(function(){ $('#slider ul').cycle({ fx: 'fade', speed: 2000, timeout: 5000 }) }) </script> </head> <body> <div id="box"> <div id="header"> <div id="header_logo"> <img src="images/logo.png" alt="" /> </div><!--header logo--> <div id="header_status"> </div><!--header status--> </div><!--header--> <div id="menu"> <ul> <li><a href="index.php?pagina=nav/home">Início</a></li> <li><img src="images/menu_sp.png" alt="" /></li> <li><a href="#">Cadastro</a></li> <li><img src="images/menu_sp.png" alt="" /></li> <li><a href="index.php?pagina=nav/down">Downloads</a></li> <li><img src="images/menu_sp.png" alt="" /></li> <li><a href="index.php?pagina=nav/info">Informações</a></li> <li><img src="images/menu_sp.png" alt="" /></li> <li><a href="index.php?pagina=nav/staff">Staff</a></li> <li><img src="images/menu_sp.png" alt="" /></li> <li><a href="index.php?pagina=nav/regras">Regras</a></li> <li><img src="images/menu_sp.png" alt="" /></li> <li><a href="index.php?pagina=nav/doacao">Doação</a></li> <li><img src="images/menu_sp.png" alt="" /></li> <li><a href="#">Fórum</a></li> </ul> </div><!--menu--> <div id="sidebar"> <div id="calendario"> <script language=JavaScript> <!-- var week = new Array("<p>Dom</p>", "<p>Seg</p>", "<p>Ter</p>", "<p>Quar</p>", "<p>Quin</p>", "<p>Sex</p>", "<p>Sáb</p>"); var monthdays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); var today = new Date(); var month = today.getMonth(); var day = today.getDay(); var dayN = today.getDate(); var days = monthdays[month]; if (month == 1) { var year = today.getYear(); if (year%4 == 0) days = 29; } document.write("<table border='0' cellspacing='0' cellpadding='0'>"); document.write("<tr>"); for (var i=0; i<7; i++) { document.write("<td width='25' height='25'>"); document.write("<div align='center'>" + week[i] + "</div>"); document.write("</td>"); } document.write("</tr>"); var jumped = 0; var inserted = 1; var start = day - dayN%7 + 1; if (start < 0) start += 7; var weeks = parseInt((start + days)/7); if ((start + days)%7 != 0) weeks++; for (var i=weeks; i>0; i--) { document.write("<tr>"); for (var j=7; j>0; j--) { document.write("<td>"); if (jumped<start || inserted>days) { document.write("<div align='center'></div>"); jumped++; } else { if (inserted == dayN) document.write("<div align='center'>[" + inserted + "]</div>"); else document.write("<div align='center'>" + inserted + "</div>"); inserted++; } document.write("</td>") } document.write("</tr>"); } document.write("</table>"); // --> </SCRIPT> </div> <div id="horariowoe"> <h1>Horário WoE</h1> <p>Dia 1 : Horario 1</p> <p>Dia 2 : Horario 2</p> <p>Dia 3 : Horario 3</p> </div> <div id="botaoum"> <a href="http://www.studio.ricardosuman.com.br"><img src="images/botaoum.png" /></a> </div> <div id="botaodois"> <a href="index.php?pagina=nav/doacao"><img src="images/botaodois.png" /></a> </div> <div id="botaotres"> <a href="index.php?pagina=nav/staff"><img src="images/botaotres.png" /></a> </div> </div><!--sidebar--> <div id="content"> <div id="slider"> <ul> <li> <a href="#"><img src="images/slides/1.png" alt="" /></a> </li> <li> <a href="#"><img src="images/slides/2.png" alt="" /></a> </li> <li> <a href="#"><img src="images/slides/3.png" alt="" /></a> </li> <li> <a href="#"><img src="images/slides/4.png" alt="" /></a> </li> <li> <a href="#"><img src="images/slides/5.png" alt="" /></a> </li> </ul> </div><!--slider--> <div id="conteudo"> <?php foreach ($_REQUEST as $___opt => $___val) { $$___opt = $___val; } if(empty($pagina)) { include("nav/home.php"); } elseif(substr($pagina, 0, 4)=='http' or substr($pagina, 0, 1)=="/" or substr($pagina, 0, 1)==".") { echo '<br><font face=arial size=11px><br><b>A página não existe.</b><br>Por favor selecione uma página a partir do Menu Principal.</font>'; } else { include("$pagina.php"); } ?> </div> <div id="clear"> </div> </div> </div><!--box--> <div id="footer"> <a href="http://www.studio.ricardosuman.com.br"><img src="images/marcadagua.png" /></a> <p>RagnaMonster - Todos Direitos Reservados.<br /> Cópia parcial ou total do site é proibida.</p><br /> </div> </body> </html> Compartilhar este post Link para o post Compartilhar em outros sites