Título: filtrar contenido con jquery Publicado por: gAb1 en 16 Noviembre 2015, 06:11 am Tengo una función con JQuery Ajax que recibe contenido de PHP enviado variables, depende de las variables y el contenido de estas se recibiran unas cosas u otras.
Con la misma función (un on('click')) tengo que declarar y asignar valores a las variables que se envian, dandoles el valor del elemento que hizo click, mayormente checkboxes. Lo único que se me ocurre es hacer un if para cada checkbox: Código Y asi sucesivamente... ¿Hay alguna manera más eficiente de hacer esto? Tambien tengo que comprobar que si se han checkeado dos checkboxes o mas de la misma clase se envien los valores como array o algo. Agradeceria cualquier ejemplo. PHP se encarga del resto, de crear los condicionales "AND" y agregarlos al "SELECT" de la consulta mysqli. Gracias! Título: Re: filtrar contenido con jquery Publicado por: MinusFour en 16 Noviembre 2015, 06:33 am No es necesario que guardes los valores en variables, al final la información tiene que ser serializada y jQuery tiene un metodo (https://api.jquery.com/serialize/) para eso.
Título: Re: filtrar contenido con jquery Publicado por: gAb1 en 16 Noviembre 2015, 12:30 pm Pues entonces lo he estado haciendo mal, aunque funcionando:
Código
No entiendo bien para que es necesario codificar estos datos, ¿es necesario hacerlo? Realmente necesito aprender a reducir el código... Título: Re: filtrar contenido con jquery Publicado por: MinusFour en 16 Noviembre 2015, 16:26 pm Código
Si "use" puede ser "#res_prop" o "#com_prop" entonces el control debería ser un radio button. Código Los filtros tambien deberían tener los nombres(el atributo name) de tus variables (bhk, type, status). Es muy probable que necesites agregar page y do manualmente. (Lee el comentario que puse). Título: Re: filtrar contenido con jquery Publicado por: gAb1 en 16 Noviembre 2015, 16:45 pm Si, estoy usando radio button para esos dos id.
¿Te refieres a cada checkbox ponerle el atributo name? $('input[class^="filter"]') Esto añade solo los checkboxes que estén marcados no? Entonces los ifs que tengo creados no sirven? Como sé que número de página pasar o que valor de los radio button pasar? Para todo en general, como hago eso?? Y luego en php como cojo los datos del post? Actualmente lo estaba haciendo asi: Código Lo siento, no me entero. Título: Re: filtrar contenido con jquery Publicado por: MinusFour en 16 Noviembre 2015, 19:00 pm Código: 'input[class^="filter"]' Selecciona todos los inputs con clase que empieze como 'filter' (filter1, filter2, filter3). No te tienes que preocupar si están vacios o no. "serializeArray" debería seleccionar solo los que no esten marcados. De igual forma, necesitas agregar los radios (se serializa el que esta marcado): Código
Mira como trabaja ".serializeArray" con "$.param": https://jsfiddle.net/19avm4rb/ Para "do" y page puedes hacer lo que ya haces... Título: Re: filtrar contenido con jquery Publicado por: gAb1 en 16 Noviembre 2015, 22:11 pm Ah vale ya lo entiendo mejor. Pero si tengo más de un checkbox con el mismo nombre luego en php como hago? Por ejemplo name type, un checkbox tiene el valor 1 y otro 2, ¿como manejo eso en php? Luego con IFs compruebo si se ha recibido el filtro y incluyo una condición AND al prepare, pero si son dos como hago?
Código
Para do y page usaré lo que me dijiste, el data.push. Muchas gracias! EDITO: Ya casi lo tengo: Código
¿Se podrá optimizar todavía más? : :) Título: Re: filtrar contenido con jquery Publicado por: MinusFour en 17 Noviembre 2015, 18:23 pm Ah vale ya lo entiendo mejor. Pero si tengo más de un checkbox con el mismo nombre luego en php como hago? Por ejemplo name type, un checkbox tiene el valor 1 y otro 2, ¿como manejo eso en php? Luego con IFs compruebo si se ha recibido el filtro y incluyo una condición AND al prepare, pero si son dos como hago? Suena a que debería ser otro filtro o si es una opción entre 1 y 2 entonces un radio. También puedes tratar los filtros como si fuera un arreglo: Código Y desde PHP: Código
Aunque $.param transforma los "[]" en el query string, no se si PHP trabaje ese caso. Título: Re: filtrar contenido con jquery Publicado por: gAb1 en 17 Noviembre 2015, 21:44 pm Pues podría ponerlos como radio, pero me gustaría dar la opción de que elijan más de un tipo a la vez.
EDITO: Si que funciona lo de meter arrays en el serializeArray() con el $.param: https://jsfiddle.net/19avm4rb/1/ En PHP se cogen como si fuera un post normal, pero tengo un problema para crear las condiciones OR. La primera (AND) funciona bien, pero ya las demás da error: Código
Citar MySQLi failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't2.type = 2 OR t2.type = 3 LIMIT ?,' at line 5<br><br /> Debe ser un error al crear las variables o al imprimirlas dentro del prepare(), ya que están bien: Código Algo así es lo que quiero que haga. Lo he ejecutado y funciona perfectamente. ¿Abro mejor una pregunta en el subforo PHP? Título: Re: filtrar contenido con jquery Publicado por: eLank0 en 18 Noviembre 2015, 17:28 pm Buenas,
Una consulta sobre tu código, porqué pones \n dentro de una consulta SQL? No será por ahí que te tira un error? S2 Título: Re: filtrar contenido con jquery Publicado por: gAb1 en 18 Noviembre 2015, 17:40 pm Pues ahora que lo dices, al principio se imprimia el \n, pero porque se me olvido cambiar las comillas normales '\n' a dobles "\n". Ahora imprime el salto de linea, ¿eso no debe dar ningún error no? Si se ponen saltos de linea sin variables y no pasa nada. (Lo he quitado y nada, el mismo error sin saltos de linea)
Acaba de encontrar un supuesto error: Código
Podria ser por las variables que se imprimen como NULL, sin embargo le acaba de poner else unset() a los IFs y sigue tirando el mismo error. Ya no sé que más probar... Código
EDITO: Que extraño, al marcar 3 checkboxes se repite el primero... Puede ser el foreach (que lo dudo) o el array... Código
Esos dos AND despues del primer OR están de más... ¿Como es posible que se este imprimiendo asi? Al parecer lo del NULL no tiene nada que ver, no se llega a imprimir, asi que esos unset() están de más. Título: Re: filtrar contenido con jquery Publicado por: MinusFour en 18 Noviembre 2015, 18:09 pm Esto ya se vuelve un problema de PHP y MySQL:
Tienes que usar los paréntesis y USE y TYPE son palabras reservadas. Por eso la etiqueta code te resalta en rojo esas palabras: Código
Está es una forma de hacerlo con PHP: Código
O una manera más sencilla de verla sin el reduce: Código
Después simplemente agregas las condiciones compuestas: Código
Claro que esto deja mucho que desear porque te pueden hacer SQL Injection. Puedes usar '?' en lugar de $valor si vas a usar prepared statements: Código
Luego simplemente haces el bind de las variables con un for. Ojo que los parámetros van en orden, y si tienes otros parámetros antes estos tienen que ser puestos primero. Ultimadamente creo que sería mejor que en lugar de usar múltiples ORs usaras la función IN de MySQL: Código
Estoy seguro que te puedes imaginar formas de como agregar los valores tu solo a lo que hay dentro de el IN. Título: Re: filtrar contenido con jquery Publicado por: gAb1 en 18 Noviembre 2015, 18:33 pm Tienes razón, debería escapar las palabras reservadas (aunque ese no fuera el problema). El problema estaba en la primera condición, que no dejaba un espacio o un salto de linea y se juntaba "use = 1AND t2.type".
Gracias por las funciones, tenia pensado hacer una cuando funcionara bien. Sobre lo del SQL Injection dudo mucho que se pueda hacer usando enteros ;D Aunque sería mejor practica usar el bind_param es más trabajo. Voy a adaptar la función que usa el reduce para usar el IN, yo tambien creo que mejor. Aunque aún estoy pensando en como hacerlo... :rolleyes: Primero usar IN en lugar de ORs y lo del bind_param... En cuanto lo tenga edito. Por mi se puede mover al subforo de PHP, donde podrá ser visto por todos. Gracias! EDITO: Al final no me hizo falta el array_reduce() Código
Luego para hacer el bind_param()... No lo tengo claro aun xD EDITO 2: A ver no se me ocurre como reducir esto... Código
Al parecer con PDO se puede hacer mucho más facilmente lo que quiero, voy a mirar como funciona. |