Foros del Web » Programando para Internet » PHP »

busqueva avanzada complicada¿

Estas en el tema de busqueva avanzada complicada¿ en el foro de PHP en Foros del Web. Bueno, a ver si me podeis ayudar ya que soy novata, no se si este es el foro adecuado para mi consulta o es mejor ...
  #1 (permalink)  
Antiguo 10/01/2007, 11:40
 
Fecha de Ingreso: abril-2004
Mensajes: 58
Antigüedad: 20 años
Puntos: 0
busqueva avanzada complicada¿

Bueno, a ver si me podeis ayudar ya que soy novata, no se si este es el foro adecuado para mi consulta o es mejor el de MySQL.
Resulta que estoy haciendo un buscador avanzado que me busca segun tres criterios: título, tipologia y población.
He creado esta búsqueda de SQL
Código PHP:
 <?
  $query2
="SELECT DISTINCT general.id_general, general.titol_general, general.URL, general.pes, general.tipologia_id, general_poblacio_link.poblacio_id, general_poblacio_link.general_id
 FROM general
 INNER JOIN
 general_poblacio_link ON general.id_general=general_poblacio_link.general_id
 WHERE general.titol_general LIKE '%$llistat_titols%' AND general.tipologia_id = '$llistat_tipo' AND general_poblacio_link.poblacio_id = '$llistat_pob'"
// faig la cerca
 
$result1 mysql_query($query2$link) or die ("Error en: $query. " mysql_error());
?>
Luego muestro los resultados dentro de una tabla con el siguiente cógido
Código PHP:
<?
 
while($row1 mysql_fetch_array($result1)) {
      
printf("<tr><td>&nbsp;%s</td><td>&nbsp;%s&nbsp;</td><td>&nbsp;%s&nbsp;</td><td>&nbsp;%s&nbsp;</td></tr>"$row1["id_general"],$row1["titol_general"],$row1["URL"],$row1["pes"]);
   }
 
   
mysql_free_result($result1);
   
mysql_close($link);
 
?>
Hasta ahí todo correcto y me funciona a la perfección. El problema es que yo quiero que si en el campo título se queda en blanco me busque por los otros dos criterios, sin tener en cuenta el título. Si se deja en blanco la tipologia, que me busque por título y por población, etc. Y si se deja todo en blanco que me muestre todos los resultados.

No tengo idea de php así que agradecería alguna ayuda con la sintaxis.
Supongo que tendria que hacer condicionales del tipo
si "titol" = ""
entonces hacer query de "tipologia" y "poblacion"
si ...
entonces ...
si ..
entonces ...
haciendo todas las posibles combinaciones o algo parecido.
Saludos y gracias anticipadas
  #2 (permalink)  
Antiguo 10/01/2007, 13:43
 
Fecha de Ingreso: julio-2003
Ubicación: Buenos Aires
Mensajes: 96
Antigüedad: 20 años, 9 meses
Puntos: 0
Re: busqueva avanzada complicada¿

si, eso funcionaria. En el capitulo 3 del manual podes encontrar la sintaxis requerida para condicionales:

http://www.php.net/manual/es/index.php
  #3 (permalink)  
Antiguo 10/01/2007, 16:37
 
Fecha de Ingreso: abril-2004
Mensajes: 58
Antigüedad: 20 años
Puntos: 0
Re: busqueva avanzada complicada¿

Bueno he construido un arcaico código que no me funciona, es este:

Código PHP:
 <?
 
 $query2
="SELECT DISTINCT general.id_general, general.titol_general, general.URL, general.pes, general.tipologia_id, general_poblacio_link.poblacio_id, general_poblacio_link.general_id
 FROM general
 INNER JOIN
 general_poblacio_link ON general.id_general=general_poblacio_link.general_id
 WHERE "
;
 if (
$llistat_titols =="" && $llistat_tipo =="" && $llistat_pob ==""){
     echo 
"Tienes que introducir un criterio";
 }
 elseif (
$llistat_titols =="" && $llistat_tipo =="" && $llistat_pob !==""){ 
 
query2.="general_poblacio_link.poblacio_id = '$llistat_pob'";
 }
 elseif (
$llistat_titols =="" && $llistat_tipo !=="" && $llistat_pob !==""){
 
query2.="general.tipologia_id = '$llistat_tipo' AND general_poblacio_link.poblacio_id = '$llistat_pob'";
 }
elseif (
$llistat_titols !=="" && $llistat_tipo =="" && $llistat_pob ==""){
 
query2.="general.titol_general LIKE '%$llistat_titols%'";
 }
 elseif (
$llistat_titols !=="" && $llistat_tipo =="" && $llistat_pob !==""){
 
query2.="general.titol_general LIKE '%$llistat_titols%' AND general_poblacio_link.poblacio_id = '$llistat_pob'";
 }
 elseif (
$llistat_titols !=="" && $llistat_tipo !=="" && $llistat_pob ==""){
 
query2.="general.titol_general LIKE '%$llistat_titols%' AND general_poblacio_link.poblacio_id = '$llistat_pob'";
 }
 elseif (
$llistat_titols !=="" && $llistat_tipo !=="" && $llistat_pob !==""){
 
query2.="general.titol_general LIKE '%$llistat_titols%' AND general.tipologia_id = '$llistat_tipo' AND general_poblacio_link.poblacio_id = '$llistat_pob'";
 } 
// faig la cerca
 
$result1 mysql_query($query2$link) or die ("Error en: $query2. " mysql_error());
?>
      <TABLE border="1" align="center" CELLPADDING=1 CELLSPACING=1 bordercolor="#660000" class="text">
        <TR>
            <TD width="20" class="text">Id</TD>
          <TD width="200" class="text">Título</TD>
          <TD width="200" class="text">Bajar archivo</TD>
          <TD width="20" class="text">Tamaño</TD>
         
<?
 
while($row1 mysql_fetch_array($result1)) {
      
printf("<tr><td>&nbsp;%s</td><td>&nbsp;%s&nbsp;</td><td>&nbsp;%s&nbsp;</td><td>&nbsp;%s&nbsp;</td></tr>"$row1["id_general"],$row1["titol_general"],$row1["URL"],$row1["pes"]);
   }
 
   
mysql_free_result($result1);
   
mysql_close($link);
 
?>
Se me queda la página en blanco, agracederia una ayuda.
Saludos
  #4 (permalink)  
Antiguo 11/01/2007, 08:18
 
Fecha de Ingreso: julio-2003
Ubicación: Buenos Aires
Mensajes: 96
Antigüedad: 20 años, 9 meses
Puntos: 0
Re: busqueva avanzada complicada¿

Para que te muestre en la pagina los errores producidos tenes que editar en el archivo php.ini (probablemente este en C:\WINDOWS\php.ini) la linea que empieza con error_reporting (sin punto y coma adelante. si no esta agregarla.) y asignarle el valor E_ALL & ~E_NOTICE. Quedaria algo como:

error_reporting = E_ALL & ~E_NOTICE

y poner a On la directiva display_errors:

display_errors = On

Guardas los cambios, reinicias el servidor web, y ahi tendria que mostrarte los errores en la pagina. El !== se escribe != (pe, if ($a != $b) { ... } )
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:11.