Dúvida simples de PHP

ScalaZone

Power Member
Boas pessoal,
a minha dúvida é simples, eu já dei voltas e mais voltas, e devo andar a complicar o que é simples.

Eu na minha página web, tenho o index com uma form. Nela, tenho uma caixa de texto e 3 botões (txt_pesquisar, bt_pesquisar, bt_loja, bt_categoria). O meu index está com extensão .html

O que pretendo é, ao clicar num dos botões ele me redirecione para uma página que me mostra o resultado da pesquisa que estou a fazer.

Ex. Pesquisar por categoria, eu na caixa de texto escrevo "Sapatos" e carrego no botão 'bt_categoria'. Quando o fizer ele redireciona para a página 'resultado_pesquisa_categorias.php' (que é a página que recebe o valor do "$_POST" e mostra a pesquisa dessa categoria.

Simples né ?
Eu já usei a instrução "If" , mas até agora sem sucesso :'(
Alguém me pode dar uma mãozinha? ;)
 
há-de ser qualquer coisa assim:

index.html
Código:
<body>
<form id="form1" name="form1" method="post" action="resultado_pesquisa.php">
  <input type="text" name="txt_pesquisar" id="txt_pesquisar" />
  <input type="submit" name="button" id="button" value="Pesquisar" />
  <input type="submit" name="button" id="button" value="Loja" />
  <input type="submit" name="button" id="button" value="Categoria" />
</form>
</body>
resultado_pesquisa.php
Código:
<?php
if($_POST['button']=="Pesquisar"){
   //pesquisa normal
}elseif($_POST['button']=="Loja"){
   //pesquisa na loja
}elseif($_POST['button']=="Categoria"){
   //pesquisa na categoria
}
?>
 
Última edição:
<?php
$op=$_POST["Form1"];
echo "$op";
if($op == " Ir ")
header ("Location: resultado_pesquisa.php");
else{
if($op == "Loja")
header ("Location: resultado_pesquisa_lojas.php");
}
else
header ("Location: resultado_pesquisa_categorias.php");
?>
Este era o código que eu tinha no meu Index.html
Pensei que ao criar um variável $op e atribuir o valor que vem da form dos botões, pudesse solucionar, mas não consigo saber qual o botão em que cliquei.

d@niel
<?php
if($_POST['button']=="bt_pesquisar"){
//pesquisa normal
}elseif($_POST['button']=="bt_loja"){
//pesquisa na loja
}elseif($_POST['button']=="bt_categoria"){
//pesquisa na categoria
}
?>

Por esta lógica, esta instrução,
$_POST['button'] Diz-me que pressionei um botão, e conforme o "value" desse botão faço as comparações, certo?

Obrigado
 
Última edição:
é isso, atenção que eu fiz um update tinha ai um erro, porque o que vem no $_POST['button'] é o VALUE do botão e não o seu ID.
 
há-de ser qualquer coisa assim:

index.html
Código:
<body>
<form id="form1" name="form1" method="post" action="resultado_pesquisa.php">
  <input type="text" name="txt_pesquisar" id="txt_pesquisar" />
  <input type="submit" name="button" id="button" value="Pesquisar" />
  <input type="submit" name="button" id="button" value="Loja" />
  <input type="submit" name="button" id="button" value="Categoria" />
</form>
</body>
resultado_pesquisa.php
Código:
<?php
if($_POST['button']=="Pesquisar"){
   //pesquisa normal
}elseif($_POST['button']=="Loja"){
   //pesquisa na loja
}elseif($_POST['button']=="Categoria"){
   //pesquisa na categoria
}
?>



Mas olha uma coisa,
depois de ele entrar já acrescentei os rederecionamentos mas não me funcionam.
Pus assim:

<?php
if($_POST['button']==" Ir "){
header ("Location: resultado_pesquisa.php");
//pesquisa normal
}elseif($_POST['button']=="Loja"){
header ("Location: resultado_pesquisa_lojas.php");
//pesquisa na loja
}elseif($_POST['button']=="Categoria"){
header ("Location: resultado_pesquisa_categorias.php");
//pesquisa na categoria
}
?>

Só que nada :mad:
 
tenta com javascript

