Pesquisar.php

Isso é uma beca vasto demais, não? :P

Pesquisa interna do site? Pesquisa da base de dados? Pesquisa do texto das páginas? Pesquisa do conteúdo das pastas?

abraços, HecKel
 
<?php

$handler = mysql_connect("localhost", "username", "password") or die ("não me consigo conectar");
mysql_select_db("nome da bd", $handler) or Die ("Não consigo abrir a BD");

$texto = $_GET['search'];

$result = mysql_query("SELECT [campo da bd que tem o texto] FROM [tabela que contem os dados] WHERE [campo da tabela que contem esse dado] LIKE '%$text%'");

while ($tmp = mysql_fetch_array($result)){

//tratamento dos dados :
echo "$tmp['campo que contem info'] \r\n";

}

?>

PS: Isto é uma base. Precisas de segurança nisto.
PS2: Isto é muito eficaz para bases de dados pequenas, se for para usar bases de dados complexas e com bastante trafego e informação armazenada, evita fazer pesquisas utilizando selects.
 
Não isto é para colocar dentro de um sistema desenvolvido do tipo "sistema para catalogar hardware" da empresa. e capaz de ter alguma informaçao sao cerca de 80 máquinas, no entanto é para correr em localhost.

vou testar isso amanha de manha na empresa.

tnks plo exemplo
 
NOVO ERRO

dps de colocar tudo tenho um novo erro ao qual nao encontro soluçao

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in c:\programas\easyphp1-8\www\workmedia\prc2.php on line 13

este erro tem a ver com esta linha:

echo "$tmp['$texto'] \r\n"; ««

PHP:
<?php
$handler = mysql_connect("localhost", "root", "") or die ("não me consigo conectar"); 
mysql_select_db("chardware", $handler) or Die ("Não consigo abrir a BD");
$texto = $_GET['search'];
$result = mysql_query("SELECT * FROM hardware WHERE fornecedor LIKE '%$text%'");
while ($tmp = mysql_fetch_array($result)){
//tratamento dos dados :
echo "$tmp['$texto'] \r\n";
}
?>

este é todo o código que tenho actualmente, abraços
 
NOVO ERRO

dps de colocar tudo tenho um novo erro ao qual nao encontro soluçao

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in c:\programas\easyphp1-8\www\workmedia\prc2.php on line 13

este erro tem a ver com esta linha:

echo "$tmp['$texto'] \r\n"; ««

PHP:
<?php
$handler = mysql_connect("localhost", "root", "") or die ("não me consigo conectar"); 
mysql_select_db("chardware", $handler) or Die ("Não consigo abrir a BD");
$texto = $_GET['search'];
$result = mysql_query("SELECT * FROM hardware WHERE fornecedor LIKE '%$text%'");
while ($tmp = mysql_fetch_array($result)){
//tratamento dos dados :
echo "$tmp['$texto'] \r\n";
}
?>

este é todo o código que tenho actualmente, abraços


troca por echo $tmp['texto'] . "\r\n";

ou então tira as plicas de dentro do array.
 
caso tir as plicas ou mude a linha

echo "$tmp[$texto] \r\n";


para

echo $tmp['texto'] . "\r\n";

ele da me este erro:

Notice: Undefined index: search in c:\programas\easyphp1-8\www\workmedia\prc2.php on line 6

Notice: Undefined variable: text in c:\programas\easyphp1-8\www\workmedia\prc2.php on line 8

Notice: Undefined index: in c:\programas\easyphp1-8\www\workmedia\prc2.php on line 13

Notice: Undefined index: in c:\programas\easyphp1-8\www\workmedia\prc2.php on line 13

Notice: Undefined index: in c:\programas\easyphp1-8\www\workmedia\prc2.php on line 13

---------------------------
ja n e o mesmo mas no entanto mantem se a dizer ' ah e tal tens erros na linha 13'

pronto..lol, abraços ;D
 
nao, chama se fornecedor entao sera:

echo "$tmp[$fornecedor] \r\n";

mais uma coisa tenho o formulario e tenho de enviar tb as variaveis como faço?


e ja agr kual o melhor metodo GET ou POST?
 
hey consegui resolver todos esses problemas

agr e o seguinte:

ficheiro de envio
<input name="fornecedor" type="hidden" value="<? echo $_REQUEST['fornecedor']?>">

coloquei esta var no entanto n sei o que se passa porque no outro ficheiro onde supostamente vai receber esta variavel ele deveria
agarra la
ficheiro a receber
$texto = $_POST['fornecedor'];

