PHP - Filtrar datos de una tabla MySQL

 
Vista:
sin imagen de perfil

Filtrar datos de una tabla MySQL

Publicado por Carlos (20 intervenciones) el 13/06/2014 01:57:30
Buenas, primero que nada disculpas por volver a crear el tema. Estuve probando e intentando hacer el sistema de filtrar pero no he podido lograr hacerlo.

Para los que no conocen el tema, paso a comentar mi problema:

Tengo una tabla en una base de datos la cual consta de 3 columnas y una de ellas es 'url'. Bueno, yo quiero hacer que en mi search engine antes de buscar, si el usuario selecciona Filtrar Busqueda, pueda elegir entre "youtube" y "taringa" (formulario comun y corriente). Si elije taringa, cuando le de al boton de buscar que se devuelvan solo los links que empiezen en la columna 'url' con "http://taringa.net" o con "https://taringa.net" y lo mismo para youtube.

El formulario es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<form class="searchForm" action="search.php" method="GET">
     <input type="text" autocomplete="off" name="q" id="query"/>
     <div>
      <button>
       <svg class='shape-search' viewBox="0 0 100 100" class='shape-search'><use xlink:href='#shape-search'></use></svg>
      </button>
     </div>
	<input type="checkbox" name="filtroBusqueda" />
	<label for="filtro">Filtrar Busqueda</label><br/>
	<label for="youtube">youtube</label>
	<input type="radio" name="link" value="youtube"/><br/>
	<label for="taringa">taringa</label>
	<input type="radio" name="link" value="taringa"/>
	</form>

Y las funciones (en mi archivo functions.php) son:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
function getResults(){
 $q=$GLOBALS['q'];
 $p=$GLOBALS['p'];
 $start=($p-1)*10;
 if($q!=null){
  $starttime = microtime(true);
  $sql=$GLOBALS['dbh']->prepare("SELECT `title`, `url`, `description` FROM search WHERE `title` LIKE :q OR `url` LIKE :q OR `description` LIKE :q ORDER By id");
  $sql->bindValue(":q", "%$q%");;
  $sql->execute();
  $endtime = microtime(true);
  if($sql->rowCount()==0 || $start>$sql->rowCount()){
   return 0;
  }else{
   $duration = $endtime - $starttime;
   $res=array();
   $res['count']=$sql->rowCount();
   $res['time']=round($duration, 4);
   $limitedResults=$GLOBALS['dbh']->prepare("SELECT `title`, `url`, `description` FROM search WHERE `title` LIKE :q OR `url` LIKE :q OR `description` LIKE :q ORDER BY id LIMIT :start,:limit");
   $limitedResults->bindValue(":q", "%$q%");
   $limitedResults->bindValue(":start", $start, PDO::PARAM_INT);
   $limitedResults->bindValue(":limit", 10, PDO::PARAM_INT);
   $limitedResults->execute();
   while($r=$limitedResults->fetch()){
    $res["results"][]=array($r['title'], $r['url'], $r['description']);
   }
   return $res;
  }
 }
}
 
function filtrarBusqueda(){
   if(isset($_GET["filtroBusqueda"])){
 
	$sql = "SELECT 'url' FROM search";
 
		$link = $_GET["link"];
 
		switch($link){
 
			case "youtube": $sql = $sql."WHERE 'url' LIKE 'https://youtube.com%' or 'url' LIKE 'http://youtube.com%'"; break;
			case "taringa": $sql = $sql."WHERE 'url' LIKE 'https://taringa.net%' or 'url' LIKE 'http://taringa.net%'"; break;
 
		}
	}
	else
	{
 
		$sql = "SELECT 'url' FROM search";
 
	}
	$resultado = $mysqli->query($sql);
}

Yo se que esta mal, no se porque supongo que no tendría que hacer 2 funciones por separado, si no todo en la misma función (en la de getResults) pero no se como.

El formulario se envía a search.php, si. Pero search.php solo se encarga de mostrar los resultados que se obtienen de la función getResults. Por eso es que creo que debería hacer todo en la misma función.

Espero respuesta y realmente agradezco su ayuda, nuevamente disculpen que vuelva al tema pero no pude solucionarlo.

Si alguien quiere o necesita verlo en vivo para ayudarme, tengo un host. Lo puedo subir sin problema, muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Filtrar datos de una tabla MySQL

Publicado por Carlos (20 intervenciones) el 14/06/2014 17:15:14
¿Nadie que sepa ni me pueda tirar una idea o algo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar