1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Pesquisar.php

Discussão em 'Web Development' iniciada por iGMBroken, 28 de Maio de 2007. (Respostas: 17; Visualizações: 3744)

  1. iGMBroken

    iGMBroken Power Member

    hey pessoal alguem pode me ajudar a fazer uma pesquisa para um site em php ?
    tnks ;D

    :P
     
  2. HecKel

    HecKel The WORM

    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
     
  3. iGMBroken

    iGMBroken Power Member

    bem realmente visto esse ponto, peço desculpa :-D.

    bom apenas queria fazer uma pesquisa nas bases de dados sobre o texto que colocar.
     
  4. spastikman

    spastikman Banido

    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.
     
  5. iGMBroken

    iGMBroken Power Member

    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
     
  6. iGMBroken

    iGMBroken Power Member

    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
     
  7. spastikman

    spastikman Banido


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

    ou então tira as plicas de dentro do array.
     
  8. iGMBroken

    iGMBroken Power Member

    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
     
  9. spastikman

    spastikman Banido

    por acaso o campo na bd chama-se texto ?
     
  10. iGMBroken

    iGMBroken Power Member

    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?
     
  11. p3dro

    p3dro Power Member

    Tenta assim
    PHP:
    echo "$tmp[fornecedor] \r\n";
    ou assim
    PHP:
    echo $tmp["fornecedor"]."\r\n";

    Quanto ao "get vs post", tenta ver se este link te elucida mais sobre esse aspecto
     
  12. iGMBroken

    iGMBroken Power Member

    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?
     
  13. p3dro

    p3dro Power Member

    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);
     
  14. iGMBroken

    iGMBroken Power Member

    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.

    [​IMG]
    espero que com a imagem se perceba melhor a minha ideia

    :-Dobrigado, abraços
     
  15. iGMBroken

    iGMBroken Power Member

    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_errormysql_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: 6 de Junho de 2007
  16. capricorn

    capricorn Power Member

    o "LIKE" não diferencia maiúsculas e minúsculas, por isso o "UPPER" está a mais
     
  17. slack_guy

    slack_guy Power Member

    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 ;-)
     
  18. iGMBroken

    iGMBroken Power Member

    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_errormysql_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: 9 de Junho de 2007

Partilhar esta Página