Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MarcosR_

Variável $_POST["variavel"] perde o valor

Recommended Posts

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

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

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.