Código:
[FONT=Arial][SIZE=2]<?php
if($_POST['button']=="  Ir  "){
[/SIZE][/FONT][FONT=Arial][SIZE=2]
  echo '<script type="text/javascript">window.location = "resultado_pesquisa.php"</script>';
[/SIZE][/FONT][FONT=Arial][SIZE=2]
}elseif($_POST['button']=="Loja"){

[/SIZE][/FONT][FONT=Arial][SIZE=2]  echo '<script type="text/javascript">window.location = "resultado_pesquisa_lojas.php"</script>[/SIZE][/FONT][FONT=Arial][SIZE=2]';

}elseif($_POST['button']=="Categoria"){
[/SIZE][/FONT][FONT=Arial][SIZE=2]
  echo '<script type="text/javascript">window.location = "resultado_pesquisa_categorias.php"</script>[/SIZE][/FONT][FONT=Arial][SIZE=2]';

}
?>                          
[/SIZE][/FONT]
 
tenta com javascript

Código:
[FONT=Arial][SIZE=2]<?php
if($_POST['button']=="  Ir  "){
[/SIZE][/FONT][FONT=Arial][SIZE=2]
  echo '<script type="text/javascript">window.location = "resultado_pesquisa.php"</script>';
[/SIZE][/FONT][FONT=Arial][SIZE=2]
}elseif($_POST['button']=="Loja"){

[/SIZE][/FONT][FONT=Arial][SIZE=2]  echo '<script type="text/javascript">window.location = "resultado_pesquisa_lojas.php"</script>[/SIZE][/FONT][FONT=Arial][SIZE=2]';

}elseif($_POST['button']=="Categoria"){
[/SIZE][/FONT][FONT=Arial][SIZE=2]
  echo '<script type="text/javascript">window.location = "resultado_pesquisa_categorias.php"</script>[/SIZE][/FONT][FONT=Arial][SIZE=2]';

}
?>                          
[/SIZE][/FONT]


Eu de java não entendo muito,
mas pelo que estou a ver, já tentei fazer um teste, que foi imprimir o valor que o POST trás, ou seja, caso clicasse em "Lojas" ele mostrava a palavra "Lojas" um vez que vem no 'value'.

Mas não está a aparecer nada, o que me leva a pensar que ele não sabe como comparar, uma vez que não tem valor!

:005:
 
