Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - MinusFour

#1211
Desarrollo Web / Re: filtrar contenido con jquery
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 (mysql) [Seleccionar]

SELECT t1.id, t2.*
FROM for_sale t1
INNER JOIN property t2 ON t2.id = t1.id
WHERE t2.`USE` = 1
AND (t2.`TYPE` = 2 OR t2.`TYPE` = 1 OR t2.`TYPE` = 3)
AND (t2.`STATUS` = 0 OR t2.`STATUS` = 1 OR t2.`STATUS` = 2)
AND (t2.bhk = 3 OR t2.bhk = 1 OR t2.bhk = 2)


Está es una forma de hacerlo con PHP:

Código (php) [Seleccionar]

<?php
function agregaCondicionCompuesta($campo$valores){
    
$red = function($acc$valor) use ($campo){
  
$condicion "$campo = $valor";
  
if($acc){
  
return $acc ' OR ' $condicion;
  
} else {
    
return $condicion
  
}
};
    
$reduced array_reduce($valores$red);
    return 
count($valores) > "($reduced)" $reduced;
}


O una manera más sencilla de verla sin el reduce:

Código (php) [Seleccionar]

function agregaCondicionCompuesta($campo, $valores){
 $query = '';
 foreach($valores as $index => $valor){
   $condicion = "$campo = $valor";
   if($index == 0){
     $query .= $condicion;
   } else {
     $query .= ' OR ' . $condicion;
   }
 }
 return count($valores) > 1 ? "($query)" : $query;
}


Después simplemente agregas las condiciones compuestas:

Código (php) [Seleccionar]

$filtros = [0, 1];
$use = [1];
echo agregaCondicionCompuesta('t2.`USE`', $use) . ' AND ' . agregaCondicionCompuesta('t2.`TYPE`', $filtros);
//t2.`USE` = 1 AND (t2.`TYPE` = 0 OR t2.`TYPE` = 1)


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 (php) [Seleccionar]

$condicion = "$campo = ?";


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 (mysql) [Seleccionar]

   SELECT t1.id, t2.*
   FROM for_sale t1
   INNER JOIN property t2 ON t2.id = t1.id
   WHERE t2.`USE` = 1
   AND t2.`TYPE` IN(1, 2, 3);
   AND t2.`STATUS` IN(0, 1, 2)
   AND t2.bhk IN(1, 2, 3)


Estoy seguro que te puedes imaginar formas de como agregar los valores tu solo a lo que hay dentro de el IN.
#1212
En tu fstab no hay ninguna partición de win.
#1213
Desarrollo Web / Re: filtrar contenido con jquery
17 Noviembre 2015, 18:23 PM
Cita de: 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?

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 (html5) [Seleccionar]

<input type="checkbox" name="filtros[]">
<input type="checkbox" name="filtros[]">


Y desde PHP:

Código (php) [Seleccionar]

$filtros = $_POST['filtros'];
list($filtro1, $filtro2) = $filtros;
//$filtro1 == $filtros[0];
//$filtro2 == $filtros[1];


Aunque $.param transforma los "[]" en el query string, no se si PHP trabaje ese caso.
#1214
Desarrollo Web / Re: filtrar contenido con jquery
16 Noviembre 2015, 19:00 PM

'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 (javascript) [Seleccionar]

var data = $('input[class^="filter"]')
                        .add('input[name="use"]')
.add('select[name="city"]')
.add('select[name="zone"]').serializeArray();


Mira como trabaja ".serializeArray" con "$.param":

https://jsfiddle.net/19avm4rb/

Para "do" y page puedes hacer lo que ya haces...
#1215
Desarrollo Web / Re: filtrar contenido con jquery
16 Noviembre 2015, 16:26 PM
Código (javascript) [Seleccionar]

var data = $('input[class^="filter"]')
.add('select[name="city"]')
.add('select[name="zone"]').serializeArray();

//para agregar nuevos pares:
//data.push({ name : 'nombre', value : 'valor'});
$.ajax({
    method: 'POST',
    url: '/search',
    data: $.param(data)
}).done(function (data) {
    if ($('#search').is(':visible')) $('#search').hide();
    if ($(self).is(':checkbox')) {
        var new_content = $(data).find('#scroll-to-list');
        $('#scroll-to-list').replaceWith(new_content);
    } else {
        var new_content = $(data).find('#search-filters, #scroll-to-list');
        $('#results').html(new_content);
        $('html, body').animate({
            scrollTop: $('#scroll-to-list').offset().top
        }, 1000);
    }
});


Si "use" puede ser "#res_prop" o "#com_prop" entonces el control debería ser un radio button.

Código (html5) [Seleccionar]

<input type="radio" name="use">
<input type="radio" name="use">


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).
#1216
Desarrollo Web / Re: filtrar contenido con jquery
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 para eso.
#1217
Si lo quieres desde el principio sería mejor que lo pusieras en el archivo de configuración de las X. Así ni siquiera tienes que usar xrandr.

https://wiki.ubuntu.com/X/Config/Resolution#Setting_resolution_changes_in_xorg.conf
#1218
Si estas utilizando AdBlock en Firefox, esa es la razón. A mi también me hace lo mismo. Tiene algo que ver con un error del script de cloudflare.
#1219
Dudas Generales / Re: ¿Qué es un SLQ Inyection?
12 Noviembre 2015, 21:02 PM
Al parecer no puedo ponerte un ejemplo porque el foro me detecta el ejemplo como si estuviera efectuando la inyección de SQL. Básicamente, una consulta SQL usualmente es representada como un string. Cuando alguien intenta componer el string con otras variables es posible que la consulta termine siendo diferente a lo pensado. Depende de quien ha manipulado la variable. Si el contenido de la variable viene de fuera de tu programa (por ejemplo de un usuario) no tienes control sobre lo que puede contener la variable por eso debes tratarla antes de usarla.
#1220
GNU/Linux / Re: Error al Instalar Kali Linux
12 Noviembre 2015, 17:38 PM
Prueba con las imágenes personalizadas de Kali:

https://www.offensive-security.com/kali-linux-vmware-arm-image-download/