Foros del Web » Programando para Internet » PHP »

Consulta parametrizada.

Estas en el tema de Consulta parametrizada. en el foro de PHP en Foros del Web. Saludos estimados, Tengo un formulario el cual cuenta con cinco listas desplegables y un campo de texto. Las listas se distribuyen de la siguiente manera: ...
  #1 (permalink)  
Antiguo 25/07/2013, 16:01
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 2 meses
Puntos: 1
Consulta parametrizada.

Saludos estimados,

Tengo un formulario el cual cuenta con cinco listas desplegables y un campo de texto.

Las listas se distribuyen de la siguiente manera:
Lista A -- Criterios de busqueda (Nombre, Pais, Estado, Ciudad o Rubro)
Lista B -- Pais
Lista C -- Estado/Provincia
Lista D -- Ciudad
Lista E -- Rubro
y el campo de texto es utilizado para el nombre.

El comportamiento del formulario es el siguiente:
1.- Cuando el formulario se carga TODAS las listas excepto la de criterios deben estar deshabilitadas y si el usuario selecciona Pais (por ejemplo) entonces debe activarse la lista pais, si selecciona rubro debe activarse la lista rubro.
2.- Una vez que el usuario haya seleccionado el criterio entonces el sistema hará la busqueda de los registros con el criterio indicado.

Mi duda es como hacer para que dependiendo de la lista de seleccion de criterios se activen o desactiven las otras listas?

Gracias mil por adelantado...
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.
  #2 (permalink)  
Antiguo 25/07/2013, 18:03
 
Fecha de Ingreso: junio-2013
Ubicación: En cualquier parte de mi casa
Mensajes: 139
Antigüedad: 10 años, 11 meses
Puntos: 14
Respuesta: Consulta parametrizada.

Hola! :D espero estes excelente!, te cuento que todo eso que dices se hace con javascript!. Te recomiendo la libreria de javascript llamada Jquery! y el uso de la funcion Change() de esa libreria! con ella puedes hacer lo que deseas! te dejo un link donde encontraras informacion de la funcion change() de jquery

[URL="http://api.jquery.com/change/"]http://api.jquery.com/change/
[/URL]
Podras visualizar como en el ejemplo en esa pagina, trabajan casualmente con una lista de un formulario! revisa como se hizo! y haz los cambios respectivos para que funcione en tu caso.

Éxitos!
  #3 (permalink)  
Antiguo 25/07/2013, 19:41
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Consulta parametrizada.

Incluso mejor si se hace en AJAX ya que asi no tendras que cargar tantos datos de una sola vez..... a medida que son requeridos se van pidiendo al servidor donde PHP los consulta y devuelve
__________________
Salu2!
  #4 (permalink)  
Antiguo 25/07/2013, 20:51
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 2 meses
Puntos: 1
Respuesta: Consulta parametrizada.

Cita:
Iniciado por edward1994 Ver Mensaje
Hola! :D espero estes excelente!, te cuento que todo eso que dices se hace con javascript!. Te recomiendo la libreria de javascript llamada Jquery! y el uso de la funcion Change() de esa libreria! con ella puedes hacer lo que deseas! te dejo un link donde encontraras informacion de la funcion change() de jquery

[URL="http://api.jquery.com/change/"]http://api.jquery.com/change/
[/URL]
Podras visualizar como en el ejemplo en esa pagina, trabajan casualmente con una lista de un formulario! revisa como se hizo! y haz los cambios respectivos para que funcione en tu caso.

Éxitos!
Muchas gracias por tu concejo...

Googleando un poco encontre este script que puede ayudarme...
Código:
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<script language="JavaScript" type="text/JavaScript">
    $(document).ready(function(){
        $("#select1").change(function(event)
           {
            aqui deberia preguntar cual fue el valor seleccionado y activar el select que corresponda. Ahora bien la pregunta es como meto la validacion aqui?
           Supongo que seria con un case, verdad?
        });
    });
</script>
Tal vez lo que pregunto sea muy basico pero no soy muy bueno programando y me cuesta un poco....

Gracias mil....
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.
  #5 (permalink)  
Antiguo 25/07/2013, 20:52
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 2 meses
Puntos: 1
Respuesta: Consulta parametrizada.

Cita:
Iniciado por Italico76 Ver Mensaje
Incluso mejor si se hace en AJAX ya que asi no tendras que cargar tantos datos de una sola vez..... a medida que son requeridos se van pidiendo al servidor donde PHP los consulta y devuelve
Gracias por tu respuesta.

Algun ejemplo?
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.
  #6 (permalink)  