Notice: Undefined index: fornecedor in c:\programas\easyphp1-8

\www\workmedia\procurar.php on line 31

a linha 31 é:

<input name="fornecedor" type="hidden" value="<? echo $_REQUEST['fornecedor']?>">

o que esta errado?
 
hey consegui resolver todos esses problemas

agr e o seguinte:

ficheiro de envio
<input name="fornecedor" type="hidden" value="<? echo $_REQUEST['fornecedor']?>">

coloquei esta var no entanto n sei o que se passa porque no outro ficheiro onde supostamente vai receber esta variavel ele deveria
agarra la
ficheiro a receber
$texto = $_POST['fornecedor'];

Notice: Undefined index: fornecedor in c:\programas\easyphp1-8

\www\workmedia\procurar.php on line 31

a linha 31 é:

<input name="fornecedor" type="hidden" value="<? echo $_REQUEST['fornecedor']?>">

o que esta errado?

vê se isto te ajuda

Código:
$texto = $_POST["fornecedor"];
<input name="fornecedor" type="hidden" value="<? echo $texto;?>">

para tirares os avisos Undefined index tens de editar o php.ini e mudar o seguinte setting para:
error_reporting = E_ALL & ~E_NOTICE

ou então podes modificar na propria página acrescentando a seguinte linha logo no inicio:
PHP:
error_reporting(E_ALL ^ E_NOTICE);
 
decidi colocar uma breve explicaçao dakilo que quero talvez seja mais facil.
a ideia é ter um formulario e uma list box na qual nos escolhemos o campo da bd ke queremos procurar (listbox) enquanto isso dps de colocar mos texto no form ele vai enviar e procurar no campo ke nos escolhemos da listbox.

hmve1.jpg

espero que com a imagem se perceba melhor a minha ideia

:-Dobrigado, abraços
 
Reload

ok de volta á carga achei necessário re actualizar em aussilio de todos o que tambem ainda n conseguiram faze lo.

bom, continuado o que esta em cima essa foto que se vê é o formulario que ira enviar e que o codigo é:

Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
 <meta name="author" content="">
 <title>Workmedia - Hardware Management</title>
 
    <link href="css.css" rel="stylesheet" type="text/css">
    <link href="estilo.css" rel="stylesheet" type="text/css">
</head>
<body>
<?php
  include 'principal.php'; 
 ?>
<br>
<br>
  <?php    
 
  $ligacao = mysql_pconnect( "localhost" , "root" , "" ) or trigger_error( mysql_error( ) , E_USER_ERROR );
  mysql_select_db( "chardware" , $ligacao );
  ?>
    <?
   $query = "SELECT id,caracteristicas,tipo,quantidade,data,estado,local,garantia,fornecedor FROM hardware";
   $resultado = mysql_query($query,$ligacao);
    while ($var = mysql_fetch_array($resultado))
  ?>
 
 
<form action="prc2.php" name="palavra" method="post" >   
  <label for="texto_pesquisa">Texto a pesquisar:</label> 
 <input name="palavra" type="text" id="palavra" />     em      <select name="palavra">          
  <option value="-1">Seleccione o campo a procurar</option>          
        <option id="$_POST['id']">id</option>
        <option id="$_POST['caracteristicas']">Caracteristicas</option>
        <option id="$_POST['tipo']">Tipo</option>
        <option id="$_POST['quantidade']">Quantidade</option>
        <option id="$_POST['estado']">Estado</option>
        <option id="$_POST['local']">Local</option>
        <option id="$var['fornecedor']">Fornecedor</option>
  <input name="fornecedor" type="hidden"  value="<? echo $var['fornecedor']?>">
  </select>     
 <input type="submit" name="Submit" value="Procurar" />
</form> 
<br>
<?php
  include 'footer.php'; 
 ?>
</body>
</html>
---------------------------------------------------

de seguida ele é enviado (como normal) para outro ficheiro php, que é o seguinte:

PHP:
 <?php 
 
$ligacao = mysql_pconnect( "localhost" , "root" , "" ) or trigger_error( mysql_error( ) , E_USER_ERROR );
mysql_select_db( "chardware" , $ligacao );
?>
<?
 
$fornecedor = $_POST['fornecedor'];
 
 
//$sql = SELECT * FROM hardware WHERE $fornecedor LIKE "%$palvra%";
 
