Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Planphp

Consulta a Base de Dados

Recommended Posts

Planphp

Viva,

Estou com um problema no codigo que abaixo irei apresentar, sou iniciante na programação php, e estou a tentar efectuar uma consulta á base de dados atraves de um formulario, que irá enviar para consulta á base de dados, para mostrar o resultado em outra página com o filtro efectuado atraves do formulario.

Formulario.php

<form id="form2" name="form2" method="_POST" action="pesquisa.php">
<table width="79%" border="0" align="left" cellpadding="0" cellspacing="0">
<tr>
<th width="37%" align="left" valign="middle" bgcolor="#FFFFFF" class="Titlopreto1" scope="col"> <span class="links_menu_principal">
<label for="lista_categorias"><strong>Oferta:</strong></label>
</span></th>
<th width="63%" align="left" bgcolor="#FFFFFF" class="textobranco2" scope="col"><span class="links_menu_principal">Localidade:</span></th>
</tr>
<tr>
<td align="left" valign="middle" bgcolor="#FFFFFF"><span class="links_menu_principal">
<select name="lista_categorias" size="1" class="caixa" id="lista_categorias">
<option value="1">Hotel</option>
<option value="2" selected="selected">Anticorrosão</option>
<option value="3">Telemoveis</option>
</select>
</span></td>
<td bgcolor="#FFFFFF"><span class="links_menu_principal">
<select name="lista_localidades" size="1" class="caixa" id="lista_localidades">
<option value="1">Lisboa</option>
<option value="2">Porto</option>
<option value="3">Funchal</option>
</select>

pesquisar.php

<?php
require_once("includes/config.php");

$lista_categorias = $_POST['categoria'];
$lista_localidades = $_POST['localidade'];
$resultado = mysql_query("SELECT * FROM promocoes_pag_principal_meio_1 (categoria, localidade) VALUES ('$lista_categorias', '$lista_localidades',");
while($linha = mysql_fetch_array($resultado)) {
echo "".$linha['promocoes_id']."";
echo "".$linha['titulo']."";
echo "".$linha['descricao_short']."";
echo ""." <img src='".$linha['imagem']. "' alt='' align='top' border='1' width='564' height='350'/></p>";
echo "".$linha['preco']."";
echo "".$linha['desconto']."";
echo "".$linha['estado']."";
echo "".$linha['descricao_long']."";
echo "".$linha['inclui']."";
echo "".$linha['data_inicio']."";
echo "".$linha['data_termino']."";
echo "".$linha['empresa']."";
echo "".$linha['categoria']."";
echo "".$linha['localidade']."";

}
?>

Alguem me pode dar uma ajuda, já que estou á 1 dia de volta do código e não consigo que o mesmo funcione :)

Cumprimentos

Edited by yoda

Share this post


Link to post
Share on other sites
Planphp

Boa tarde,

Não aparece os registos selecionados no formulario na pagina de pesquisa.

Deveria aparecer os resultados relacionados com a pesquisa efectuada.

A página n aparece com nenhum erro, mas tambem não mostra os resultados, fica em branco.

Share this post


Link to post
Share on other sites
Planphp
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\WampDeveloper\Websites\DefaultWebsite\webroot\consulting_plan\pesquisa.php on line 12

Edited by yoda

Share this post


Link to post
Share on other sites
yoda

Isso significa que precisas indicar o ponteiro da ligação MySQL a essa função. Onde fazes a ligação ao mysql, atribui o resultado a uma variável e usa-a com essa função. Exemplo :

$pointer = mysql_connect('...', '...', '...');


# -.. e na função que dá erro

mysql_fetch_array($resultado, $pointer);

Edited by yoda

Share this post


Link to post
Share on other sites
Planphp

<?php

$pointer = "includes/config.php";

$lista_categorias = $_POST['categoria'];
$lista_localidades = $_POST['localidade'];
$resultado = mysql_query("SELECT * FROM promocoes_pag_principal_meio_1 (categoria, localidade) VALUES ('$lista_categorias', '$lista_localidades',");
while($linha = mysql_fetch_array($resultado, $pointer)) {
echo "".$linha['promocoes_id']."";
echo "".$linha['titulo']."";
echo "".$linha['descricao_short']."";
echo ""." <img src='".$linha['imagem']. "' alt='' align='top' border='1' width='564' height='350'/></p>";
echo "".$linha['preco']."";
echo "".$linha['desconto']."";
echo "".$linha['estado']."";
echo "".$linha['descricao_long']."";
echo "".$linha['inclui']."";
echo "".$linha['data_inicio']."";
echo "".$linha['data_termino']."";
echo "".$linha['empresa']."";
echo "".$linha['categoria']."";
echo "".$linha['localidade']."";

}
?>

