Jump to content
ivanling

Duvida php em wordpress

Recommended Posts

ivanling

Boas,

Antes de mais obrigado a  todos com o que já aprendi com este forum, mas esta é a primeira vez que vou colocar uma questão pois já ando a bulha com isto a um tempo  e não estou a conseguir ultrapassar a questão, passo a explicar.

Tenho um site em wordpress com um plug in que me permite utilizar código em php nas minha paginas posts e widgets. O plugin funciona as mil maravilhas pois tenho uma pesquisa em php que executa um select a uma base de dados e mostra o resultado até aqui tudo bem.

<?php
/*****************************
*  Simple SQL Search Tutorial by Frost
*  of Slunked.com
******************************/

$dbHost = 'localhost'; // localhost will be used in most cases
// set these to your mysql database username and password.
$dbUser = 'searchuser'; 
$dbPass = 'searchpass';
$dbDatabase = 'searchdb'; // the database you put the table into.
$con = mysql_connect($dbHost, $dbUser, $dbPass) or trigger_error("Failed to connect to MySQL Server. Error: " . mysql_error());

mysql_select_db($dbDatabase) or trigger_error("Failed to connect to database {$dbDatabase}. Error: " . mysql_error());

// Set up our error check and result check array
$error = array();
$results = array();

// First check if a form was submitted. 
// Since this is a search we will use $_GET
if (isset($_GET['search'])) {
   $searchTerms = trim($_GET['search']);
   $searchTerms = strip_tags($searchTerms); // remove any html/javascript.
   
   if (strlen($searchTerms) < 3) {
      $error[] = "Search terms must be longer than 3 characters.";
   }else {
      $searchTermDB = mysql_real_escape_string($searchTerms); // prevent sql injection.
   }
   
   // If there are no errors, lets get the search going.
   if (count($error) < 1) {
      $searchSQL = "SELECT sid, sbody, stitle, sdescription FROM simple_search WHERE ";
      
      // grab the search types.
      $types = array();
      $types[] = isset($_GET['body'])?"`sbody` LIKE '%{$searchTermDB}%'":'';
      $types[] = isset($_GET['title'])?"`stitle` LIKE '%{$searchTermDB}%'":'';
      $types[] = isset($_GET['desc'])?"`sdescription` LIKE '%{$searchTermDB}%'":'';
      
      $types = array_filter($types, "removeEmpty"); // removes any item that was empty (not checked)
      
      if (count($types) < 1)
         $types[] = "`sbody` LIKE '%{$searchTermDB}%'"; // use the body as a default search if none are checked
      
          $andOr = isset($_GET['matchall'])?'AND':'OR';
      $searchSQL .= implode(" {$andOr} ", $types) . " ORDER BY `stitle`"; // order by title.

      $searchResult = mysql_query($searchSQL) or trigger_error("There was an error.<br/>" . mysql_error() . "<br />SQL Was: {$searchSQL}");
      
      if (mysql_num_rows($searchResult) < 1) {
         $error[] = "The search term provided {$searchTerms} yielded no results.";
      }else {
         $results = array(); // the result array
         $i = 1;
         while ($row = mysql_fetch_assoc($searchResult)) {
            $results[] = "{$i}: {$row['stitle']}<br />{$row['sdescription']}<br />{$row['sbody']}<br /><br />";
            $i++;
         }
      }
   }
}

function removeEmpty($var) {
   return (!empty($var)); 
}
?>
<html>
   <title>My Simple Search Form</title>
   <style type="text/css">
      #error {
         color: red;
      }
   </style>
   <body>
      <?php echo (count($error) > 0)?"The following had errors:<br /><span id=\"error\">" . implode("<br />", $error) . "</span><br /><br />":""; ?>
      <form method="GET" action="<?php echo $_SERVER['PHP_SELF'];?>" name="searchForm">
         Search For: <input type="text" name="search" value="<?php echo isset($searchTerms)?htmlspecialchars($searchTerms):''; ?>" /><br />
         Search In:<br />
         Body: <input type="checkbox" name="body" value="on" <?php echo isset($_GET['body'])?"checked":''; ?> /> | 
         Title: <input type="checkbox" name="title" value="on" <?php echo isset($_GET['title'])?"checked":''; ?> /> | 
         Description: <input type="checkbox" name="desc" value="on" <?php echo isset($_GET['desc'])?"checked":''; ?> /><br />
                 Match All Selected Fields? <input type="checkbox" name="matchall" value="on" <?php echo isset($_GET['matchall'])?"checked":''; ?><br /><br />
         <input type="submit" name="submit" value="Search!" />
      </form>
      <?php echo (count($results) > 0)?"Your search term: {$searchTerms} returned:<br /><br />" . implode("", $results):""; ?>
   </body>
</html>

O meu problema é que este código para o formulário da pesquisa está num widgets lateral e o resultado da pesquisa aparece abaixo do formulário, e o que eu queria era que o resultado da pesquisa aparece no conteúdo de uma determinada pagina, que abriria quando eu fizesse a pesquisa.

Basicamente o que que queria era ter o formulário no witget e o resultado no corpo da pagina.

Alguma dica?

Share this post


Link to post
Share on other sites
socopo

Boas, eu também sou bastante newcomer aqui mas aqui vai a minha tentativa de ajuda  :cheesygrin:

O teu problema é até bastante simples de se resolver, nunca trabalhei com o wordpress nem se quer tive a ver a fundo o teu código mas o que te basta fazer é alterar duas coisas para que fique a funcionar que são as seguintes:

Atenção isto é uma solução só pa perceberes não para ser a final!!!

1 - copias todo o código dessa página para a nova onde irá aparecer os resultados

2 - Na primeira página onde tens o formulário alteras o atributo action para o nome da página que criaste agora (onde vão aparecer os resultados)

antes

<form method="GET" action="<?php echo $_SERVER['PHP_SELF'];?>" name="searchForm">

depois

<form method="GET" action="nova_pag.php" name="searchForm">

E pronto, os teus resultados estão noutra página agora só tens que apagar o q não faz falta na segunda página para só mostrar os resultados e na primeira como não precisas mais de mostrar lá os resultados também podes apagar funções desnecessárias e html também desnecessário.

Não percebi muito bem qual foi a tua dificuldade em resolver isto, se foi por não saber sobre os atributos da tag form ou se foi outra coisa qqr mas pronto boa sorte nisso e espero que tenha ajudado :)

Share this post


Link to post
Share on other sites
ivanling

Antes de mias obrigado pela resposta,

Quanto aos resultados da dica ainda tenho de experimentar. Mas o meu problema prendesse também com outros factores como o escrever o código php directamente na edição de pagina do wordpress pois quando faço gravar o wordpress trata essa informação e dai pode ocorrer alguns problemas, que é o que está a acontecer, (não aparecerem os resultados no sitio onde os quero)

Mas de qualquer maneira já resolvi a questão alterando a maneira como os resultados são exibidos mas mantive tudo na barra lateral.

Muito obrigado

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

×
×
  • Create New...

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.