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

PHP - search básico

Discussão em 'Web Development' iniciada por bmccruz, 26 de Junho de 2008. (Respostas: 6; Visualizações: 813)

  1. bmccruz

    bmccruz Suspenso

    Bom dia!

    Necessito de implementar um search num base de dados mysql, algo bastante simple, cheguei a este código para a form:

    Código:
    <form name="search" method="post" action="search.php">
    Procura por: <input type="text" name="find" /> in 
    <input type="hidden" name="searching" value="yes" />
    <input type="submit" name="search" value="Search" />
    </form>
    que chama o search.php que faz a busca e expõe os resultados, cheguei a este código (num estado muito básíco ainda pois quero mostrar os resultados de outra forma e quero também provalvemente acrescentar uma função de gerar os resultados por múltiplas páginas e não todas na mesma)


    Código:
    <? 
    include '../library/config.php';
    include '../library/opendb.php';
    if ($find == "") 
    { 
    echo "insira um termo para pesquisa"; 
    }
    else
    {
    $data = mysql_query("SELECT * FROM nomedatable WHERE nomedocampo LIKE '%$find%'"); 
    while($result = mysql_fetch_array( $data )) 
    { 
    echo $result['nomedocampo1']; 
    echo " "; 
    echo $result['nomedocampo2']; 
    echo "<br>"; 
    } 
    $anymatches=mysql_num_rows($data); 
    if ($anymatches == 0) 
    { 
    echo "Nenhum resultado encontrado"; 
    } 
    }
    ?>

    Mas não funciona, pelo menos fica logo encalhado na parte para inserir um termo de busca, posso escrever algo ou não mas dá sempre esse erro.
    Como posso resolver isto?


    Obrigado
     
  2. hostmake

    hostmake Power Member

    dá sempre "esse erro"....... Qual?


    $já experimentaste atribuir o $find ao $_POST 1º ?
    Imaginando que aqueles includes não o façam.
     
  3. bmccruz

    bmccruz Suspenso

    De facto tinha-me esquecido de fazer isso, obrigado agora já está a funcionar.
    Alterei mais alguma coisa e acrescentei outras nomeadamente a possibilidade de os resultados aparecerem em múltiplas páginas.
    Só que isso não funciona, pois os resultados são divididos aparece o numero de páginas totais os links para navegar para a próxima mas a próxima págian está sempre vazia.
    Eu suponho que o problema seja o facto de ele ir buscar as variáveis para o que pesquisar na tabela ao formulário e não seja valores fixos, exemplo:
    Código:
    SELECT * FROM azu WHERE upper($field) LIKE '%$find%'
    e não
    Código:
    SELECT * FROM azu WHERE campo1
    . Desta forma ao ir para a nova página não mostra nada.

    Como posso contornar este problema?

    Vou deixar aqui o código todo:

    Código:
    <html>
    <head>
    <title>teste</title>
    </head>
    <body>
    <font face="verdana" color="#333333" style='font-size:10pt;'>
    <br><br>
    <center>
    <form name="search" method="post" action="<?=$PHP_SELF?>">
    Procurar por: <input type="text" name="find" class="text" size="21" maxlength="100" /> em 
    <select name="field">
      <option value="campo1">1</option>
      <option value="campo2">2</option>
    </select>
    <input type="hidden" name="searching" value="yes" />
    <input type="submit" name="search" class="send" value="Procurar" />
    </form>
    </center>
    </font>
    </body>
    </html>
    <? 
    include '../library/config.php';
    include '../library/opendb.php';
    $find = $_POST['find'];
    $field = $_POST['field'];
    $searching = $_POST['searching'];
     
    if ($find == "") 
    { 
    echo "<br><br><br><br><center><font face='verdana' color='#333333' style='font-size:11pt;'>Insira um termo para pesquisa</font></center>"; 
    }
    else
    {
    $rowsPerPage = 1;
    $pageNum = 1;
    if(isset($_GET['page']))
    {
        $pageNum = $_GET['page'];
    }
    $offset = ($pageNum - 1) * $rowsPerPage;
    $getlist1 = "SELECT * FROM tabela WHERE upper($field) LIKE '%$find%'" . " LIMIT $offset, $rowsPerPage";
    $getlist2=mysql_query($getlist1) or die("Não foi possível obter os resultados");
    while($getlist3=mysql_fetch_array($getlist2))
    {
     print "aqui aparecem os resultados";
    }
    $getlist1  = "SELECT COUNT(id) AS numrows FROM azu WHERE upper($field) LIKE '%$find%'";
    $getlist2  = mysql_query($getlist1 ) or die('Não foi possível obter os resultados');
    $row     = mysql_fetch_array($getlist2, MYSQL_ASSOC);
    $numrows = $row['numrows'];
    $maxPage = ceil($numrows/$rowsPerPage);
    $self = $_SERVER['PHP_SELF'];
    $nav  = '';
    for($page = 1; $page <= $maxPage; $page++)
    {
       if ($page == $pageNum)
       {
          $nav .= " $page ";
       }
       else
       {
          $nav .= " <a href=\"$self?page=$page\">$page</a> ";
       } 
    }
    if ($pageNum > 1)
    {
       $page  = $pageNum - 1;
       $prev  = " <a href=\"$self?page=$page\">[Anterior]</a> ";
       $first = " <a href=\"$self?page=1\">[Primeira Página]</a> ";
    } 
    else
    {
       $prev  = '&nbsp;';
       $first = '&nbsp;';
    }
    if ($pageNum < $maxPage)
    {
       $page = $pageNum + 1;
       $next = " <a href=\"$self?page=$page\">[Próxima]</a> ";
       $last = " <a href=\"$self?page=$maxPage\">[Última Página]</a> ";
    } 
    else
    {
       $next = '&nbsp;';
       $last = '&nbsp;';
    }
    echo $first . $prev . $nav . $next . $last;
    $anymatches=mysql_num_rows($getlist2);
    if ($anymatches == 0) 
    { 
    print "<br><br><br><br><center><font face='verdana' color='#333333' style='font-size:11pt;'>Nenhum resultado encontrado</font></center>"; 
    }
    }
    include '../library/closedb.php';
    ?>
     
  4. MPalhas

    MPalhas Power Member

    aqui:
    Código:
    SELECT * FROM azu WHERE upper($field) LIKE '%$find%'
    não tens que fazer um upper também a variavel $find? assim se isso estiver em minusculas, como o campo é convertido para maiusculas, não dá resultados nenhuns
     
  5. bmccruz

    bmccruz Suspenso


    ai não tenho estado a ter problema todos os testes que fiz funcionou, quer com minusculas quer com maiusculas dá os mesmos resultados.
     
  6. bmccruz

    bmccruz Suspenso

    Nenhuma ideia?

    Precisava mesmo de ajuda em como ultprassar esse pequeno problema aquando da criação de múltiplas páginas para mostrar o resultado.
     
  7. hostmake

    hostmake Power Member

    Neste caso é melhor fazeres um debug do SQL, atribuis 1 variável ao SELECT, e fazes echo depois de ele ja ter os valores, corres isso no phpmyadmin, e já deves ter ideias, do que ele está a pesquisar, provavelmente está-te a escapar algo.
     

Partilhar esta Página