Da o mesmo erro:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\WampDeveloper\Websites\DefaultWebsite\webroot\consulting_plan\pesquisa.php on line 9

Edited by scorch
Adicionado Geshi. ;)

Share this post


Link to post
Share on other sites
NunoDinis

A tua query está mal feita. Está um misto de insert e select..


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
Planphp

Será que é possivel me ajudares na construção da query, uma vez que pretendo consultar a base de dados transportando os dados do formulario atraves dos POST, para que mostre os resultados encontrados no campo da BD categoria e localidade ?

Share this post


Link to post
Share on other sites
Planphp

<?php

require_once ("includes/config.php");

$lista_categorias = $_POST['categoria'];
$lista_localidades = $_POST['localidade'];
$resultado = mysql_query("SELECT * FROM promocoes_pag_principal_meio_1 order by promocoes_id");
while($linha = mysql_fetch_array($resultado)) {
echo "".$linha['titulo']."";

}
?> </td>
<td><?php

require_once ("includes/config.php");

$lista_categorias = $_POST['categoria'];
$lista_localidades = $_POST['localidade'];
$resultado = mysql_query("SELECT * FROM promocoes_pag_principal_meio_1 order by promocoes_id");
while($linha = mysql_fetch_array($resultado)) {

echo "".$linha['categoria']."";


}
?>

Com o código acima, mostra da pagina de resultados todos os registos, mas eu so quero que mostre os registos seleccionados e não estou a conseguir desde ontem :)

Edited by scorch
Adicionado Geshi.

Share this post


Link to post
Share on other sites
Planphp

Tabela: promocoes_pag_principal_meio_1

Estrutura:

promocoes_id int(15) No

titulo varchar(125) No

descricao_short varchar(255) No

imagem varchar(255) No

preco varchar(35) No

desconto varchar(35) No

estado varchar(35) No

descricao_long varchar(255) No

inclui varchar(35) No

data_inicio date No

data_termino date No

empresa varchar(55) No

categoria varchar(55) No

localidade varchar(55) No

Edited by Planphp

Share this post


Link to post
Share on other sites
Planphp

Obrigado pela query.

A questão

e que eu não estou a conseguir agarrar nas variaveis que vem do formulario e que eu estou a indicar que será $lista_categorias e $lista_localidades depois fazer a consulta á base de dados e depois mostrar apenas as linhas que estão gravadas na base de dados que contenham as variaveis que vem no formulario.

Tipo seleccionar no formulario Hotel e Lisboa e depois estas variaveis serem inseridas no select e apresentados apenas os registos que sejam de categoria Hotel e que estajam localizados em lisboa, só que quando são apresentados os registos seja visivel todos os campos da linha da base de dados que contenham a variavel categoria e localidade que vem do formulario.

No meu pouco conhecimento de php eu penso que o seguinte codigo devia fazer o que quero:

require_once ("includes/config.php");

$lista_categorias = $_POST['categoria'];
$lista_localidades = $_POST['localidade'];

$resultado = mysql_query("SELECT * FROM promocoes_pag_principal_meio_1 WHERE categoria,localidade  LIKE "%$lista_categorias%" "%$lista_localidades%" ORDER BY promocoes_id");

while($linha = mysql_fetch_array($resultado)) {

echo "".$linha['promocoes_id']."";
echo "".$linha['titulo']."";
echo "".$linha['descricao_short']."";
echo ""." <img src='".$linha['imagem']. "' alt='' align='top' border='1' width='564' height='350'/></p>";
echo "".$linha['preco']."";
echo "".$linha['desconto']."";
echo "".$linha['estado']."";
echo "".$linha['descricao_long']."";
echo "".$linha['inclui']."";
echo "".$linha['data_inicio']."";
echo "".$linha['data_termino']."";
echo "".$linha['empresa']."";
echo "".$linha['categoria']."";
echo "".$linha['localidade']."";

}

Edited by yoda

Share this post


Link to post
Share on other sites
Planphp

Agora ja aparecem resultados, mas aparecem todos os registos, por isso o erro esta no php, que não esta a funcionar.