Antiguo 26/07/2013, 08:02
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 2 meses
Puntos: 1
Pregunta Respuesta: Consulta parametrizada.

Saludos,

Buen día para todos;

Quería pedir su opinión con respecto a esta función que estoy construyendo.
Código:
	<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
	<script type="text/javascript">
	$(document).ready(function()
	{
		$("#criterio").change(defcriterio);
	});

	function defcriterio()
	{
		var selected = $("#criterio option:selected");		
		var msg = "";
		if(selected.val() != 0)
		{
			var variable = selected.val();
			switch (variable)
			{ 
				case "1":
					msg = "La busqueda sera por " + selected.text();
					break;
				case "2":
					msg = "La busqueda sera por " + selected.text();
					break;
				case "3":
					msg = "La busqueda sera por " + selected.text();
					break;
				case "4":
					msg = "La busqueda sera por " + selected.text();
					break;
				case "5":
					msg = "La busqueda sera por " + selected.text();
					break;				
			}
		}
	else
		{
		msg = "El valor seleccionado no es valido";
		}
		$("#msg").html(msg);
	}
	</script>
Como pueden ver la función utiliza JQuery a traves del método change, para evaluar el valor selecciona de una lista y en función de ello tomar una acción.

Ahora bien ya tengo identificada la opción del usuario ahora dependiendo de esta opción se ejecutará un query a una tabla el asunto es como hago para que a traves de un JS ejecutar un query y el resultado mostrarlo con PHP?

Gracias mil por adelantado.
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.
  #7 (permalink)  
Antiguo 26/07/2013, 08:31
Avatar de yamsoft  
Fecha de Ingreso: julio-2013
Ubicación: Maracaibo
Mensajes: 27
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Consulta parametrizada.

Con ajax le puedes pasar los parametros a php:

Código Javascript:
Ver original
  1. function defcriterio()
  2.     {
  3.         var selected = $("#criterio option:selected");     
  4.         var msg = "";
  5.         if(selected.val() != 0)
  6.         {
  7.             var variable = selected.val();
  8.             switch (variable)
  9.             {
  10.                 case "1":
  11.                    
  12.                                              // ejemplo:
  13.                                                var parametros = {
  14.                                         "bus_por" : selected.val(),
  15.                                         "bus_texto" : selected.text()
  16.                                           };
  17.                                                  
  18.                                                   $.ajax({
  19.                                      data:  parametros,
  20.                                      url:   'ajax/tu_archivo.php',
  21.                                      type:  'post',
  22.                                      beforeSend: function () {
  23.                             $("#capaAjax").html("<div align='center'>Cargando...</div>");
  24.                     },
  25.                     success:  function (response) {
  26.                             $("#capaAjax").html(response);
  27.                     }
  28.             });
  29.  
  30.                     break;
  31.                 case "2":
  32.                     msg = "La busqueda sera por " + selected.text();
  33.                     break;
  34.                 case "3":
  35.                     msg = "La busqueda sera por " + selected.text();
  36.                     break;
  37.                 case "4":
  38.                     msg = "La busqueda sera por " + selected.text();
  39.                     break;
  40.                 case "5":
  41.                     msg = "La busqueda sera por " + selected.text();
  42.                     break;             
  43.             }
  44.         }
  45.     else
  46.         {
  47.         msg = "El valor seleccionado no es valido";
  48.         }
  49.         $("#msg").html(msg);
  50.     }

Para recibir esos datos desde php:

Código PHP:
Ver original
  1. extract($_POST);
  2.  
  3.     echo $bus_por . ' ' . $bus_texto;

Ojo: En el HTML debes crear un div con el selector capaAjax en donde se mostrará el resultado del procesamiento :)

Saludos!
  #8 (permalink)  
Antiguo 28/07/2013, 19:11
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 2 meses
Puntos: 1
Pregunta Respuesta: Consulta parametrizada.

Cita:
Iniciado por yamsoft Ver Mensaje
Con ajax le puedes pasar los parametros a php:

