Foros del Web » Programando para Internet » PHP »

PHP OO Buscador con text field y combo-box

Estas en el tema de Buscador con text field y combo-box en el foro de PHP en Foros del Web. Estoy creando un buscador con dos niveles combo-box y un input de texto. Si busco solo con el input de texto busca pero si selecciono ...
  #1 (permalink)  
Antiguo 18/03/2014, 15:51
Avatar de satixfaxion  
Fecha de Ingreso: abril-2013
Ubicación: Tenerife
Mensajes: 8
Antigüedad: 6 años, 9 meses
Puntos: 0
Pregunta Buscador con text field y combo-box

Estoy creando un buscador con dos niveles combo-box y un input de texto.
Si busco solo con el input de texto busca pero si selecciono de los menus desplegables lo que me hace es sacarme todo lo que tengo en la base de datos.
Tengo una base de datos mysql con las tablas "search" donde estan todos los clientes, "provincia" para desplegar las provincias en el menu desplegable y "poblacion" para desplegar las poblaciones acorde con la provincia relaccionada que eso va bien y relacciona y despliega.



Conectar:

Código PHP:
<?php
function conectar()
{
    
mysql_connect("localhost""root""");
    
mysql_select_db("gsp");
}

function 
desconectar()
{
    
mysql_close();
}
?>
Proceso Combo-box:
Código PHP:
<?php
// Array que vincula los IDs de los selects declarados en el HTML con el nombre de la tabla donde se encuentra su contenido
$listadoSelects=array(
"sprovincia"=>"provincia",
"spoblacion"=>"poblacion"
);

function 
validaSelect($selectDestino)
{
    
// Se valida que el select enviado via GET exista
    
global $listadoSelects;
    if(isset(
$listadoSelects[$selectDestino])) return true;
    else return 
false;
}

function 
validaOpcion($opcionSeleccionada)
{
    
// Se valida que la opcion seleccionada por el usuario en el select tenga un valor numerico
    
if(is_numeric($opcionSeleccionada)) return true;
    else return 
false;
}

$selectDestino=$_GET["select"]; $opcionSeleccionada=$_GET["opcion"];

if(
validaSelect($selectDestino) && validaOpcion($opcionSeleccionada))
{
    
$tabla=$listadoSelects[$selectDestino];
    include 
'conexion.php';
    
conectar();
    
$consulta=mysql_query("SELECT id, opcion FROM $tabla WHERE relacion='$opcionSeleccionada'") or die(mysql_error());
    
desconectar();
    
    
// Comienzo a imprimir el select
    
echo "<select name='".$selectDestino."' id='".$selectDestino."' onChange='cargaContenido(this.id)'>";
    echo 
"<option value='0'>Elige</option>";
    while(
$registro=mysql_fetch_row($consulta))
    {
        
// Convierto los caracteres conflictivos a sus entidades HTML correspondientes para su correcta visualizacion
        
$registro[1]=htmlentities($registro[1]);
        
// Imprimo las opciones del select
        
echo "<option value='".$registro[0]."'>".$registro[1]."</option>";
    }            
    echo 
"</select>";
}
?>
Formulario Imprimir Combo-box:
Código PHP:
<?php
   
function generaPaises()
                        {
                            include 
'../select2n/conexion.php';
                            
conectar();
                            
$consulta=mysql_query("SELECT id, opcion FROM provincia");
                            
desconectar();

                            
// Voy imprimiendo el primer select compuesto por los provincia
                            
echo "<select name='sprovincia' id='sprovincia' onChange='cargaContenido(this.id)'>";
                            echo 
"<option value='0'>Elige</option>";
                            while(
$registro=mysql_fetch_row($consulta))
                            {
                                echo 
"<option value='".$registro[0]."'>".$registro[1]."</option>";
                            }
                            echo 
"</select>";
                        }
                        
?>
                            <form action="../l/searchresults.php" name="form1" id="form1">
                                <div id="demoDer">
                                    <select disabled="disabled" name="spoblacion" id="spoblacion">
                                        <option value="0">Selecciona opci&oacute;n...</option>
                                    </select>
                                </div>
                                <div id="demoIzq"><?php generaPaises(); ?></div>
                                <div id="txtfild">
                                    <input type="text" name="k" id="searchtxt" style="width:150px;" />
                                    <input type="submit" name="searchbtn" id="searchbtn" value="Buscar" />
                                </div>
                            </form>
<?php
                            $k 
$_GET['k, sprovincia, spoblacion'];
                            
$terms explode(" "$k);
                            
$query "SELECT * FROM search WHERE ";

                            foreach (
$terms as $each) {
                                 
$i++;
                                
                                if (
$i == 1){
                                    
$query .= "keywords OR id LIKE '%$each%' ";
                                }
                                else{
                                    
$query .= "OR keywords OR id LIKE '%$each%' ";
                                }
                            }

                            
//connect
                            
mysql_connect("mysql.hostinger.es""u521948433_gsp""[email protected]@@");
                            
mysql_select_db("u521948433_gsp");

                            
$query mysql_query($query);
                            
$numrows mysql_num_rows($query);
                            echo 
"Número de resultados: $numrows para la busqueda <strong>$k</strong>";
                            if (
$numrows 0) {
                                while (
$row mysql_fetch_assoc($query)) {
                                    
$id $row['id'];
                                    
$title $row['opcion'];
                                    
$description $row['description'];
                                    
$keywords $row['keywords'];
                                    
$link $row['link'];

                                    echo 
"<h2><a href='$link'>$title</a></h2>
                                    $description<br /><strong> $link </strong><br /><br />"
;
                                }
                            }
                           
?>
No se como hacer para que me guarde todo lo de los campos ya seleccionados y buscar la tabla search y que me muestre las coincidencias.

Muchas gracias de anticipado y espero que porfavor alguien me ayude ya que estoy volviendome loco y no doy mas de si.

Mil gracias mil gracias de corazon.

Última edición por satixfaxion; 18/03/2014 a las 16:01
  #2 (permalink)  
Antiguo 18/03/2014, 20:00
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.994
Antigüedad: 11 años, 5 meses
Puntos: 2194
Respuesta: Buscador con text field y combo-box

Primero necesitas corregir tu HTML, tienes un <select /> antes del formulario y, por supuesto, ese campo no se incluirá al procesar.

También es recomendable que especifiques el método del formulario, ya sea get o post, no dejes que el navegador asuma o decida por ti.

Para que te guarde los campos seleccionados es bastante fácil, ejemplo:

Código PHP:
Ver original
  1. // Obtienes valor del formulario o inicializas
  2. $select = (isset($_GET['select'])) ? $_GET['select'] : 0;
  3. $texto = (isset($_GET['texto'])) ? $_GET['texto'] : '';
  4.  
  5. // Si es un select, cuando estás asignando las opciones:
  6. while(/* condición para leer opciones */) {
  7.        $ok = ($select == $row['id']) ? ' selected="selected"' : '';
  8.        echo "<option value=\"{$row['id']}\"$ok>{$row['nombre']}</option>";
  9. }
  10.  
  11. // Para un texto es mucho más sencillo:
  12. echo "<input type=\"text\" name=\"texto\" value=\"$text\" />";
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: avanzado, buscador, combobox, input, mysql
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 08:17.