Para que tenhas uma noção melhor de como tenho os registos na BD e a consulta que esta a ser feita.

Na tabela eu tenho dois registos, no primeiro tenho:

Categoria: Hotel

Localidade: Lisboa

no segundo:

Categoria: Telemoveis

Localidade: Porto

E está a aparecer os 2 registos, o que quer dizer que não esta a apresentar a selecção efectuada no formulario .

Se me poderes ajudar agradeço bastante pois não sei como contornar esta situação,

obrigado

Share this post


Link to post
Share on other sites
Planphp

Continua a mostrar os dois registos.

Se eu seleciono no formulario:

Categoria:Hotel

Localidade:Porto

não deveria aparecer:

Categoria: Telemoveis

Localidade: Sines

Será que tem a ver da forma como está estruturado o codigo PHP do WHILE para a frente?

A forma do echo será a correcta, pois eu estou a pedir que escreva os registos de todos os campo....

Share this post


Link to post
Share on other sites
Planphp

n esta a passar nada, pois estou a fazer:

$lista_categorias = $_POST['lista_categorias'];

$lista_localidades = $_POST['lista_localidades'];

print $lista_categorias;

print $lista_localidades;

e não aparece nada

Share this post


Link to post
Share on other sites
Planphp

Bem,

não está nada facil conseguir efectuar a pesquisa pelos campos seleccionados, é demais, eu consigo que no formulario efectue a conexao á base de dados e exibe os dados nos campos do formulario, depois quando envio para o script que deve mostrar os dados filtrados no formulario não aparece nada.

Abaixo vou mostrar o codigo e se alguem conseguir ver o erro solicito a ajuda pois eu não estouy a conseguir ver o problema.

Formulario:

<form action="pesquisa.php" enctype="multipart/form-data" method="_POST" >
<table width="79%" border="0" align="left" cellpadding="0" cellspacing="0">
<tr>
<th width="37%" align="left" valign="middle" bgcolor="#FFFFFF" class="Titlopreto1" scope="col"> <span class="links_menu_principal">
<label for="lista_categorias"><strong>Oferta:</strong></label>
</span></th>
<th width="63%" align="left" bgcolor="#FFFFFF" class="textobranco2" scope="col"><span class="links_menu_principal">Localidade:</span></th>
</tr>
<tr>
<td align="left" valign="middle" bgcolor="#FFFFFF"><span class="links_menu_principal">
<select name="categorias" size="1" class="caixa">
<option value="" selected="selected"><?php $procurar_categoria = mysql_query("Select * FROM categoria order by id DESC");
while ($linhac = mysql_fetch_array($procurar_categoria)){
echo '<option value="'.$linhac['id'].'">'.$linhac['categoria'].'
</option>';
}?>
</select>
</span></td>
<td bgcolor="#FFFFFF"><span class="links_menu_principal">
<select name="localidades" size="1" class="caixa" >
<option value="" selected"selected"><?php $procurar_localidade = mysql_query("Select * FROM localidade order by id DESC");
while ($linhal = mysql_fetch_array($procurar_localidade)){
echo '<option value="'.$linhal['id'].'">'.$linhal['local'].'
</option>';
}?></option>

</select>
</span></td>
</tr>
<tr>
<td bgcolor="#FFFFFF"> </td>
<td bgcolor="#FFFFFF"> </td>
</tr>
<tr>
<td colspan="2" align="center" valign="middle" bgcolor="#FFFFFF"><input type="hidden" name="acao" class="caixa" value="enviar" />
<input type="submit" class="caixa" value="pesquisar" />

Pesquisa.php

// onde está o script para mostrar os resultados

<?php
$conexao = mysql_connect('localhost','root','xpto') or die (mysql_error());

if ($conexao){
mysql_select_db ("teste");

}
?>

<?

if(isset($_POST['acao'])&& $_POST['acao'] == 'enviar') {
$categoria = $_POST['categoria'];
$localidade = $_POST['localidade'];

$selecciona_promocao = mysql_query ("SELECT * FROM promocoes_pag_principal_meio_1 WHERE categoria = '$categoria' AND localidade = '$localidade'");
if(mysql_num_rows($selecciona_promocao) == 0){
echo 'Lamentamos mas a sua pesquisa não obteve resultados';
}else{
while($linha_promocao = mysql_fetch_array($selecciona_promocao)){
echo ''.$linha_promocao['preco'].'';
}
}
}
?>

Edited by scorch
Adicionado Geshi. :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.