Dúvida simples de PHP

Ainda continuo aqui com um problema, neste caso é como eu passo o valor da variável.
É assim, vou por passos, para ver se acabo aqui com as minhas dúvidas, neste nível das pesquisas e listagens.
Este vai ser longo, porque vou expor os problemas que estou a ter neste momento.

A minha página Index.html é esta:
<!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="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>
<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>

Depois de escrever o que queremos na caixa de pesquisa, escolhemos uma das opções, pela qual queremos. (Se é só pesquisa, pesquisa por nome da loja, ou por nome de uma categoria).
Ao clicar ele faz o POST para esta página:
<?php
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");
}
?>

Depois ele, conforme o botão, redireciona para página .php respectiva. O meu problema é como é que vou saber, depois deste passo, como é que a página respectiva sabe qual foi a palavra que estamos a pesquisar.

Vou postar aqui a pesquisa que acho que está a ser mais complicada para mim, que é por categorias. Imagina que escrevemos "Video Jogos" e carregamos na pesquisa por "Categoria". Ele confirma que esse botão foi clicado, e redereciona para a página "resultado_pesquisa_categorias.php
<?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>");
}
}
?>
Aqui começam todas as dúvidas novamente.
Como é que sei este valor :
$var_lista_categorias=$_POST['txt_pesquisar'];

Se ele perdeu-se na página intermédia de rederecionar. Não posso fazer assim porque o POST do index.htmlnão está para esta página certo???

Aqui engloba a função de SQL, como já foi referida, o que ainda não consegui decifrar a 100%, para a poder implementar no meu site.



O que está a acontecer é o seguinte.
Eu abro o Index.html (estou a usar wamp)(a minha bd é constituida por duas tabelas, a tabela lojas e a tabela categoria)(id, nome, localizacao, contacto ; id, categoria) são os campos correspondentes.

Quando carrego numa das pesquisas, ele diz logo que não encontrou nenhum registo. E nessa mesma página, se tornar a escrever a mesma coisa, ele já encontra =S

Espero ter em breve a página online para poderem ver realmente o que se passa, uma vez que estou a trabalhar a nivel local.

Obrigado, a sério :'(
 
1º se o que estas a pesquisar se perde na pagina intermedia entao quando estas a redericcionar pa outra pagina " header ("Location: resultado_pesquisa.php");" acrescenta algo do genero " header ("Location: resultado_pesquisa.php?c='NomeDaVariavel'");" na pagina em k vais fazer a pesquisa recebes essa variavel como $_GET['c'].

2º Agora para puderes fazer um INNER JOIN ou buscar dados de uma tabela com infos de outra tens de ter algum campo nas tabelas que sejam relaccionadas... como por exemplo o id da categoria, deveria existir algum campo na tabela loja que se pudesse relaccionar esse id tipo catId ou algo do genero. Senao e muito complicado tentares relacionar 2 tabelas sem elas possuirem campos relacionais... ou crias um campo relacional ou entao uma tabela intermedia que faça isso....

(OffTopic: bem a tua duvida simples de PHP ja ta a ficar numa duvida de escola de PHP... basicamente o que estou praqui a tentar explicar.te é que isto de campos relacionais dá-se na escola, pelo menos eu dei ;) mas fico contente em tentar.t ajudar...)

Cumps [[]]
 
1º se o que estas a pesquisar se perde na pagina intermedia entao quando estas a redericcionar pa outra pagina " header ("Location: resultado_pesquisa.php");" acrescenta algo do genero " header ("Location: resultado_pesquisa.php?c='NomeDaVariavel'");" na pagina em k vais fazer a pesquisa recebes essa variavel como $_GET['c'].

2º Agora para puderes fazer um INNER JOIN ou buscar dados de uma tabela com infos de outra tens de ter algum campo nas tabelas que sejam relaccionadas... como por exemplo o id da categoria, deveria existir algum campo na tabela loja que se pudesse relaccionar esse id tipo catId ou algo do genero. Senao e muito complicado tentares relacionar 2 tabelas sem elas possuirem campos relacionais... ou crias um campo relacional ou entao uma tabela intermedia que faça isso....