Código Javascript:
Ver original
  1. function defcriterio()
  2.     {
  3.         var selected = $("#criterio option:selected");     
  4.         var msg = "";
  5.         if(selected.val() != 0)
  6.         {
  7.             var variable = selected.val();
  8.             switch (variable)
  9.             {
  10.                 case "1":
  11.                    
  12.                                              // ejemplo:
  13.                                                var parametros = {
  14.                                         "bus_por" : selected.val(),
  15.                                         "bus_texto" : selected.text()
  16.                                           };
  17.                                                  
  18.                                                   $.ajax({
  19.                                      data:  parametros,
  20.                                      url:   'ajax/tu_archivo.php',
  21.                                      type:  'post',
  22.                                      beforeSend: function () {
  23.                             $("#capaAjax").html("<div align='center'>Cargando...</div>");
  24.                     },
  25.                     success:  function (response) {
  26.                             $("#capaAjax").html(response);
  27.                     }
  28.             });
  29.  
  30.                     break;
  31.                 case "2":
  32.                     msg = "La busqueda sera por " + selected.text();
  33.                     break;
  34.                 case "3":
  35.                     msg = "La busqueda sera por " + selected.text();
  36.                     break;
  37.                 case "4":
  38.                     msg = "La busqueda sera por " + selected.text();
  39.                     break;
  40.                 case "5":
  41.                     msg = "La busqueda sera por " + selected.text();
  42.                     break;             
  43.             }
  44.         }
  45.     else
  46.         {
  47.         msg = "El valor seleccionado no es valido";
  48.         }
  49.         $("#msg").html(msg);
  50.     }

Para recibir esos datos desde php:

Código PHP:
Ver original
  1. extract($_POST);
  2.  
  3.     echo $bus_por . ' ' . $bus_texto;

Ojo: En el HTML debes crear un div con el selector capaAjax en donde se mostrará el resultado del procesamiento :)

Saludos!
Saludos YAMSOF;

Muy interesante tu propuesta; de hecho la voy a aplicar sin embargo se me ha presentado un inconveniente que no se como resolver.