Este é o código todo do index.html
<!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" />
<title>Shopping Center</title>
<style type="text/css">
<!--
.style5 {font-size: 18}
-->
</style>
</head>
<style type="text/css">
body
{
background-image:
url('images/backg.png');
background-repeat: repeat
}
.style2 {
font-family: Calibri;
font-size: 14px;
color: #FFFFFF;
}
.style3 {
font-family: Calibri;
font-size: 18px;
color: #FFFFFF;
}
.style4 {font-size: 18px}
.style6 {font-family: Calibri}
.style8 {color: #FFFFFF}
</style>
<body alink="#FFFFFF" vlink="#FFFFFF">
<table width="799" border="0" cellpadding="0" cellspacing="0" align="center" style="border:1px solid white;">
<!--DWLayoutTable-->
<tr>
<td colspan="2" rowspan="2" align="center" valign="middle"><a href="index.html" target="_self"><img src="images/logo.png" alt="" width="195" height="102" border="0" /></a></td>
<td width="19" rowspan="3" valign="top" background="images/meio_baixo.png"><!--DWLayoutEmptyCell-->&nbsp;</td>
<td width="209" height="22" valign="top" class="style2"><p class="style4">O que deseja ver?</p></td>
<td width="336" rowspan="3" valign="top" background="images/direita.png"><!--DWLayoutEmptyCell-->&nbsp;</td>
<td width="5"></td>
</tr>
<tr>
<td rowspan="2" valign="top"><p><span class="style5"><span class="style4"><span class="style5"><span class="style4"><span class="style6"><span class="style8"><a href="submenu_mapas.html" target="_self" style="text-decoration:none">Mapas</a></span></span></span></span></span></span></p>
<p class="style3"><a href="submenu_pe.html" target="_self" style="text-decoration:none">Plantas de emergência</a></p>
<p class="style3">Agenda</p>
<p class="style3">Cinema</p>
<p class="style3"><a href="submenu_lojas.html" target="_self" style="text-decoration:none">Lojas</a></p></td>
<td height="103"></td>
</tr>
<tr>
<td width="19" height="455">&nbsp;</td>
<td width="209" valign="top">
<form id="form1" name="form1" method="post" action="verifica_qual_pesquisa.php">
<label></label>
<div align="left">
<p><span class="style3">O que procura?</span><br />
<input type="text" name="txt_pesquisar" id="txt_pesquisar" />
<input type="submit" name="bt_pesquisar" id="bt_pesquisar" value=" Ir " />
</p>
<p>
<label>
<input type="submit" name="bt_loja" id="bt_loja" value="Loja" />
</label>
<label>
<input type="submit" name="bt_categoria" id="bt_categoria" value="Categoria" />
</label>
</p>
</div>
</form>
<p>&nbsp;</p></td>
<td></td>
</tr>
</table>
<br />
<table width="800" border="0" cellpadding="0" cellspacing="0" align="center" style="border:1px solid white;">
<!--DWLayoutTable-->
<tr>
<td width="230" height="627" valign="top" background="images/baixoesquerda.png"><!--DWLayoutEmptyCell-->&nbsp;</td>
<td width="568">&nbsp;</td>
</tr>
</table>
</body>
</html>
Este é só a parte da form
<form id="form1" name="form1" method="post" action="verifica_qual_pesquisa.php">
<label></label>
<div align="left">
<p><span class="style3">O que procura?</span><br />
<input type="text" name="txt_pesquisar" id="txt_pesquisar" />
<input type="submit" name="bt_pesquisar" id="bt_pesquisar" value=" Ir " />
</p>
<p>
<label>
<input type="submit" name="bt_loja" id="bt_loja" value="Loja" />
</label>
<label>
<input type="submit" name="bt_categoria" id="bt_categoria" value="Categoria" />
</label>
</p>
</div>
</form>
Esta parte é onde testa:
<?php
$teste=$_POST['button'];
echo $teste;

if($_POST['button']==" Ir "){
header ("Location: resultado_pesquisa.php");
}elseif($_POST['button']=="Loja"){
header ("Location: resultado_pesquisa_lojas.php");
}elseif($_POST['button']=="Categoria"){
header ("Location: resultado_pesquisa_categorias.php");
}
?>

Com a variável $teste eu no echo imprimo o valor que ela tem. Mas não aparece nada, por isso a função '$_POST['button']' não estará a funcionar bem (digo eu) :confused:
 
Última edição:
Pois ja vi o teu problem... se e esse o codigo real que possuis entao o problema e no POST mesmo... visto que tas a ir buscar um valor que esteja num objecto com o nome de 'button' e no teu form nao tens la nada que possua como nome 'button'...

Se e k me entendes...
 
Isto deveria estar assim:
Citação:
<form id="form1" name="form1" method="post" action="verifica_qual_pesquisa.php">
<label></label>
<div align="left">
<p><span class="style3">O que procura?</span><br />
<input type="text" name="txt_pesquisar" id="txt_pesquisar" />
<input type="submit" name="button" id="bt_pesquisar" value=" Ir " />
</p>
<p>
<label>
<input type="submit" name="button" id="bt_loja" value="Loja" />
</label>
<label>
<input type="submit" name="button" id="bt_categoria" value="Categoria" />
</label>
</p>
</div>
</form>
Para isto funcionar...
Citação:
<?php
$teste=$_POST['button'];
echo $teste;

if($_POST['button']==" Ir "){
header ("Location: resultado_pesquisa.php");
}elseif($_POST['button']=="Loja"){
header ("Location: resultado_pesquisa_lojas.php");
}elseif($_POST['button']=="Categoria"){
header ("Location: resultado_pesquisa_categorias.php");
}
?>
Penso que nao estou errado ;)

O $_POST vai sempre buscar ao nome do objecto... se tiveres um input com nome de 'buttao_ola' e no PHP fores buscar por '$_POST['buttao']' ele nao te ira retornar nada ;)

Cumps
 
Correcto Bl4ckNo0bik

Sim exacto.
E de facto resolveu o problema =)

Agora estou com outra dúvida :eek:
Desculpem lá 'maçar-vos' a cabeça também.

Aqui tenho o código onde vai pesquisar, neste caso, por categorias:

<?php

$var_lista_categorias=$_POST['txt_pesquisar'];

//Ligação à base de dados//
include 'bdcon.php';

if(bt_pesquisar)
{
//Pesquisas para listas//
//Comando SQL para devolver Lista Distritos//
$com_sql_distritos="SELECT * FROM categorias WHERE categoria like '$var_lista_categorias'";
//$com_sql_distritos="SELECT * FROM loja";
//Da ordem de procura com o comando SQL//
$resul_distritos=mysql_query($com_sql_distritos) or die("Erro na procura!");
//Devolve o número de resultados da procura//
$n_resul_distritos=mysql_num_rows($resul_distritos);

if($n_resul_distritos=="0")
echo "<b>Não foram encontrados registos com esse nome</b>";
else{

print ("<table with=\"100%\" align=center border=2>");
print ("<tr><td with=\"100%\" bgcolor= \"FFFF00\">ID</td><td with=\"100%\" bgcolor=\"FFFF00\"> Nome</td><td with=\"100%\" bgcolor=\"FFFF00\"> Localização</td><td with=\"100%\" bgcolor=\"FFFF00\"> Contacto</td><td with=\"100%\" bgcolor=\"FFFF00\"> Categoria</td></tr>");

//Ciclo para impressão dos resultados//
while ($linha = mysql_fetch_array($resul_distritos))
{

$id_loja=$linha["id"];
$nome_loja=$linha["nome"];
$localizacao_loja=$linha["localizacao"];
$contacto_loja=$linha["contacto"];
$categoria_loja=$linha["categoria"];

print ("<tr><td>$id_loja</td><td>$nome_loja</td><td>$localizacao_loja</td><td>$contacto_loja</td><td>$categoria_loja</td></tr>");
}
echo ("</table>");
}
}