(OffTopic: bem a tua duvida simples de PHP ja ta a ficar numa duvida de escola de PHP... basicamente o que estou praqui a tentar explicar.te é que isto de campos relacionais dá-se na escola, pelo menos eu dei ;) mas fico contente em tentar.t ajudar...)

Cumps [[]]

Dizes bem, dá-se na escola. Mas para quem tem disciplina para tal coisa !!!
Eu PHP+MySql estou a aprender sozinho :sad:
Com a vossa ajuda e dos livros, é que me vou safando.
Daí a minha "Dúvida simples" ter-se complicado, quando devia ter ficado pelo simples :P
Vou tentar essa solução para transportar a variável a ver no que dá.

Obrigadão pelo teu tempo, e dos outros também.

[ ]'s
 
Ps:

Se eu usar essa instrução:
" header ("Location: resultado_pesquisa.php?c='NomeDaVariavel'");"

Forço a que esta leve 'NomeDaVariavel' sempre a mesma, independentemente do que eu escreva na minha txt.
Eu tentei assim:
if($_POST['button']==" Ir "){
header ("Location: resultado_pesquisa.php?c=txt_pesquisar");

E não deu para levar o valor da caixa de texto =|
:offtopic:Sou mesmo nabo nisto :'(
 
Yap nabo xD....

Nao percebeste, nao e pa pores 'NomeDaVariavel' mas sim pa pores la a variavel k e pa mandar... tipo:

Ex.:

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

e na pagina ond e redereccionado recebes como:

<?php
$txtPesquisar = $_GET['c'];
?>

ou entao

<?php
$txtPesquisar = $_GET['l'];
?>

Percebeste agora?

Cumps [[]]
 
Que não era para escrever isso, sabia eu xD
Sou nabo mas não tanto ;)

Só não sabia que instrução havia de escrever.
Vou tentar outra vez :P

Vah, xateio-te mais tarde se isto não funcionar.
Obrigadão men
Abraço
 
Pesquisa que engloba mais que uma tabela

Boas,
noutras situações atrás, já me foi dado um exemplo de como o fazer, mas não tive sucesso com o mesmo.
Eu quero listar o conteúdo da minha BD numa tabela feita em html, só que a informação está em duas tabelas distintas na BD.

A tabela "categorias" e a tabela "loja".
Na categorias tenho os campos: id_c e categoria;
Na loja tenho os campos: id_l, nome, localizacao, contacto;

A minha pesquisa e listagem é a seguinte:

elseif($_POST['button']=="Categoria"){

//Pesquisas para listas//
//Comando SQL para devolver Lista Distritos//
$com_sql_distritos="SELECT * FROM loja WHERE nome like '$var_nome'";
//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></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"];

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

Podem-me dar um exemplo de como ficará a minha instrução SQL?
$com_sql_distritos="SELECT * FROM loja WHERE nome like '$var_nome'";
E o que faço depois aqui para poder listar também a categoria junto com estes dados?
//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"];

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

Porque o que acontece é que, como estou em duas tabelas diferentes, este while vai correr só para uma tabela, onde encontra o que pesquiso, né ?

Obrigado pela ajuda :tareon:
 
Tas a complicar imenso isso... especifica.te como deve de ser o que queres fazer ao certo... /(lool)/

ate eu a ler fico um pouco baralhado :S
 
Tas a complicar imenso isso... especifica.te como deve de ser o que queres fazer ao certo... /(lool)/

ate eu a ler fico um pouco baralhado :S


Bem, o que eu pretendo ao certo é o seguinte:
Numa caixa de texto escrevo o nome de uma categoria (ex: sapatos), ao clicar no botão de pesquisar por categorias, ele vai à base de dados, à tabela 'categorias' e lista o nome da categoria que escrevi na caixa de texto ... até aqui está tudo a funcionar.

Agora, o que eu queria para além disto, é que ao mesmo tempo, ele fosse à tabela 'loja' e juntamente com o nome da categoria, listava também, o nome da loja e os campos restantes.

Ou seja, no final, teriamos uma tabela (<td>), que listava o nome da loja, a sua localização, contacto, a tal categoria, etc etc.

Em que pode haver uma categoria, que pode ser vendida em várias lojas.

Acho que não consigo explicar melhor.
Olha o que já tentei:
//$SQL = "SELECT categorias.id_c, categorias.nm_categoria";
//$SQL = "SELECT loja.id_l, loja.nome, loja.localizacao, loja.contacto";
//$SQL .= " FROM categorias";
//$SQL .= " INNER JOIN loja";
//$SQL .= " ON categorias.id_c = loja.id_l";
//$SQL .= " ORDER BY loja.nome";
Mas nada.
Compreendes? :'(
 
acho que é algo assim:
SELECT categorias.nm_categoria, loja.nome
FROM categorias, loja
WHERE categorias.id_c = loja.id_l
ORDER BY loja.nome

(o meu SQL ainda é fraquinho, mas isto pelo menos já é um ponto de partida :x )
 
OfCourse que isso nao te retorna nada...

é aquela base de MySQL que te falta :S
Até percebeste mais ou menos o que eu te disse anteriormente mas fizeste tudo mal :S tu para puderes interligar 2 tabelas precisas de um campo relacional :) que de para interligar os dois campos... como por exemplo o que tu tentaste fazer nao dá simplesmente porque nao podes dizer que o ID da categoria e o mesmo que o ID da loja :S isso e extremamente incorrecto... o que eu te aconselho para aprenderes as bases de MySQL ou entao MSSQL (que tambem e muito parecido mas e da Microsoft) e aprenderes a fazeres tabelas como deve de ser :S para o projecto que tas a pretender fazer...

até era capaz de te dar umas aulinhas pa ajudar mas o meu tempo nao permite tal acontecimento de momento =/

Se houvesse alguma maneira de eu puder ver a tua Base de Dados e/ou site talvez seja um pouco mais facil ajudar...

Cumps [[]]
 
Apesar de ser um "purismo", acho que o ideal é dizer que tem de aprender SQL :)
A partir daí, vá para MySQL, PostgreSQL, MSSQL, Oracle, qualquercoisaSQL, .... sabe sempre as bases e os fundamentos da linguagem que são comuns a todas as bases de dados (SELECT, INSERT, DELETE, UPDATE; ALTER, CREATE, DROP), e como os usar correctamente.
 
Eu tinha feito uma reply, a dizer que já tinha conseguido.
E escrevi o código.
Mas acabei por fazer alguns testes, e então editei a threath, ou seja, continuo com o mesmo problema sem uma noção clara, de como poderei fazer isto :'(
 
Usando o Wamp para obter o código SQL

Lembrei-me que com o WAMP podemos gerar o código em PHP.

O que fiz foi, selecionar as duas tabelas, e escrever a palavra de pesquisa, neste caso 'sapatos'

O que obti daquilo que pretendo fazer foi o seguinte:
$sql = 'SELECT * FROM `lojas`.`categorias` WHERE (`id_c` LIKE \'%sapatos%\' OR `nm_categoria` LIKE CONVERT(_utf8 \'%sapatos%\' USING latin1) COLLATE latin1_swedish_ci)';
Será que conseguem interpretar isto, mudando as variáveis, tendo em conta que a caixa de texto que guarda a palavra que pesquiso é: $var_nome

:arrow:?
 
Última edição:
Eu continuo a dar o mesmo conselho... Primeiro aprende as bases de SQL e como criar tabelas e etc... porque estares a tentar uasr Base de Dados sem saber como ela funciona é extremamente ajudar.te :S

Cumps [[]]
 
Back
Topo