MarcosR_ 0 Denunciar post Postado Janeiro 6, 2011 Boa tarde, estou desenvolvendo uma página de pesquisa onde o usuário escolhe se a pesquisa é por Título ou Texto, de acordo com a palavra informada. Fiz uma busca paginada pegando um exemplo na net. O exemplo funciona perfeitamente, mas no meu caso alguma coisa ainda está errada e não estou conseguindo resolver. Já desenvolvi toda a parte de busca no banco de dados (SQL Server 2005). O form de pesquisa está em uma página e o resultado em outra. O problema está quando mudo de página para visualizar o restante da pesquisa, a variável que utilizei no form de pesquisa perde o valor e então não consigo visualizar as outra páginas. Os códigos estão logo abaixo, espero que me ajudem. // Página de busca (Busca.php) <!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=iso-8859-1" /> <title>Untitled Document</title> <link href="css/interna.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="page_iframe"> <div id="page_int"> <div id="formulario"> <div class="topico">Documentação</div> <table width="390" border="1"> <tr> <th width="144" scope="col"> <form action="lista_busca.php" method="post" target = "_blank" name="frmBusca" id="frmBusca"> <input type="text" id="palavra" name="palavra"/> <th width="230" align="left" valign="middle" scope="col"><span class="style1"> <label> <input type="submit" name="titulo" id="titulo" value="Título"/> <input type="submit" name="Texto" id="texto" value="Texto"/> </label> </span></th> </tr> </table> </form> <br/> <iframe name="iframe_a" width="95%" height="380" frameborder="1"> <p>Your browser does not support iframes.</p> </iframe> </body> </html> // Página de resultados (Lista_Busca.php) <!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=iso-8859-1" /> <title>Untitled Document</title> </head> <body> <?php // Número de registros por página $_BS['PorPagina'] = 4; // Conexão com o banco de dados $conn = @mssql_connect("192.168.1.55", "user", "senha") or die("Não foi possível a conexão com o Banco"); // Selecionando banco $db = @mssql_select_db("DADOS", $conn) or die("Não foi possível selecionar o Banco"); // Pegamos a palavra $palavra = $_POST['palavra']; // Verificamos se a ação é de busca //if ($a == "buscar") //{ if (empty($palavra)) { echo "<script type='text/javascript'>alert('Valor para pesquisa não informado !');</script>"; exit; } if (strlen($palavra) < 3) { echo "<script type='text/javascript'>alert('Informe no mínimo 3 caracteres para iniciar uma pesquisa !');</script>"; exit; } if (isset($_POST['titulo'])) { echo "<br><font size = '4'><b>Busca por Título: </b></font>"; echo "<script type='text/javascript'>alert('Passou aqui !');</script>"; // Verificamos no banco de dados documentos equivalente a palavra digitada $sql = mssql_query("SELECT * FROM Produtos WHERE Prod_Titulo LIKE '%$palavra%' ORDER BY Prod_Titulo" ); } else { echo "<br><font size = '4'><b>Busca por Texto: </b></font>"; // Verificamos no banco de dados documentos equivalente a palavra digitada $sql = mssql_query("SELECT Prod_Titulo,CAST(CAST([Prod_Texto] AS VARCHAR(8000)) AS TEXT) FROM Produtos WHERE Prod_Texto LIKE '%$palavra%'"); } echo "<font color = '#EE7600'><b>"; echo $palavra; echo "</b></font>"; // Descobrimos o total de registros encontrados //$numRegistros = mysql_num_rows($sql); $totreg = mssql_num_rows($sql); // Calcula o máximo de paginas $paginas = (($totreg % $_BS['PorPagina']) > 0) ? (int)($totreg / $_BS['PorPagina']) + 1 : ($totreg / $_BS['PorPagina']); // Sistema simples de paginação, verifica se há algum argumento 'pagina' na URL if (isset($_POST['pagina'])) { $pagina = (int)$_POST['pagina']; } else { $pagina = 1; } $pagina = max(min($paginas, $pagina), 1); $inicio = ($pagina - 1) * $_BS['PorPagina']; // Monta outra consulta, agora a que fará a busca com paginação $sql2 = "SELECT TOP " .$_BS['PorPagina'] . " Prod_Cod,Prod_Desc,Prod_Titulo,Prod_Texto,Prod_Recno FROM Produtos WHERE Prod_Titulo LIKE '%$palavra%' ORDER BY Prod_Titulo"; // Executa a consulta $query = mssql_query($sql2); // Começa a exibição dos resultados echo "<p>Resultados ".min($totreg, ($inicio + 1))." - ".min($totreg, ($inicio + $_BS['PorPagina']))." de ".$totreg." resultados encontrados para '".$_POST['palavra']."'</p>"; echo "<ul>"; while ($resultado = mssql_fetch_assoc($query)) { $titulo = $resultado['Prod_Titulo']; $texto = $resultado['Prod_Texto']; $descpro= $resultado['Prod_Desc']; $link = 'http://www.meusite.com.br/noticia.php?id=' . $resultado['Prod_Recno']; echo "<li>"; echo '<a href="'.$link.'" title="'.$titulo.'">'.$titulo.'</a>' . ' - ' . $descpro . '<br />'; echo "</li>"; } echo "</ul>"; // Começa a exibição dos paginadores //================================== if ($totreg > 0) { echo '<a href="index.php?pag=1">'.'Primeira página '.'</a>'; for($n = 1; $n <= $paginas; $n++) { if($pagina == $n) { echo " ".$n." "; // Escreve somente o número da página sem ação alguma } else { echo '<a href="?palavra='.$_POST['palavra'].'&pagina='.$n.'">'.$n.'</a> '; //echo '<a href="?palavra='.$palavra.'&pagina='.$n.'">'.$n.'</a> '; } } echo '<a href="index.php?pag='.$paginas.'">Última página</a>'; } //} Supondo que usuário digitou Abraçadeira e clicou no botão Título, e no meu código decidi que serão mostrados 4 resultados por página, a página de resultados ficaria assim: - Abraçadeira 1; - Abraçadeira 2; - Abraçadeira 3; - Abraçadeira 4; Primeira página 1 2 3 4 Última página Ao clicar na página 2, a página de resultados deveria ser recarregada com os outros itens da pesquisa, mas isto não ocorre porque a variável $palavra está em branco, deveria continuar como Abraçadeira. Espero que tenham entendido. Obrigado, Marcos Compartilhar este post Link para o post Compartilhar em outros sites
jonny_quest 0 Denunciar post Postado Janeiro 6, 2011 Boa tarde MarcosR_ :) Se voce quer fazer uma variavél armazene informações para você utilizar em outras páginas, pode ser viavél utilizar sessions... ?php //cria sessão $_Session['nome'] = "Marcos"; ?> Na mesma seção (ou seja com o mesmo browser aberto) em outra página faça o seguinte, <?=$_Session['nome'];?> Caso necessário preservar o id de cada user, ao fazer o envio de uma página por um link você necessitará do sessionid... echo "<a href="pagina2.php?" . SID . "> envia</a>" //preservar id's é apenas quando você necessita organizar os users, para diferenciar cada usuário que está na página. Exemplo da Código fonte: http://www.codigofonte.net/dicas/php/124_veja-como-usar-sessions-no-php Exemplo da revista PHP: http://www.revistaphp.com.br/artigo.php?id=8 Se eu estiver errado quanto a este método me corrijam por favor ! :D Compartilhar este post Link para o post Compartilhar em outros sites
CrY 1 Denunciar post Postado Janeiro 7, 2011 exatamente o que o amigo ai falou ou usa $_GET['pagina']; e ta errado nessa parte <form action="lista_busca.php" method="post" target = "_blank" name="frmBusca" id="frmBusca"> //lista_busca.php a pagina de resultados é essa Página de resultados (Lista_Busca.php) com L e B maiusculos vai gerar um erro dizendo que nao encontrou a pagina Compartilhar este post Link para o post Compartilhar em outros sites
MarcosR_ 0 Denunciar post Postado Janeiro 7, 2011 Não deu certo utilizando $_SESSION ! Na página Busca.php, logo nas primeiras linhas coloquei: <?php // Inicia sessões session_start(); [b]$_SESSION['MinhaSessao'];[/b] ?> e na página Lista_Busca.php: <?php // Inicia sessões session_start(); $[b]QqCoisa = $_SESSION['MinhaSessao'];[/b] ?> mas ao clicar em um número de outra página, os resultados não aparecem. Está certo da maneira que fiz ou não ? Obrigado, Marcos Compartilhar este post Link para o post Compartilhar em outros sites
jonny_quest 0 Denunciar post Postado Janeiro 7, 2011 bom dia MarcosR_ :) Voce tem que por na inicialização da SESSION a variável e passar o valor dela, cadê? <?php // Inicia sessões session_start(); [b]$_SESSION['MinhaSessao'];[/b] ?> e na página Lista_Busca.php: <?php // Inicia sessões session_start(); $[b]QqCoisa = $_SESSION['MinhaSessao'];[/b] ?> Veja por este exemplo da CÓDIGO FONTE: <?php session_start("materia"); $_SESSION["nome"] = "Uso de sessions no PHP"; //Variável 1 e seu valor. $_SESSION["lendo"] = "sim"; //Variável 2 e seu valor. ?> Na página da pesquisa seria algo: <?php session_start("materia"); //sempre session_start antes de usar sessions if($_SESSION["lendo"]!=="sim"){ //se $_SESSION["lendo"] não for "sim", a mensagem abaixo é exibida. echo "Você não está lendo o artigo!"; } else{ //caso contrário, a mensagem abaixo é exibida. echo "Você está lendo o artigo ".$_SESSION["nome"]." Obrigado!"; } ?> é aqui acima que voce deve tratar a página já exibida os valores (você disse 4 por página) já exibidos e dar continuidade na exibição para outras páginas. Compartilhar este post Link para o post Compartilhar em outros sites
MarcosR_ 0 Denunciar post Postado Janeiro 7, 2011 Fiz do jeito que você indicou, mesmo assim não deu certo, outra coisa, no código que passei da primeira vez estava abrindo a lista de resultado em uma nova página. O que preciso realmente é que a lista seja mostrada na mesma página. Coloquei um iframe, a primeira lista aparece sem problemas mas as restantes não. Não sei se o iframe interfere alguma coisa. Meu código está assim: Página Busca.php: <?php // Inicia sessões session_start("documento"); $_SESSION["MinhaSessao"]="sim"; ?> <!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=iso-8859-1" /> <title>Untitled Document</title> <link href="css/interna.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="page_iframe"> <div id="page_int"> <div id="formulario"> <div class="topico">Documentação de Produtos</div> <table width="390" border="1"> <tr> <th width="144" scope="col"> <form action="lista_busca.php" method="get" target = "iframe_a" name="frmBusca" id="frmBusca"> <input type="text" id="palavra" name="palavra"/> <th width="230" align="left" valign="middle" scope="col"><span class="style1"> <label> <input type="submit" name="buscar" value="Título"/> <input type="submit" name="buscar" value="Texto"/> </label> </span></th> </tr> </table> </form> <br/> <iframe name="iframe_a" width="95%" height="380" frameborder="0"> <p>Your browser does not support iframes.</p> </iframe> </body> </html> Página Lista_Busca.php: <?php // Inicia sessões session_start("documento"); ?> <!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=iso-8859-1" /> <title>Untitled Document</title> </head> <body> <?php if ($_SESSION['MinhaSessao'] == "sim") { // Número de registros por página $_BS['PorPagina'] = 7; // Conexão com o banco de dados $conn = @mssql_connect("192.168.1.54", "user", "senha") or die("Não foi possível a conexão com o Banco"); // Selecionando banco $db = @mssql_select_db("DADOS", $conn) or die("Não foi possível selecionar o Banco"); [b]// Valor que vem da página Busca.php, de acordo com o botão clicado, deve ser "Título" ou "Texto"[/b] [b]$b = $_GET['buscar'];[/b] // Aqui mostro o tipo de pesquisa selecionada "Título" ou "Texto" // Na primeira vez que exibe a página mostra "Título", mas ao selecionar outra página não mostra nada echo "<script type='text/javascript'>alert('Pesquisa por: $b');</script>"; $palavra = $_GET['palavra']; if (empty($palavra)) { echo "<script type='text/javascript'>alert('Valor para pesquisa não informado !');</script>"; exit; } if (strlen($palavra) < 3) { echo "<script type='text/javascript'>alert('Informe no mínimo 3 caracteres para iniciar uma pesquisa !');</script>"; exit; } [b]// Verificando o valor que veio da página Busca.php para montar o select[/b] if ($_GET['buscar'] == 'Título') { // Select para título } else { // Select para texto } // O restante do código não muda... } Compartilhar este post Link para o post Compartilhar em outros sites
jonny_quest 0 Denunciar post Postado Janeiro 8, 2011 Bom dia MarcosR_ :) Tá certo o que voce fez, porém não sei no momento te dizer porque não está retornando nada. :ermm: Uma coisa que notei é que voce está usando letra com acento! EVITE! ;) Nesse caso é Título, já tive problemas com acento e letra maiúscula, mesmo copiando e colando a palavra, na hora da pesquisa dava cano, experimente usar tudo minúsculo e sem acento. Quanto aos Iframes, eles estão em desuso, para substituí-los tem o uso de SCROLL'S nos padrões da web(W3C)veja aqui: http://www.mxmasters.com.br/dreamweaver/dreamweaver-cs3-de-adeus-aos-iframes-e-faca-scrolls-nos-padroes-web/ Não sei se o fato de usar iframes esteja atrapalhando, mas não custa adaptar o código e testar, enquanto não vejo aqui a solução do seu problema, se voce tiver como, pesquise sobre uso de session com mysql, e coisas relacionadas, voce vai encontar bastante coisa e talvez consigamos resolver isso para a semana. ;) Compartilhar este post Link para o post Compartilhar em outros sites
MarcosR_ 0 Denunciar post Postado Janeiro 10, 2011 Bom dia ! Não tem jeito mesmo, tirei o acento, e nada de funcionar. Incrível, nem mesmo um simples exemplo como este funciona como deveria: http://antriksh.com/resources/2_submit_button_form2.shtml Estive pensando, será que tem alguma configuração em algum arquivo .ini do PHP que pode estar interferindo ? Não sei mais o que fazer. Obrigado, Marcos Compartilhar este post Link para o post Compartilhar em outros sites
Periscuelo 20 Denunciar post Postado Janeiro 10, 2011 Pessoal utilizem a tag code para que o tópico fique legível. Leiam o tópico abaixo por favor: http://forum.imasters.com.br/index.php?/topic/375800-orientacoes-para-uma-boa-participacao/ Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
MarcosR_ 0 Denunciar post Postado Janeiro 10, 2011 Desculpe-me, mas não entendi ! Onde tem código ilegível ? Marcos Compartilhar este post Link para o post Compartilhar em outros sites
CrY 1 Denunciar post Postado Janeiro 10, 2011 voce nao entendeu ele disse isso para uma melhor organização olha a diferença com [ code] <?php echo "teste com code!"; ?> [ /code] e sem code <?php echo "teste com code!"; ?> Compartilhar este post Link para o post Compartilhar em outros sites
MarcosR_ 0 Denunciar post Postado Janeiro 10, 2011 Ok, obrigado. mas... o problema continua !! Marcos Compartilhar este post Link para o post Compartilhar em outros sites