$sql = "SELECT * FROM hardware WHERE ".$_POST[ 'fornecedor' ]." LIKE UPPER( '%".strtoupper($_POST[ 'palavra' ])."%')";
$recordset = mysql_query( $sql , $ligacao ) or die( mysql_error()); 
$row_recordset = mysql_fetch_assoc( $recordset ); 
do { 
echo $row_recordset[ "$fornecedor" ]."<br />"; 
echo $row_recordset[ "$caracteristicas" ]."<br />"; 
echo $row_recordset[ "$tipo" ]."<br />"; 
} while ( $row_recordset = mysql_fetch_assoc( $recordset )); 
 
?>

------------------------------
A nivel de bases de dados:

BASE DE DADOS: chardware
TABELA: hardware
--------------------------------------

Actualmente tenho o erro:

Você tem um erro de sintaxe no seu SQL próximo a 'LIKE UPPER( '%FORNECEDOR%')' na linha 1

abraços e aguardo , eu tb, a ajuda. :joker:
 
Última edição:
Bom, se não fazes escape/parse/validação das variáveis que mandas para o SQL, um dia acordas e tens uma surpresa...

Por exemplo, o que aconteceria neste caso:

Código:
SELECT * FROM hardware
WHERE " . $_POST[ 'fornecedor' ] . " 
LIKE UPPER( '%" . strtoupper($_POST[ 'palavra' ]) . "%')";

se um utilizador 'descuidado' enviar para a tua variável $fornecedor, a string:
Código:
"id=0;truncate table hardware;"

Se disseres " ah e tal... mas como é que ele iria adivinhar o nome da tabela..." estás a inventar desculpas ;-)
 
para fechar este tópico vou postar os dois codigos correctos.

procurar.php (formulario de envio)

Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "[URL]http://www.w3.org/TR/html4/loose.dtd[/URL]">
<html>
<head>
 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
 <meta name="author" content="">
 <title>Workmedia - Hardware Management</title>
 
    <link href="css.css" rel="stylesheet" type="text/css">
    <link href="estilo.css" rel="stylesheet" type="text/css">
</head>
<body>
<?php
  include 'principal.php'; 
 ?>
<br>
<br>
  <?php    
 
  $ligacao = mysql_pconnect( "localhost" , "root" , "" ) or trigger_error( mysql_error( ) , E_USER_ERROR );
  mysql_select_db( "chardware" , $ligacao );
  ?>
    <?
   $query = "SELECT id,caracteristicas,tipo,quantidade,data,estado,local,garantia,fornecedor FROM hardware";
   $resultado = mysql_query($query,$ligacao);
    while ($var = mysql_fetch_array($resultado))
  ?>
 
 
<form action="prc2.php" name="palavra" method="post" >   
  <label for="texto_pesquisa">Texto a pesquisar:</label> 
 <input name="palavra" type="text" id="palavra" />     em      <select name="campo">          
 
        <option value="caracteristicas" id="$_POST['caracteristicas']">Caracteristicas</option>
        <option value="tipo" id="$_POST['tipo']">Tipo</option>
        <option value="quantidade" id="$_POST['quantidade']">Quantidade</option>
        <option value="estado" id="$_POST['estado']">Estado</option>
        <option value="local" id="$_POST['local']">Local</option>
        <option value="fornecedor" id="$_POST['fornecedor']">Fornecedor</option>
     <option value="id" id="$_POST['id']">id</option>
 
  </select>
 <input type="submit" name="Submit" value="Procurar" />
</form> 
<br>
<?php
  include 'footer.php'; 
 ?>
</body>
</html>

-------------

prc2.php -- ficheiro que recebe do formulario procurar.php

PHP:
<?php 
 
$ligacao = mysql_pconnect( "localhost" , "root" , "" ) or trigger_error( mysql_error( ) , E_USER_ERROR );
mysql_select_db( "chardware" , $ligacao );
?>
 
<br />
<br />
<table width="200" border="1">
<tr>
<td><?
$campo = $_POST['campo'];
$palavra = $_POST['palavra'];
$sql = "SELECT * FROM hardware WHERE $campo LIKE '%$palavra%'";
$recordset = mysql_query( $sql , $ligacao ) or die( mysql_error()); 
$row_recordset = mysql_fetch_assoc( $recordset ); 
do { 
echo $row_recordset["$campo"]."<br />"; 
 
} while ( $row_recordset = mysql_fetch_assoc( $recordset )); 
?>
</td>
</tr>
</table>

-------------------

a funcionar ;D
 
Última edição:
Back
Topo