Te explico, en la siguiente función, ya logro identificar cual es el criterio seleccionado y activo o desactivo la lista correspondiente, sin embargo cuando llamo al PHP para que me cargue los datos de los paises estos no se cargan en el select aun cuando el firebog no me genera ningun error; lo único que veo es un error de HTTP que me indica 302 Moved Temporarily. Sabes porque ese error y como lo resuelvo?
Este es el código:
Código:
function defcriterio()
	{
		var selected = $("#criterio option:selected");		
		var msg = "";
		if(selected.val() != 0)
		{
			var variable = selected.val();
			switch (variable)
			{ 
				case "1":
					$jMaQma("#country").attr("disabled",true);
					$jMaQma("#state").attr("disabled",true);
					$jMaQma("#city").attr("disabled",true);
					$jMaQma("#rubro").attr("disabled",true);
					$jMaQma("#searchfor").attr("disabled",false);
					break;
				case "2":
					$jMaQma("#country").attr("disabled",false);
					$jMaQma("#state").attr("disabled",true);
					$jMaQma("#city").attr("disabled",true);
					$jMaQma("#rubro").attr("disabled",true);
					$jMaQma("#searchfor").attr("disabled",true);
					cargar_paises();
					break;
La función cargar_paises es:
Código:
function cargar_paises()
	{
	$jMaQma.get("administrator/components/com_maqmahelpdesk/html/scripts/cargar_paises.php", function(resultado){
		if(resultado == false)
		{
			alert("Error");
		}
		else
		{
			$jMaQma('#country').append(resultado);			
		}
	});	
	}
Desde ya mil gracias, resolviendo esto solo me va a quedar armar el PHP que hace el query y mostrarlo.
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.
  #9 (permalink)  
Antiguo 28/07/2013, 20:29
Avatar de yamsoft  
Fecha de Ingreso: julio-2013
Ubicación: Maracaibo
Mensajes: 27
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Consulta parametrizada.

Ummm según lo veo, al parecer el servidor esta tratando de redireccionarte a algún lado, al parecer hay un error en tu servidor o por tu manejador de contenidos, que si no me equivoco creo que es Joomla (lo más probable es por las url amigables :) ).

Algo en el mod_rewrite o la configuración del Joomla esta provocando este redireccionamiento y ese error 302.

Si tienes activadas las url amigables en Joomla trata desactivandolas y pruebas de nuevo.
  #10 (permalink)  
Antiguo 29/07/2013, 12:20
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 2 meses
Puntos: 1
Pregunta Respuesta: Consulta parametrizada.

Saludos YAMSOFT;

Efectivamente ese era el problema el JOOMLA me estaba redireccionando, lo desactive y listo.

Ahora volviendo a la razon de este hilo, como puedes ver ya tengo lista la función que apaga o enciende las listas desplegables de acuerdo al criterio pedido, ahora bien, me toca hacer el query dependiendo de ese criterio seleccionado, de acuerdo a tu propuesta sería con AJAX, el pequeño detalle es que no se como funciona.

Supongo que dependiendo del criterio seleccionado yo debería llamar al php pasandole el parétro del criterio y en este están los querys y dependiendo de ese criterio ejecutar uno u otro query y por ultimo devuelvo el resultado.

Estructuralmente el PHP sería así:

Código:
<?php
extract($_POST);
include_once("clases/class.mysql.php");
switch($bus_por)
	{
	case 1:
		{
		echo "Hacer el query por nombre";
		break;
		}
	case 2:
		{
		echo "Hacer el query por ubicación";
		break;
		}
	case 3:
		{
		echo "Hacer el query por rubro";
		break;
		}
	}
?>

Una vez hecho el query; devuelvo el resultado (que tampoco se como hacerlo)
Y por ultimo ese resultado lo muestro en el DIV del que me hablas.

Podrías darme una mano con esto amigo.....????
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.

Última edición por AJDM; 29/07/2013 a las 13:02
  #11 (permalink)  
Antiguo 29/07/2013, 13:33
Avatar de yamsoft  
Fecha de Ingreso: julio-2013
Ubicación: Maracaibo
Mensajes: 27
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Consulta parametrizada.

Bien, como te decía anteriormente, con el método ajax() de jquery se puede lograr muy fácilmente...

La forma de pasar los parámetros y recibirlos en el php es pan comido, sin embargo no tengo suficiente información como para darte una ayuda exacta, pero espero que con estos ejemplos te puedas entender un poco la idea...

Por lo que he leido hasta ahora creo que tu forma de recoger los datos es de esta forma:

Código Javascript:
Ver original
  1. var selected = $("#criterio option:selected");

Supongamos que quieres enviar el valor de ese select al php para que genere una lista (estoy parafraseando). La forma de hacerlo por jquery.ajax() es la siguiente:

Código Javascript:
Ver original
  1. // Lo primero crear el stack de parametros que queremos enviar por ajax:
  2.  
  3.   var parametros = {
  4.         "campo_valor" : selected.val(),
  5.         "campo_texto" : selected.text()
  6.        };
  7.  
  8.   // Ya tenemos los parametros a enviar, ahora ejecutamos el ajax:
  9.  
  10.   $.ajax({
  11.        data:  parametros,  // Stack con los parámetros
  12.        url:   'archivo_receptor.php',  // Archivo que recibirá los parámetros y delvolverá el reponse
  13.        type:  'post',    // Tipo de envio get o post
  14.        beforeSend: function () {
  15.            $("#capaAjax").html("<div align='center'>Cargando...</div>");
  16.        },
  17.        success:  function (response) {
  18.              $("#capaAjax").html(response);
  19.         }
  20.    });

Creo que de por si la función es más que sencilla de entender y también sencilla de aplicar. Ahora ¿Cómo recibes esos datos en php? Sencillo:

Código PHP:
Ver original
  1. # archivo_receptor.php
  2.  
  3.   if(isset($_POST['campo_valor']))
  4.   {
  5.        $campo_valor        = $_POST['campo_valor'];
  6.        $campo_texto        = $_POST['campo_texto'];
  7.       /**
  8.        * ¿De donde he sacado esto?
  9.        * del stack 'parametros'  que enviamos por ajax...
  10.        */
  11.  
  12.        // Ya por ultimo para hacer el response, vasta con hacer un siemple echo:
  13.  
  14.      echo 'La opción seleccionada tiene value='. $campo_valor .' y texto='. $campo_texto;
  15.    }

Esto se mostrara en el HTML en un div con selector capaAjax

Código HTML:
Ver original
  1. <div id="capaAjax">
  2.         <!-- aquí se vera el response -->
  3.    </div>

Con esto seria todo... Espero haberte ayudado amigo...
  #12 (permalink)  
Antiguo 29/07/2013, 13:37
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 2 meses
Puntos: 1
Pregunta Respuesta: Consulta parametrizada.

Saludos YAMSOFT;

Conseguí un error de proceso en lo que me envías.

Te explico...

Donde se insertaría la llamada al ajax, sería una función aparte por cuanto primero se define el criterio y despues cuando le doy clic al botón buscar es que debería hacerse la busqueda.
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.
  #13 (permalink)  
Antiguo 29/07/2013, 13:45
Avatar de yamsoft  
Fecha de Ingreso: julio-2013
Ubicación: Maracaibo
Mensajes: 27
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Consulta parametrizada.

El problema es que aún no tengo claro que es lo que vas hacer y como lo quieres hacer...

Tienes esto:

Código Javascript:
Ver original
  1. function defcriterio()
  2.     {
  3.         var selected = $("#criterio option:selected");     
  4.         var msg = "";
  5.         if(selected.val() != 0)
  6.         {
  7.             var variable = selected.val();
  8.             switch (variable)
  9.             {
  10.                 case "1":
  11.                     $jMaQma("#country").attr("disabled",true);
  12.                     $jMaQma("#state").attr("disabled",true);
  13.                     $jMaQma("#city").attr("disabled",true);
  14.                     $jMaQma("#rubro").attr("disabled",true);
  15.                     $jMaQma("#searchfor").attr("disabled",false);
  16.                     break;
  17.                 case "2":
  18.                     $jMaQma("#country").attr("disabled",false);
  19.                     $jMaQma("#state").attr("disabled",true);
  20.                     $jMaQma("#city").attr("disabled",true);
  21.                     $jMaQma("#rubro").attr("disabled",true);
  22.                     $jMaQma("#searchfor").attr("disabled",true);
  23.                     cargar_paises();
  24.                     break;
Solo veo alli que deshabilitas y habilitas campos.
¿Qué es lo que necesitas enviar? ¿Que vas a recibir?
  #14 (permalink)  
Antiguo 29/07/2013, 13:58
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 2 meses
Puntos: 1
Pregunta Respuesta: Consulta parametrizada.

Ok amigo,

Antes que todo quiero agradecerte sinceramente todo el apoyo que me haz brindado.

Te voy a explicar que es lo que quiero hacer.

Tengo un formulario el cual tiene 6 campos de los cuales 5 son listas desplegables, uno es una caja de texto y por ultimo un boton enviar.

Las listas desplegables son:
1.- Criterio
2.- Ubicación las cuales son tres listas anidadas (pais, estado, ciudad)
3.- Rubro

Cuando el usuario ingresa al formulario observa todas las listas deshabilitadas excepto la de criterios, entonces (supongamos) el selecciona el criterio nombre, se debe habilitar el textbox para que el usuario coloque un nombre y luego al oprimir el boton enviar se deben buscar los elementos que coincidan con ese nombre.

Ahora bien si el usuario selecciona Ubicación, tendrá hasta tres niveles de ubicación pues podrá indicar país; pais - estado o país - estado - ciudad y luego cuando oprima el boton buscar entonces el sistema identificará cuales select tienen valores diferentes de 0 y buscará los productos por pais; pais - estado (si selecciono un estado) o por país - estado - ciudad (si seleccionó la ciudad).

Entonces que estoy haciendo yo, primero estoy trabajando bien lo que es la definición del criterio y por eso es que ves esa función y una vez que esta funcione correctamente entonces debo hacer la busqueda y presentación de la información.

Espero haberme explicado de la mejor manera posible y de nuevo mil gracias.


Aqui te coloco el archivo php que he armado con tus sugerencias.

Código PHP:
<?php
extract
($_POST);
if(isset(
$_POST['bus_por']))
{
       
$bus_por $_POST['bus_por'];
}
include_once(
"clases/class.mysql.php");
switch(
$bus_por)
    {
    case 
1:
        {
        
$where "WHERE clientname LIKE '%" $database->getEscaped($searchfor) . "%'";
        break;
        }
    case 
2:
        {
        echo 
"Hacer el query por ubicación";
        break;
        }
    case 
3:
        {
        
$where "WHERE rubro LIKE '%" $database->getEscaped($searchfor) . "%'";
        break;
        }
    }
    
$database->setQuery("SELECT id, date_created, clientname as `name`, address, zipcode, city, state, country, phone, fax, mobile, email, contactname, website, description, travel_time, rate as hour_rate, manager as send_to_manager, block FROM #__support_client $where ORDER BY clientname ASC LIMIT " $limitstart ", " $limit);
    
$clients $database->loadObjectList();    
?>
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.
  #15 (permalink)  
Antiguo 29/07/2013, 14:16
Avatar de yamsoft  
Fecha de Ingreso: julio-2013
Ubicación: Maracaibo
Mensajes: 27
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Consulta parametrizada.

No hay problema amigo, para eso estamos.

Muy bien, el php como te estaba diciendo no es el problema, lo que veo "medio" complicado es el javascript; Porque por lo que veo debes hacer varias condiciones...

Si lo que necesitas saber es donde colocar y cuando disparar la función que ejecutará el ajax, puedes hacer una o varias funciones (como tu decidas) por aparte...

Por ejemplo:
Código Javascript:
Ver original
  1. function defcriterio()
  2.         {
  3.             var selected = $("#criterio option:selected");    
  4.             var msg = "";
  5.             if(selected.val() != 0)
  6.             {
  7.                 var variable = selected.val();
  8.                 switch (variable)
  9.                 {
  10.                     case "1":
  11.                         $jMaQma("#country").attr("disabled",true);
  12.                         $jMaQma("#state").attr("disabled",true);
  13.                         $jMaQma("#city").attr("disabled",true);
  14.                         $jMaQma("#rubro").attr("disabled",true);
  15.                         $jMaQma("#searchfor").attr("disabled",false);
  16.                          // Busqueda por cliente:
  17.                          var cliente   =   $jMaQma("#searchfor").val();
  18.                          busqueda_por_cliente(cliente);
  19.                         break;
  20.                     case "2":
  21.                         $jMaQma("#country").attr("disabled",false);
  22.                         $jMaQma("#state").attr("disabled",true);
  23.                         $jMaQma("#city").attr("disabled",true);
  24.                         $jMaQma("#rubro").attr("disabled",true);
  25.                         $jMaQma("#searchfor").attr("disabled",true);
  26.                         break;
  27.                  }
  28.            }
  29.      }
  30.  
  31. function busqueda_por_cliente(cliente)
  32. {
  33.         var parametros = {
  34.         "bus_por" : 1,
  35.         "searchfor" : cliente
  36.        };
  37.  
  38.  
  39.   $.ajax({
  40.        data:  parametros,  
  41.        url:   'archivo_receptor.php',
  42.        type:  'post',  
  43.        beforeSend: function () {
  44.            $("#capaAjax").html("<div align='center'>Cargando...</div>");
  45.        },
  46.        success:  function (response) {
  47.              $("#capaAjax").html(response);
  48.         }
  49.    });
  50. }

Ahora el php:

Código PHP:
Ver original
  1. if(isset($_POST['bus_por']))
  2. {
  3.       extract($POST); # con esto hacemos $_POST['var'] sea igual a: $var
  4.      $bus_por         = filter_var($bus_por, FILTER_SANITIZE_NUMBER_INT);
  5.       $searchfor       = filter_var($searchfor, FILTER_SANITIZE_STRING);
  6.      
  7.  
  8.       switch($bus_por)
  9.     {
  10.     case 1:
  11.         {
  12.         $where = "WHERE clientname LIKE '%" . $database->getEscaped($searchfor) . "%'";
  13.         break;
  14.         }
  15.     case 2:
  16.         {
  17.         echo "Hacer el query por ubicación";
  18.         break;
  19.         }
  20.     case 3:
  21.         {
  22.         $where = "WHERE rubro LIKE '%" . $database->getEscaped($searchfor) . "%'";
  23.         break;
  24.         }
  25.     }
  26.     $database->setQuery("SELECT id, date_created, clientname as `name`, address, zipcode, city, state, country, phone, fax, mobile, email, contactname, website, description, travel_time, rate as hour_rate, manager as send_to_manager, block FROM #__support_client $where ORDER BY clientname ASC LIMIT " . $limitstart . ", " . $limit);
  27.     $clients = $database->loadObjectList();
  28.          
  29.  
  30. }


Algo parecido a esto :)
  #16 (permalink)  
Antiguo 29/07/2013, 15:09
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 2 meses
Puntos: 1
Pregunta Respuesta: Consulta parametrizada.

Si amigo, definitivamente las validaciones son varias pues como ya te haz dado cuenta, al momento de oprimir el botón de enviar debo llamar a una funcion la cual es la que determinará cual fue el criterio utilizado y en función de ello llamar al PHP con el parámetro o criterio de busqueda seleccionado.

Prefiero hacer un solo PHP y con el case hacer la busqueda que corresponda.

Voy a seguir trabajando y cuando tenga un importante avance te lo mostraré a ver que opinas.

De nuevo muchisimas gracias,

Despues que termine el ejercicio lo publicaré por si alguien tiene la misma necesidad.
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.
  #17 (permalink)  
Antiguo 29/07/2013, 16:22
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 2 meses
Puntos: 1
Pregunta Respuesta: Consulta parametrizada.

Saludos de nuevo;

A continuación te voy a colocar el paso a paso tal y como me lo he ingeniado a ver si estoy en lo correcto.

1.- Activo los select dependiendo del criterio de busqueda y de una vez defino la consulta que voy a realizar en la variable llamada defcta para luego utilizar el valor de esa variable en otra funcion.

Código HTML:
function defcriterio()
	{
		var selected = $jMaQma("#criterio option:selected");		
		var msg = "";
		var defcta = "";
		if(selected.val() != 0)
		{
			var variable = selected.val();
			switch (variable)
			{ 
				case "1":
					$jMaQma("#country").attr("disabled",true);
					$jMaQma("#state").attr("disabled",true);
					$jMaQma("#city").attr("disabled",true);
					$jMaQma("#rubro").attr("disabled",true);
					$jMaQma("#searchfor").attr("disabled",false);
					defcta = "1";
					break;
				case "2":
					$jMaQma("#country").attr("disabled",false);
					$jMaQma("#state").attr("disabled",true);
					$jMaQma("#city").attr("disabled",true);
					$jMaQma("#rubro").attr("disabled",true);
					$jMaQma("#searchfor").attr("disabled",true);
					cargar_paises();
					defcta = "2";
					break;
				case "3":
					$jMaQma("#country").attr("disabled",true);
					$jMaQma("#state").attr("disabled",true);
					$jMaQma("#city").attr("disabled",true);
					$jMaQma("#rubro").attr("disabled",false);
					$jMaQma("#searchfor").attr("disabled",true);
					cargar_rubro();
					defcta = "3";
					break;				
			}
		}
	else
		{
		msg = "El valor seleccionado no es valido";
		}
		$("#msg").html(msg);
	}
2.- Habiendo seleccionado el criterio y la definicion de la busqueda con la variable defcta, entonces preparo los parámetros que voy a utilizar para cada tipo de busqueda:
Código HTML:
function defbusqueda()
{
	switch (defcta)
		{ 
		case "1":
			var cliente   =   $jMaQma("#searchfor").val();
			var parametros = {
			"bus_por" : 1,
			"searchfor" : cliente
			}; 
			alert(parametros);
			break;
		case "2":
			var selpais = $jMaQma("#country option:selected");
			var seledo = $jMaQma("#state option:selected");
			var selciu = $jMaQma("#city option:selected");
			if((selpais.val() != 0) && (seledo.val() = 0) && (selciu.val() = 0))
				var pais = $jMaQma("#country").val();
				var parametros = {
				"bus_por" : 2,
				"searchfor" : pais
				};
			
			if((selpais.val() != 0) && (seledo.val() != 0) && (selciu.val() = 0))
				var estado = $jMaQma("#state").val();
				var parametros = {
				"bus_por" : 3,
				"searchfor" : estado
				};
			
			if((selpais.val() != 0) && (seledo.val() != 0) && (selciu.val() != 0))
				var ciudad = $jMaQma("#city").val();
				var parametros = {
				"bus_por" : 4,
				"searchfor" : ciudad
				};
				alert(parametros);
				break;
		case "3":
				var xrubro = $jMaQma("#rubro").val();
				var parametros = {
				"bus_por" : 5,
				"searchfor" : xrubro
				};
				alert(parametros);
				break;				
		}
}
Fijate que para el caso en el que la busqueda será por ubicación pregunto que valor tiene cada lista de selección y dependiendo de ello defino los parámetros que luego voy a utilizar en el AJAX.

3.- Ya habiendo identificado el criterio y el tipo de busqueda a utilizar entonces procedo a armar el ajax y a llamar el PHP para que ejecute el query que corresponda a la selección.

Código HTML:
function busqueda()
{
        $jMaQma.ajax(
		{
			data:  parametros,  
			url:   'archivo_receptor.php',
			type:  'post',  
			beforeSend: function ()
				{
				$("#capaAjax").html("<div align='center'>Cargando...</div>");
				},
			success:  function (response)
				{
				$("#capaAjax").html(response);
				}
		});

}
Que te parece?

Como está quedando?
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.
  #18 (permalink)  
Antiguo 06/08/2013, 16:28
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 2 meses
Puntos: 1
Pregunta Respuesta: Consulta parametrizada.

Saludos amigos,

He adelantado bastante con este proceso y ya tengo definida la función que determina el criterio de busqueda, esta es la función se las dejo por si les sirve de algo.

Código:
function defcriterio()
	{
		var selected = $jMaQma("#criterio option:selected");		
		var msg = "";
		if(selected.val() != 0)
		{
			var variable = selected.val();
			switch (variable)
			{ 
				case "1":
					$jMaQma("#country").attr("disabled",true);
					$jMaQma("#state").attr("disabled",true);
					$jMaQma("#city").attr("disabled",true);
					$jMaQma("#rubro").attr("disabled",true);
					$jMaQma("#searchfor").attr("disabled",false);
					break;
				case "2":
					$jMaQma("#country").attr("disabled",false);
					$jMaQma("#state").attr("disabled",true);
					$jMaQma("#city").attr("disabled",true);
					$jMaQma("#rubro").attr("disabled",true);
					$jMaQma("#searchfor").attr("disabled",true);
					cargar_paises();
					break;
				case "3":
					$jMaQma("#country").attr("disabled",true);
					$jMaQma("#state").attr("disabled",true);
					$jMaQma("#city").attr("disabled",true);
					$jMaQma("#rubro").attr("disabled",false);
					$jMaQma("#searchfor").attr("disabled",true);
					cargar_rubro();
					break;				
			}
		}
	else
		{
		msg = "El valor seleccionado no es valido";
		}
		$("#msg").html(msg);
	}
Ahora bien una vez que el usuario ya ha seleccionado el criterio tengo una función que hace la busqueda tomando en cuenta ese criterio, esta es la función:

Código:
function defbusqueda()
	{
		var selected = $jMaQma("#criterio option:selected");
		var selpais = $jMaQma("#country option:selected");
		var seledo = $jMaQma("#state option:selected");
		var selciu = $jMaQma("#city option:selected");
		var xrubro = $jMaQma("#rubro option:selected");
		if(selected.val() != 0)
		{
			if(selected.val() == "1")
			var cliente   =   $jMaQma("#searchfor").val();
			var parametros = {
			"bus_por" : 1,
			"searchfor" : cliente
			}; 
			$.ajax({
                data:  parametros,
                url:   'busca_reg.php',
                type:  'post',
                beforeSend: function () {
                $jMaQma("#capaAjax").html("<div align='center'>Cargando...</div>");
                    },
                success:  function (response) {
                $jMaQma("#capaAjax").html(response);
                    }
            });
Este es el contenido del php que estoy llamando con el AJAX.
Código PHP:
<?php
if(isset($_POST['bus_por']))
{
    
extract($POST);
    
$bus_por filter_var($bus_porFILTER_SANITIZE_NUMBER_INT);
    
$searchfor filter_var($searchforFILTER_SANITIZE_STRING);

include_once(
"clases/class.mysql.php");

switch(
$bus_por)
    {
    case 
1:
        {
        
$where "WHERE clientname LIKE '%" $database->getEscaped($searchfor) . "%'";
        break;
        }
    case 
2:
        {
        
$where "WHERE country LIKE '%" $database->getEscaped($searchfor) . "%'";
        break;
        }
    case 
3:
        {
        echo 
"Hacer el query por pais - estado";
        break;
        }
    case 
4:
        {
        echo 
"Hacer el query por pais - estado - ciudad";
        break;
        }        
    case 
5:
        {
        
$where "WHERE rubro LIKE '%" $database->getEscaped($searchfor) . "%'";
        break;
        }
    }
    
$database->setQuery("SELECT  * FROM mytable $where ORDER BY client ASC LIMIT " $limitstart ", " $limit);
    
$clients $database->loadObjectList();    
}    
?>
Ahora bien el problema es que al ejecutarse la función el sistema me muestra el siguiente error:
Warning: extract() expects parameter 1 to be array, null given in /home/busca_reg.php on line 4

Fatal error: Call to a member function setQuery() on a non-object in /home/busca_reg.php on line 38

Alguien me podrá dar alguna luz acerca de como resolver el tema?

Desde ya mil gracias....
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.
  #19 (permalink)  
Antiguo 06/08/2013, 17:14
Avatar de yamsoft  
Fecha de Ingreso: julio-2013
Ubicación: Maracaibo
Mensajes: 27
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Consulta parametrizada.

El primer error:

Cita:
Warning: extract() expects parameter 1 to be array, null given in /home/busca_reg.php on line 4
Es porque te ha faltado el underscore _ en la línea de la función extract()

Código PHP:
Ver original
  1. extract($_POST);

Con eso se arreglará.

El segundo:
Cita:
Fatal error: Call to a member function setQuery() on a non-object in /home/busca_reg.php on line 38
Al parecer el método setQuery() al que quieres acceder no existe o a lo mejor lo has llamado mal. Fíjate bien si es así como se escribe. O puede que el objeto $database no este inicializado correctamente.


Saludos!
  #20 (permalink)  
Antiguo 07/08/2013, 14:03
Avatar de AJDM  
Fecha de Ingreso: febrero-2013
Ubicación: Occidente
Mensajes: 69
Antigüedad: 11 años, 2 meses
Puntos: 1
Pregunta Respuesta: Consulta parametrizada.

Cita:
Iniciado por yamsoft Ver Mensaje
El primer error:



Es porque te ha faltado el underscore _ en la línea de la función extract()

Código PHP:
Ver original
  1. extract($_POST);

Con eso se arreglará.

El segundo:


Al parecer el método setQuery() al que quieres acceder no existe o a lo mejor lo has llamado mal. Fíjate bien si es así como se escribe. O puede que el objeto $database no este inicializado correctamente.


Saludos!
Muchisimas gracias amigo,

Y como me sugieres resolverlo...?
__________________
La humildad y la disposición a compartir es lo que nos hace cada vez mejores.

Etiquetas: formulario, registro
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:42.