?>

Só que isto não me está a listar o que quero, dá sempre a mensagem de aviso, a dizer que não encontrou nenhum registo.
Aqui pretendo listar a procura pela categoria, por exemplo, 'Video Jogos', ele listava todas as lojas que vendessem video jogos + essa mesma categoria.

Eu tenho duas tabelas na minha bd. A "loja" e "categorias" daí eu ter tentado pôr "//$com_sql_distritos="SELECT * FROM loja"; "

Como posso fazer para listar o conteúdo da pesquisa, englobando duas tabelas diferentes, mantendo a estrutura que tenho, porque lista em tabela.

:sad:
 
a correcção do Bl4ckNo0bik, já eu tinha feito. eu até tinha dito para ires ver o update que fiz.

BTW

tenta assim:
$com_sql_distritos="SELECT * FROM categorias WHERE categoria like '%$var_lista_categorias%'";
 
No comando SQL que prentendes englobar as duas tabelas recomendo que uses 'INNER JOIN'... Posso é dar.t um exemplo:

Ex.:
"SELECT t.id, t.name, e.month, e.year FROM team t INNER JOIN evaluations e ON t.id = e.team_id WHERE t.id = 12"

O que isto vai fazer é retornar o ID, Nome da equipa, juntamente com o mes e o ano da avaliacao ond o id da equipa e igual ao id da equipa que esta na outra tabela, estando ambos sobre a condicao de que o id da equipa seja 12.

Percebeste o k quis dizer?

Cumps [[]]
 
No comando SQL que prentendes englobar as duas tabelas recomendo que uses 'INNER JOIN'... Posso é dar.t um exemplo:

Ex.:
"SELECT t.id, t.name, e.month, e.year FROM team t INNER JOIN evaluations e ON t.id = e.team_id WHERE t.id = 12"

O que isto vai fazer é retornar o ID, Nome da equipa, juntamente com o mes e o ano da avaliacao ond o id da equipa e igual ao id da equipa que esta na outra tabela, estando ambos sobre a condicao de que o id da equipa seja 12.

Percebeste o k quis dizer?

Cumps [[]]


Sim, é uma boa instrução SQL. Mas tipo, eu pesquiso uma categoria. Caso ele a encontre, guarda o ID e o Nome. Depois vai a outra tabela, procura qual o ID igual ao seu, e lista, juntamente todos os dados sobre essa loja.
É isso que ainda não consegui fazer.
Não sei se preciso de dois ciclos "while", ou se posso fazer tudo no mesmo, uma vez que tenho que fazer o "fetch" para guardar os dados e imprimir mais a baixo em tabela.

Como faço isso :confused::sad:
 
a correcção do Bl4ckNo0bik, já eu tinha feito. eu até tinha dito para ires ver o update que fiz.

BTW

tenta assim:
$com_sql_distritos="SELECT * FROM categorias WHERE categoria like '%$var_lista_categorias%'";


Tens razão, desculpa.
Só reparei depois de ele ter chamado a atenção sobre essa parte.
A tua instrução em SQL, acho que limita um pouco o que eu procuro.
Como é que acabo por listar, todos os dados que quero ? =/
 
Sim, é uma boa instrução SQL. Mas tipo, eu pesquiso uma categoria. Caso ele a encontre, guarda o ID e o Nome. Depois vai a outra tabela, procura qual o ID igual ao seu, e lista, juntamente todos os dados sobre essa loja.
É isso que ainda não consegui fazer.
Não sei se preciso de dois ciclos "while", ou se posso fazer tudo no mesmo, uma vez que tenho que fazer o "fetch" para guardar os dados e imprimir mais a baixo em tabela.

Como faço isso :confused::sad:

pela que estou a entender a instrução que prentendes é algo do género:

"SELECT c.id, c.nome as Categoria, l.* FROM categorias c INNER JOIN loja l ON c.id = l.catId WHERE c.nome LIKE '%".$categoria."%';"

Acho que desta maneira ele iria funcionar ;)

Testa lá e diz algo ;)

Cumps [[]]
 
Back
Topo