|
171
|
Programación / Desarrollo Web / Re: select2 cambiar valor de lista dinamica con jquery
|
en: 23 Abril 2016, 03:03 am
|
Perdon, en otros foros (en ingles como stackoverflow) vi que se referian al nombre que muestra la lista como placeholder y me confundí. Yo me refiero a la opción seleccionada, en la lista aparece el nombre de la ciudad/zona seleccionada pero cuando abro la lista la opción seleccionada es la primera y el valor es 0, aunque se está mostrando el nombre... algo raro del plugin. Select2 permite hacer muchisimas cosas, entre otras permite buscar y añadir nuevas opciones a la lista, así es como lo inicializo: $('.location select').select2(); $('.location select[name="location[city]"], .location select[name="location[zone]"]').select2({ tags: true, createTag: function (params) { return { id: params.term, text: params.term, newOption: true } }, templateResult: function (data) { var $result = $("<span></span>"); $result.text(data.text); if (data.newOption) { $result.append(" <em>(nuevo)</em>"); } return $result; } });
Pero creo que se trata de un fallo de la versión del select2 que no detecta correctamente el cambio de valor y no lo realiza. Abriré un issue en el repositorio. EDITO: Vale ya he encontrado el problema. Al hacer el trigger change, se hacia tambien el on change que se encarga de popular las listas. Un peligroso conflicto de intereses, no volverá a pasar EDITO 2: Dejo la respuesta por si alguien usa este plugin, hay que hacer que sea solo select2 el que active el change y no jquery: .trigger('change.select2'); de esta manera change() solo se produce en la instancia de select2.
|
|
|
172
|
Programación / Desarrollo Web / [Resuelto] select2 cambiar valor de lista dinamica con jquery
|
en: 22 Abril 2016, 23:16 pm
|
Me acaba de dar cuenta de que uno de mis scripts no funciona correctamente. Se trata de 2 de las 3 listas que tengo para seleccionar provincia, ciudad y zona. La primera lista al no ser dinamica simplemente uso change() para que select2 sepa que el valor ha cambiado y lo refleje (tanto el placeholder como el valor de la lista en sí). En el caso de las otras dos listas, es algo increible... cada vez que refresco (F5) la página, estas dos listas hacen algo distinto... no sé si es porque son dinamicas, pero no funciona. Buscando en google he visto que para estos casos se usa la función trigger('change'); y opcionalmente se vuelve a instanciar select2 en el elemento antes de cambiar el valor. Lo estoy haciendo pero sigue sin funcionar: Tengo un botón para cada lista que muestra con un alert el valor actual de cada lista. La segunda lista a veces muestra el valor y otras no, la tercera siempre muestra 0... - El placeholder cambia (puedo ver el nombre de la ciudad/zona), pero al abrir la lista la opción seleccionada es la primera (valor 0).
- En el caso de la tercera lista (zonas), a veces llega a no suceder absolutamente nada. Otras simplemente cambia el placeholder pero el valor sigue siendo 0.
$(function () { var province = <?php echo $province; ?>, city = <?php echo $city; ?>, zone = <?php echo $zone; ?>; // province $('select[name="location[province]"]').val(province).change(); // city content = '/get?op=1&id=' + province + '&list=1&admin=1'; $('select[name="location[city]"]').load(content, function() { $(this).select2(); // reinstanciar el plugin $(this).val(city).trigger('change'); }); // zone content = '/get?op=1&id=' + city + '&list=2&admin=1'; $('select[name="location[zone]"]').load(content, function() { $(this).select2(); $(this).val(zone).trigger('change'); }); });
Las tres variables están bien, abro el código fuente de la página y puedo ver que cada una tiene el número (entero). ¿Alguien sabe cual puede ser el problema? Gracias!
|
|
|
174
|
Programación / PHP / Re: regex para protegerse de varios ataques
|
en: 20 Abril 2016, 17:13 pm
|
Hmmm imprimir dentro de los atributos es necesario en algunos casos, por ejemplo yo lo estoy haciendo para que el usuario pueda modificar sus datos personales, o para que se puedan cambiar datos anteriormente guardados en la DB (que es lo mismo), imprimirendo dentro del atributo value="". Entonces validando con los regex que solo se permitan ciertos carácteres me evito que se pueda guardar código ejecutable en la DB. Lo básico creo que lo tengo cubierto: el XSS, prepared statements y un servidor estático (sin PHP, donde alojo el css, jscripts...) donde se suben imágenes (el nombre se genera con el número del for y la extensión solo jpg) y .htaccess configurado para que no se pueda navegar por ningún directorio. Para lo de los ataques de fuerza bruta, estoy terminando una clase (flood_detection) que detecte este tipo de ataques y de paso me aseguro que ningún graciosillo sature el servidor con peticiones. He comentado lo de UTF-16 por casualidad, porque buscando una manera de aceptar carácteres internacionales en regex, me encontré con este post en stackexchange hablando de anonymus que habia cerrado una web de pornográfia infantil en la red tor usando este tipo de codificación. Por lo que he podido entender es un problema de que php no soportaba utf-16 y el filtro lo deja pasar, normalizando los carácteres y siendo interpretados... Supuestamente lo deberían haber arreglado en php 7. Gracias!
|
|
|
175
|
Programación / Desarrollo Web / Re: regex para filtrar caracteres especiales en jquery
|
en: 20 Abril 2016, 16:28 pm
|
Si, por supuesto, olvidé mencionarlo. También tengo los mismos regex validando que el string coincida en php. Esto es simplemente para que el usuario sepa que dichos carácteres no están permitidos y que si hackea su lado de cliente, al enviar el formulario dará error y tendrá que empezar de nuevo. Ya que es un formulario bastante extenso, que no se diga que no he avisado Sobre el plugin, no tiene porque bloquear, también puede mostrar un mensaje de error diciendo que nose permiten dichos carácteres y que no deje enviar. Edito: Creo que mejor voy a utilizar el atributo pattern de html5 y con jquery mostrar un error en caso de no validar.
|
|
|
176
|
Programación / PHP / Re: regex para email catastrophic backtracking
|
en: 19 Abril 2016, 13:21 pm
|
Aaah vale, ya decia yo que algo parecia extraño. Entonces un límite de carácteres válido sería ponerlo delante de una clase de caráctares, no en un grupo nesteado que no tiene límite. /^([\w\s]{4,10})$/
Para casos de grupos nesteados ¿es mejor usar la función php strlen()? o ¿hay alguna manera eficiente de hacer esto dentro del regex? De todas maneras parece que si uso strlen() le doy más flexibilidad al usuario con el limite de carácteres. 100 carácteres maximos para un email está bien, ¿no?
|
|
|
177
|
Programación / PHP / regex para email catastrophic backtracking
|
en: 19 Abril 2016, 06:24 am
|
Estoy creando mi propio regex para validar emails pero no consigo hacer funcionar el límite de carácteres de los dos primeros grupos, el tercer grupo si que valida bien el máximo. /^([\w]+(?:[\.\-][\w]+)*){1,64}@([\w]+(?:[\.\-][\w]+)*){1,64}\.([a-zA-Z]{2,7})$/
Si no me equivoco el error quiere decir que está mal optimizado y le da carga innecesaria al procesador, no? Como se puede leer, lo que busco es que los guiones actuen de la misma manera que los puntos, que no se puedan poner delante ni detras, solo entre dos caracteres \w. Tanto para el nombre de usuario como para el nombre de dominio. Gracias!
|
|
|
179
|
Programación / PHP / Re: regex para protegerse de varios ataques
|
en: 19 Abril 2016, 05:16 am
|
He leido que si está malformado se ejecuta el código, por eso no me he querido arriesgar. Tambien he leido que hacer una lista blanca con los carácteres permitidos es más seguro. Prefiero ir a lo seguro. ¿Podeis decirme por qué el siguiente regex para emails me da error "catastrophic backtracking"? /^([\w]+(?:[\.\-][\w]+)*){1,64}@([\w]+(?:[\.\-][\w]+)*){1,64}\.([a-zA-Z]{2,7})$/
Lo he hecho yo y me parece eficiente... no sé que puede pasar. Además el limite de 64 no fuciona, poniendo más se sigue validando, el del tercer grupo si que funciona... que raro. Gracias!
|
|
|
180
|
Programación / PHP / Re: regex para protegerse de varios ataques
|
en: 19 Abril 2016, 03:28 am
|
Ah no, era un ejemplo, está claro que ese tipo de carácteres que no supone ningún riesgo se puede añadir sin ningún problema y seguiría siendo igual de seguro. Por ejemplo para nombres: '~[^\pL\d\r\']+~u'
Si no me equivoco \r era espacio normal y comillas simples. Las eñes, ç y demás carácteres internacionales van incluidos. Si es un comentario se cambia \r por \s y para los demás simplemente se añade el carácter con \. Pero lo que me interesa es el tema seguridad, ¿que más hay que tener en cuenta?
|
|
|
|
|
|
|