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ú

Temas - Alex_bro

#1
Buenas tardes!

Mi pregunta de hoy está algo relacionada con un tema que abrí hace unos meses: ¿Cómo crear API JSON en proyecto existente que usa MVC?

El caso es que seguí las instrucciones del compañero MinusFour, y ahora tengo dos mounstruos de aplicaciones, con mucho codigo duplicado, y seguramente es que no estoy aplicando bien el MVC, por eso les pregunto.

Durante mi implementación particular del MVC, he creado unos modelos que tratan con la DB, las vistas pues ningún problema, pero en los controladores... ahí está el asunto. Yo tenia entendido que la validación de los datos introducidos por el usuario se debe hacer en los Controladores, pero ¿esto se refiere a todo tipo de validaciones, o solo limpiar entradas...? ¿El modelo debe validar también los datos que le pasan? Con esta pregunta dije... si valido en el modelo, tengo que repetir menos código en mis dos controladores (uno para el API y otro para la web), pero entonces me vino la siguiente cuestión:

Imaginemos que estamos en un modelo que gestiona las Repuestas a los mensajes de este tema, y se introduce una nueva respuesta... necesitamos llamar al modelo que gestiona los temas para ver si el tema_id que se ha pasado por POST realmente existe. Yo esto lo hago en el controlador, para que un modelo no tenga que hablar con otro. ¿Esto es correcto? ¿Dónde deben hacerse las validaciones de este tipo?

Perdón por la parrafada y gracias de antemano, estoy bastante atascado :rolleyes:
#2
Buenas!

A ver si me podeis echar un cable, porque estoy mareado de buscar por internet y creo que no estoy formulando la pregunta correcta.

El caso es que tengo una aplicación web plenamente funcional en PHP, que utiliza el patrón MVC, y en breve necesitaré un API para interactuar con una app nativa en android... Siempre creí que sería cuestión de captar alguna variable de la URL y que el gestor de Views en lugar de cargar las plantillas html, cargase los archivos que formulasen la respuesta JSON con los mismos datos, pero claro, el Controller tampoco puede partir de los mismos inputs en ese modo de funcionamiento (No $_POST...), así que no es tan sencilla la "migración".

¿Cómo se debe enfocar esto realmente? Lo que no quiero es tener que duplicar controllers... uno para la web y otro para el API a menos que no haya otra solución...

Dadme un poco de luz! Gracias :)

Un saludo.
#3
Buenas!

Hoy os traigo una función que publiqué hace tiempo aquí también pero con ciertas mejoras, con la esperanza de que pueda servir a alguien más.

¿Qué permite?

  • Eliminar todos los caracteres que no estén previstos -> Security By Default
  • Cortar las cadenas con más de X caracteres si se desea. Esto puede ayudar a evitar ataques DOS dirigidos expresamente a sobrecargar las consultas a la base de datos
  • Es muy rápida y sencilla de utilizar! He visto buenos aportes en el foro que tienen la advertencia de que es necesario asegurar las variables para su uso real, ya que el compañero lo ha programado con prisas. Con esta función las prisas no deberían ser una escusa!
  • Debería ser suficiente para la mayoría de ataques SQL Injection y XSS, recomendandose encarecidamente su uso conjuntamente con sentencias preparadas (PDO o MySQLi)
  • Elimina espacios en blanco al principio y al final de la cadena, ya que no suelen tener utilidad.

¿Qué NO permite?
No está pensada para validar campos (Ej. Email correcto, etc), solo como primer filtro a pasar por todos los inputs que provengan del exterior. Para esos usos, la función nativa filter_var de PHP puede ser una alternativa.

Personalización
La función está escrita de forma que permita vocales acentuadas y eñes. Si no se desea basta con borrarlos de la cuarta linea. Si dejas estos caracteres asegurate de guardar el archivo que contiene la función con una codificación válida, como UTF-8.
Además, a modo de prevenir ataques XSS aplica la función htmlentities, pero a algunos les gusta aplicarla en la vista de su aplicación... a mi me parece mejor hacerlo al guardar los datos para optimizar la carga en la lectura de datos, pero casi es una cuestión de gustos.

El código

function clean_var($var,$num=0,$let=0,$max=0,$cars_exp=''){
       $expr = '/[^';
       if($num == 1) $expr = $expr.'0-9';
       if($let == 1) $expr = $expr.'a-zA-ZñÑáéíóúÁÉÍÓÚ';
       if($cars_exp != ''){
           $cars_ok = preg_quote($cars_exp,'/');
           $cars_ok = str_replace(' ','\s',$cars_ok);
           $expr .= $cars_ok;
       }
       $expr .= ']/iu';
       $var = preg_replace($expr,'',$var);

       if($max != 0 && strlen($var) > $max){
           $var = substr($var,0,$max);
       }
       return htmlentities(trim($var), ENT_QUOTES); //AntiXSS
}


He intentado ponerle la etiqueta php a code para que se colorease, pero muestra los acentos como entidades html en ese caso.

Ejemplos

Código (php) [Seleccionar]

$secure_var = clean_var($_GET['insecure_var'],1,0,10); // Solo numeros, max. 10 caracteres.
$secure_var = clean_var($_GET['insecure_var'],1,1,10); // Solo numeros y letras, max. 10 c.
$secure_var = clean_var($_GET['insecure_var'],0,1,10,' '); // Letras y espacios, max. 10 c.
$secure_var = clean_var($_GET['insecure_var'],1,1,25,'@._-'); // Posible e-mail. Max 25 c.
$secure_var = clean_var($_GET['insecure_var'],1,1,50,'@._-?)(][,'); // Mas caracteres. Max. 50 c.


Mejoras!
Por favor, si ves algo mejorable en la función dilo abajo! Será de gran ayuda para todos, especialmente si está relacionado con la seguridad. A veces he obtenido comportamientos extraños al usar guiones medios a pesar de usar preg_quote, y ahora intento escribirlos al final del parámetro para que no den problemas... si saben por qué ocurre eso sería genial.

Gracias por leer el tocho! :)
#4
PHP / Duda sobre MVC y múltiples idiomas.
6 Abril 2015, 12:35 PM
Buenas amigos,

Siento estar tan pesado estos días, como sabéis estoy intentando aplicar bien el patrón MVC de la forma correcta para evitar lo que precisamente me está pasando ahora... marearme con el código al intentar actualizarlo.

Ya tengo un Controller que aplica la lógica y hace comprobaciones de los datos, un Modelo que interactúa con la DB, y una Vista que maneja el HTML (y muestra según el idioma el texto, ya que solo tiene variables que luego se sustituyen como $lang['listar_productos'] y están en un archivo a parte).

Mi único problema ahora está relacionado con los errores que maneja el Controller cuando no está bien un dato introducido por el Usuario.
Ej: El nombre no cumple el mínimo, El Producto no existe...

Desde la clase del Controller no puedo acceder a las variables $lang['error_no_existe_algo'], y no quiero hacerlas globales (para seguir siendo disciplinado y ordenado).

¿Cuál sería la forma correcta de hacerlo? ¿Pasar un código de error a la Vista y que ésta lo resuelva? (y meter lógica a la vista...) ¿Heredar los Controller de una clase que tenga algo como getTextLang()? (lo malo sería hacer miles de foreach por cada vez que consulte no?).

En definitiva, ¿Cómo lo hacéis para manejar los idiomas con MVC?

Muchas gracias!
#5
Buenas,

Siempre me ha ocurrido que he empezado un proyecto pequeño, y poco a poco le iba añadiendo funciones al mismo archivo... y construía archivos monstruosos. He buscado mucho sobre MVC y POO, pero estoy algo pillado, seguro que ustedes pueden darme el empujón que necesito. Les pongo un ejemplo:

Proyecto de Tienda con un "Modulo" de Productos, otro de Pedidos, otro de Loquesea.
index.php
-> carga un archivo moduloNombreModulo.php dependiendo de la petición.
moduloNombreModulo.php
-> Este se encarga de cargar una classModulo.php y a base de if y elseif recoge las variables introducidas por el usuario, las limpia, y llama a la funcíon correspondiente dentro de la clase.
Digamos que es mi particular controller, pero no es una clase.
classModulo.php
-> Aqui encontramos funciones como addProducto, editProducto... addCategoria, editCategoria... addProveedor, editProveedor..
Cada función dentro de esta clase, realiza las comprobaciones correspondientes a los datos que le pasa desde moduloNombreModulo.php y si esta todo correcto hace lo que deba a través de otra clase encargada de ejecutar consultas a la DB etc.

Después de todo esto, desde moduloNombreModulo.php se ejecuta una función para manejar plantillas, ya que el contenido de vistas esta separado en otra carpeta.

El primer problema que vi es que se va agrandando demasiado la clase, pensé en separar en otras clases mas pequeñas, pero por ejemplo al añadir un Producto, addProducto comprueba si existen las categorias, proveedores, etc. y se reutilizan así funciones compartidas, ya que estas comprobaciones aparecen en casi todas.

Pero ahora me encuentro otro problema más, y es que al crear un modulo de Pedidos (ejemplo), éste necesita de funciones de la clase del otro módulo, como verificar si existe un producto, categoría, añadir un producto en algunos casos desde ese módulo, etc.

Lo que no quiero es tener que incluir e instanciar 4 o 5 clases en cada función dentro de otra clase, no se si a lo mejor estoy yo equivocado y esa es la forma correcta.

Como pensais que debería hacerlo?
Gracias!
#6
Buenas a todos :)

Vereis tengo un problemilla con un filtro que utiliza preg_replace. Hace años inserté como válidos unos caracteres un tanto estraños y como no me acuerdo de por qué lo hice, hoy los he borrado. El caso es que al borrarlos y no pasarlos como válidos, preg_replace devuelve una cadena vacía.

Los caracteres en cuestión son estos:
CitarЯяАИМСЗаимсз

Cuando están incluidos dentro de la variable a pasar por preg_replace, devuelve una cadena vacía, en lugar de solo borrarlos y devolver los permitidos, como quiero aquí:
Código (php) [Seleccionar]
$var = preg_replace("/[^a-zA-Z0-9]/i",'',$var);

Supongo que será alguna forma rara de escribir unas comillas o algo así.

Alguien sabe de que se trata?

Saludos!

Edito:
Buscando mucho por internet, veo que esos caracteres son las vocales acentuadas, que por el formato del archivo se guardarían así en su momento, pero aun no entiendo por qué si se pasan tal cual a la función preg_replace hace que no cumpla con la regla que tiene y devuelve un string vacío. He activado los errores por si decía algo, pero nada.
#7
Buenas,

Tengo un misterio que no puedo resolver, y no encuentro nada buscando...
Anteriormente tenia configurado todo en el router que te dan con el ADSL de Vodafone, clave, canal... nada daba problemas. El otro dia me di cuenta de que utilizaba WPA en lugar de WPA2. Cambié esta opción, y aunque en muchos dispositivos tuvimos que volver a meter la clave de nuevo (engorroso, por su longitud) todo funciona estupendamente ahora, todo menos mi iMac de 2011.

Mi version de OS X es la 10.7.5 (prefiero no actualizar porque me va muy bien y fluido, y leyendo comentarios...).

La cuestion es que mi iMac se conecta sin problemas a la red wifi, y permanece un rato todo correcto, hasta que de pronto se cae la conexion. El sistema no alerta de nada, sigue conectado al router aparentemente tal como dice en la barra superior, pero para que vuelvan a funcionar las conexiones tengo que desactivar el wifi y volverlo a activar, y vuelve a funcionar por otro ratito.

He probado borrando la red por completo, hasta del llavero, y volver a configurarla desde cero, pero nada.

El resto de ordenadores con windows y moviles (Android e iOS) no muestran caidas y van bien.

Espero poder encontrar otra solucion que no sea volver a utilizar WPA en toda la red...

A alguien mas le ha pasado algo similar?

Muchas gracias amigos.
#8
Bases de Datos / Campo para cuotas mensuales
18 Mayo 2012, 16:27 PM
Buenas chic@s!
Tengo una dudilla un poco tonta creo... estoy montando un sistema de gestion de clientes para un negocio familiar que necesita administrar mensualidades de clientes.

En principio pense en usar un campo DATE y luego con php rescatar solo el mes y año, pero no se si es un poco bruto hacerlo de esta forma.

Me gustaria saber que pensais! :)

Un saludo.
#9
Buenas,
Siempre he tenido problemas para entender todo el tema de expresiones regulares y demás en PHP...
el caso es que en una de mis webs, uso el siguiente codigo para detectar navegadores moviles:
Código (php) [Seleccionar]
$is_movil = eregi('/ipod|iphone|android|opera mini|blackberry|palm os|windows ce/',$_SERVER['HTTP_USER_AGENT']);
Pero la funcion eregi ya no es válida en la versión actual de PHP, y en teoria con reemplazarla por preg_match deberia valer, pero el script no funciona cuando uso preg_match...

Que es lo que deberia cambiar mas?

Gracias.
#10
Buenas,
Esto es algo que jamás me habia planteado, pero ahora estoy en un proyecto en el que no se pueden poner todos los huevos en la misma cesta jeje, y si se cae un servidor, quiero que bajo otro subdominio que apunte a otro servidor de otro hosting se puedan acceder a los recursos.

Esto de poner un subdominio apuntando a otra compañia de hosting no vale de nada si, cuando se cae la compañia que tiene el servidor DNS no puede servir a ese subdominio segun tengo entendido...

La pregunta es, ustedes que harian? Piensan que hacer eso de externalizar el servidor DNS a otro proveedor que se dedique solo a eso (Dyn.com por ejemplo) es añadir una capa mas que pueda fallar aparte del hosting?

Confiarian en usar el servidor DNS que viene por ejemplo en el Parking de Piensasolutions (donde compro los dominios) o sería mejor comprar necesariamente el servicio anual de Dyn.com? Este ultimo lo que me preocupa es que pone un limite de querys al servidor DNS...

Un saludo y gracias.
#11
Buenas,
Estoy volviendome loco ya buscando en google para comprar un pendrive con esa pestaña de proteccion anti escritura... pero solo salen casos de memorias con fallos que muestran mensajes similares o de un programa que consigue lo mismo por software pero que para mi no me resulta muy convincente.

Se que están en desuso, pero si conocen alguna tienda online que los tenga me gustaria que lo compartieran conmigo, todos los dias tengo que imprimir cosas en la facultad y los virus de alli siempre se cargan mis trabajos...

Gracias :)
#12
PHP / Heredar objeto entre clases [SOLUCIONADO]
22 Agosto 2011, 21:18 PM
Buenas :) voy a intentar ser breve jeje.

Tengo una clase Sistema al cual le paso una instancia hacia otra clase (DB) y guarda esa instancia en una propiedad a la que le tengo puesta protected.
Despues una clase llamada Categorias hereda de la clase Sistema, y hereda todos los metodos y propiedades correctamente, a excepcion de la propiedad $db que contiene el objeto para llamar a la clase de base de datos...

Al intentar llamar a una funcion de la clase de base de datos desde Categorias, PHP me lanza el siguiente error:
PHP Fatal error:  Call to a member function query() on a non-object

Como puedo heredar correctamente ese enlace hacia la base de datos?

Gracias!! :)

Edito:
No se que se me paso por la cabeza ayer... se heredan las propiedades pero no con los valores que se le asignan en tiempo de ejecucion verdad? Gracias.
#13
PHP / Sobre POO
15 Agosto 2011, 22:28 PM
Buenas,
Hace apenas dias que estoy mentiendome en esto de programar orientado a objetos con php, pues antes me parecia que era todo como una tonteria, y ahora me arrepiento de no haberlo intentado antes.

El caso es que ahora mismo tengo una clase Productos en la que tengo funciones para añadir,modificar... productos pero tambien para añadir,modificar... categorias. Esto se debe a que por ejemplo, al añadir un producto necesito la funcion que comprueba si existe la categoria a la cual se le asocia.

Creo que lo optimo seria separar 2 clases, una para productos y otra para categorias, pero no se como hacerlo si tengo esas dependencias.

Se supone que deberia hacerlo asi? para mantener la encapsulacion de la clase? o deberia crear una instancia hacia la clase Categorias cuando necesite funciones de ésta en la clase Productos?

Gracias :)
#14
PHP / Arbol multinivel con una sola consulta
20 Julio 2011, 15:01 PM
Buenas,
gracias a todos por la ayuda, y un especial saludo a madpitbull_99 y a дٳŦ* (Para mi ING xD) por su ayuda en mi anterior tema.

Tengo un problemilla que seguramente es una tonteria, pero bueno desde ayer estoy googleando y no le encuentro solucion clara.
Quiero crear un menu, con categorias y dentro de estas, sus subcategorias, pero que se pueda generar con una sola consulta a MySQL. Yo tengo una tabla con las columnas cat_id, catpadre_id, cat_nombre ... y en todos sitios recomiendan hacer una consulta inicial con catpadre_id = 0 y luego con un bucle ir haciendo consultas de cada categoria para sacar las subcategorias.... pero eso me parece un devorador de recursos cuando el arbol sea medianamente grande...

Como se les ocurre que puedo hacerlo sin tener que recurrir a esos cientos de consultas sql?

Gracias :)
#15
PHP / Problema con atributos en tienda online
7 Julio 2011, 01:01 AM
Buenas
estoy escribiendo desde 0 en php una tienda online, no uso ninguno de los excelentes sistemas cms open source que ya existen porque me gusta que todo en mi pagina sea hecho por mi para poder responder en caso de algun problema y saber donde está el fallo... aunque sea reinventar la rueda jeje, pero luego libero todo el codigo para quien les haga falta.

El caso es que ya esta todo el sistema de categorias, productos, etc, y a estas alturas me di cuenta de un problema, el usuario no puede agregar tallas o colores a un producto. Lo peor es que no puede ser algo rigido como insertar una columna para color, otra para talla... si no que me gustaria que el usuario pudiera crear la cantidad de atributos que desee con los valores que quiera.

No pido que me hagan nada, solo que me ayuden por favor a orientarme sobre como tengo que organizar la base de datos asi como que podria hacer para que el usuario pudiera meter diferentes stocks y precios segun los atributos... por ejemplo, rojo + grande = 3 euros, rojo + pequeño = 2 euros, azul + grande... ya que ahora tengo una columna para el stock del producto, otra para el precio... pero eso ya no me vale porque ni con todos los colores valen las cosas lo mismo, ni se tiene el mismo stock en almacen segun que atributos sea...

En fin, alguien podria orientarme un poco sobre como se soluciona esta problematica al guardar los datos y demas?

Muchas gracias, llevo un dia con un dolor de cabeza desde esta mañana... jeje

Un saludo :)
#16
PHP / Crear arbol de navegacion dinamico
18 Agosto 2010, 02:18 AM
Buenas,
antes de nada, pedir disculpas si este tema no va en este subforo, porque tiene parte de cada subforo de desarrollo web...
Estoy programando un modesto sistema de foros para mi sitio, y me he quedado atascado en una cosita, que es una tonteria, pero necesito otro punto de vista para continuar jeje.
El tema está en que cuando estoy en la pagina principal, si se sacar los foros y los subforos a traves de un indice en la db que me dice quien es padre de quien... pero cuando estoy en un tema concreto del foro, y solo tengo el ID de un subforo de cuarto nivel, no tengo ni idea como hacer para que el sistema genere todo el arbol de navegacion hacia arriba...
Hacia abajo es facil para mi, un bucle y listo, pero no se como hacer ese caso concreto, teniendo en cuenta que la profundidad de cada subforo en ese "arbol" varia...

Muchisimas gracias, un saludo.
#17
Lo cuelgo porque aunque sea una tonteria me hizo gracia que al entrar en la pagina de la biblioteca de mi universidad me mostrara el siguiente mensaje:

Citar¡¡Aviso: este formulario no funciona con Internet Explorer debido a un problema detectado con motivos de la última actualización del software. Estamos intentando solucionarlo lo antes posible. Mientras tanto puede utilizar cualquier otro navegador (Mozilla, Safari, Chrome...). Disculpe las molestias!!



Uploaded with ImageShack.us

Siempre he estado acostumbrado a que al entrar en paginas de universidades (al menos en las de aqui) o de ministerios... se me ponga pegas por no usar IE y no por lo contrario... jejeje.

Un saludo.
#18
Buenas,
Hace tiempo que ofrezco un servicio de tagboards, pero ahora mismo tengo un serio problema jejeje, y es que actualmente el trafico generado por este servicio es enorme y ya no puedo costearlo con fondos propios...

Conocen algun servicio de publicidad que use esos "botones" de 80x30? Es lo unico que entraria en los tagboards sin problemas.

Gracias
#19
PHP / Borrar una session asi?
5 Abril 2010, 20:56 PM
Buenas,
En mi aplicacion necesito poder expulsar usuarios de su session, ya que sino, o bien podian seguir operando en ella hasta toparse con alguna pagina que tuviera el script que comparara su session con las aceptadas en la DB... o bien tendria que poner ese script en cada uno de los archivos de la pagina, con todo lo que conlleva... (conexiones a la DB...)

Al fin encontre una funcion para borrar una session con un ID especifico, que provandolo conmigo funciona, y es la siguiente:
Código (php) [Seleccionar]

<?
function DeleteSessionID($sessionid) {
 $orgpath = getcwd();
 //chdir(PHP_BINDIR);
 chdir(session_save_path());
 $path = realpath(getcwd()).'/';
 if(file_exists($path.'sess_'.$sessionid)) {
   // Delete it here
   unlink($path.'sess_'.$sessionid);
 } else {
   // File not found
 }
 chdir($orgpath);
}
?>


El codigo esta tomado de un comentario del manual oficial de PHP.

Mi duda esta en si esto (borrar el archivo de session "manualmente") ocasiona algun problema de desorden al servidor porque PHP la mantenga aun como activa aunque no encuentre el archivo o algo... ya que supongo que no esta pensado para que se haga esa operacion asi.

Gracias

PD: Si conocen alguna otra forma de destruir una session que no es la del mismo cliente, por favor diganlo, ya que temo que el hosting crea que el poder operar asi sobre el directorio de sesiones es una falta de seguridad y lo anulen.
#20
PHP / Web en diferentes versiones e idiomas
2 Febrero 2010, 23:52 PM
Buenas,
hace un tiempo que me come un poco la cabeza, y es la idea de organizar de manera adecuada para facilitar la posterior actualizacion la estructura de mi proyecto, de modo que pueda administrar distintas versiones de la pagina (Una para escritorio, otra para iphone, moviles en general, tablets...) y a la vez, distintos idiomas...
Como lo hacen ustedes?
Pense en una funcion que busque si existe el archivo plantilla para la version e idioma solicitado, y si no existe mostrar por defecto en español y para PC...
Pero tal vez esto haga muy pesada la carga a la larga?

Gracias
#21
PHP / Sistema de permisos con PHP
9 Agosto 2009, 16:42 PM
Buenas,
Antes de todo, gracias por sus ayudas en los post anteriores.
Hasta ahora he estado comprobando permisos con un campo en la DB con el nivel del usuario... pero ahora necesito asignar diferentes niveles (Lectura, escritura, borrar) por cada modulo, y si son unos 12 modulos por ejemplo, no creo que la solucion sea crear 36 columnas en una tabla de mysql...
He leido por ahi, que puede hacerse utilizando la comparacion a bit de php, pero realmente no lo entendi demasiado bien.
Cual es el metodo mas optimo y flexible (cada cuenta tendra unos modulos u otros) que puedo utilizar?
Mil gracias.
Saludos.
#22
PHP / Sobre seguridad al subir imagenes
3 Agosto 2009, 04:39 AM
Buenas,
Mi actual proyecto exige que se puedan subir unas pequenias imagenes a modo de foto de cada usuario.
La verdad es que soy completamente novato en esto de subir archivos.
La forma de subirlo y demas, ya la busco yo. Lo que necesito es que me den consejos de seguridad.
Siempre me ha dado mal royo esto de permitir subir archivos, y ahora mas, cuando leo en un articulo que segun la configuracion de apache de mi hosting, podria ejecutarse php con una imagen llamada lokesea.php.gif y puf...
Tambien quisiera saber si aumenta el riesgo al usar la siguiente tecnica para ocultar la direccion, al usar readfile para cargar la imagen en el buffer:
Ocultar la direccion de una imagen con php

Gracias!!!
#23
PHP / Que falla en la funcion?
11 Abril 2009, 16:03 PM
Buenas, tengo una funcion de limpiado de variables que me da problemas... es esta:
Código (php) [Seleccionar]
function limpiar($var,$cars=''){
            $cars_ok = '/[^a-zA-Z0-9'.preg_quote($cars,'/').']/i';
            $var = preg_replace($cars_ok,'',$var);
        return $var;
}

Al llamarla de la siguiente manera:
Código (php) [Seleccionar]
$name = limpiar($name,')(@-_.,!$?¿ ');
Esto deberia hacer que admitiera letras, numeros y todos los caracteres que se muestran: )(@-_.,!$?¿
Pero sin embargo tambien pasa como bueno los corchetes [], el simbolo ^ y mil cosas que no sabre...
Que le ocurre?

Gracias :D

Solucionado:
Solo hay que escapar el caracter - porque lia al motor de expresiones...
#24
PHP / [MYSQL] Problema con float
29 Marzo 2009, 19:13 PM
Buenas, tengo un pequeño problema que me esta volviendo loco.
En un campo float(20,2) intento insertar el numero 891985.80, pero siempre lo guarda como 891985.81
Sin embargo en otro campo igual, si es capaz de guardar cosas como 0.45 etc y no cambia el decimal.
No solo pasa con ese numero, sino que siempre hace cosas raras con decimales, como considerar que 1.42 es 2

¿Que puede ser?

Gracias :D
#25
PHP / [MYSQL] Dudas de rendimiento
26 Marzo 2009, 19:22 PM
Buenas, estoy montando un sitio que genera grandes cantidades de registros por cada usuario, y estoy preocupado por si la columna que tiene el ID, qe ahora es un INT de 11, pudiera algun dia en el futuro a que un numero demasiado grande no pudiera ser soportado por la tabla, estamos hablando de que un usuario puede causar unos 50 registros diarios, y sea una cantidad grandecita de usuarios. Claro que no llegara ese momento ahora mismo, pero queria saber si luego es facil pasarlo a BIGINT o tendria algun riesgo...
Mi otra duda es sobre como funciona MySQL al hacer consultas, por si deberia de poner el campo de texto de 255 en la ultima columna o eso no tiene importancia alguna.

Gracias, y disculpen mi ignorancia.
PD: Antes usaaba MySQL para operaciones simples como foros, y demas, pero ahora que me interesaria aprender a montar una DB optima para grandes datos, ven logicos comprar algun libro sobre MySQL o no es necesario? Que consejos me darian?
#26
PHP / [PHP] Include dentro de una funcion
19 Marzo 2009, 17:02 PM
Buenas,
Cada dia se me presentan mas includes al principio de cada fichero... y queria hacer una funcion de Cargar() asignando en los parametros si usare una db o el motor de templates... y para ello necesitaria incluir los ficheros dentro de la funcion... pero no se puede... hay forma? o se les ocurre alguna otra idea?

Gracias!
#27
PHP / [PHP + MYSQL] Incrementar valor de un INT
23 Febrero 2009, 15:59 PM
Buenas,
Tengo una dudilla... estoy escribiendo un sistema de foros desde 0 (Que cuesta arriba se me está haciendo! Mas que nada por que cada dia hay mas lineas de codigo y eso me stresa jaja) y en una de las partes, tengo que incrementar en 1 o restarselo la cantidad de mensajes que tiene un cierto foro...
Para eso actualmente recojo el valor actual de los mensajes, le resto uno, y lo vuelvo a subir con un UPDATE.
Sé que todo eso se hace en cuestion de microsegundos, pero es posible que en los tiempos mas concurridos del foro al hacer 2 peticiones simultaneas se lien las operaciones... ? Vamos, que al momento de recojer el valor, otro lo incremente y yo haga el UPDATE con el valor erroneo.
Si fuera asi... Cual es la manera logica de hacer este tipo de operaciones?

Gracias.
#28
PHP / Que finalidad tiene esto?
7 Febrero 2009, 22:55 PM
Buenas,
A ver si me pueden ayudar a entender que hacen estas 2 lineas de codigo...
   
Código (php) [Seleccionar]
if(get_magic_quotes_gpc()) $string = stripslashes($string);
return mysql_real_escape_string($string);

A mi entender, al detectar las magic quotes activadas les quita las barras para luego volverselas a poner con mysql_real_escape_string();
Estas lineas las encontre en una clase para conectar con mysql.
No seria mas logico lo siguiente?
   
Código (php) [Seleccionar]
if(!get_magic_quotes_gpc()) $string = mysql_real_escape_string($string);
return $string;


El problema es que esta clase cuando te devulve un query les quita de nuevo las barras con stripslashes, y ya me tiene loco! Si lo dejo como viene me borra la mitad de las barras que introduce el usuario (y solo quiero escaparlas para evitar sql injection, no borrarlas) y si lo quito si que me devulve la cadena tal y como la introduzco... por lo cual no se habrian escapado los caracteres en el query...

Gracias!
PD: Estudiando mi script, me doy cuenta de que aunque get_magic_guotes_gpc() devuelve TRUE en el servidor, realmente no escapa ningun caracter y me esta volviendo loco!

EDITO:
Es posible hacer algo malicioso si escapo las comillas con htmlentities y dejo todo lo demas? Asi me evito todos estos lios de slashes y demas...
#29
PHP / Necesito idea para organizar mi tabla
6 Febrero 2009, 19:31 PM
Buenas!
Recientemente me puse a escribir mi propio foro php desde 0 y aun estoy algo cortito...
He creado 2 tablas en mysql, una para la lista de los temas creados, y otra con los posts que los rellenan.
El problema esta en que al hacer un inset con el titlo, autor... del nuevo tema, al mismo tiempo tengo que publicar el primer post de ese tema que debe de tener el id del tema y demas para luego saber que pertenece a el...


  • Si utilizo mysql_inset_id() para obtener el id del primer insert y estan publicando otro al mismo tiempo, no se liaran las id´s?

  • Existe la posibilidad de que un usuario intente ver el tema cuando se ha incluido el primer insert, pero aun no se haya hecho el insert con el primer post?
Gracias!
#30
PHP / Mi funcion para limpiar variables
5 Febrero 2009, 18:19 PM
Buenas,
Recien acabo de escribir una funcion PHP para filtrar una variable segun algunas condiciones... Les dejo el codigo por si a alguien le sirve, y de paso si tienen ganas, espero criticas para mejorarla, o ideas para que sea mas comoda.

Código (php) [Seleccionar]
<?php

/**
 * @autor Alex_Broadcast
 * @desc Funcion para filtrar variables.
 * @uso: filtra_var(Cadena, Numeros?, Letras?, Minimo, Maximo, Especiales?, Para DB?);
 * Por defecto las letras y los numeros si se permiten y no tiene MAX ni MIN.
 */

function filtra_var($var,$num=1,$let=1,$min=0,$max=0,$exp=0,$db=0){
if($num == 0$var preg_replace("/[0-9]/",'',$var);
if($let == 0$var preg_replace("/[a-zA-Z]/",'',$var);
if($max != 0){ $long strlen($var);
if($min $long || $long $max){ return FALSE;} }
if($exp != 1$var preg_replace("/^[a-z0-9]$/i",'',$var);
if($db == 1){ //Si $var va a un query SQL...
$var htmlentities($varENT_QUOTES);
if(get_magic_quotes_gpc()) $var stripslashes($var);
}
return $var;
}

/* Ejemplo: Solo numeros, y de 2 cifras minimo, 6 maximo */
$edad filtra_var($edad,1,0,2,6,0,0);

/* Ejemplo: Solo numeros, sin MIN ni MAX */
$edad filtra_var($edad,1,0);

/* Ejemplo: Numeros y letras, 3 MIN, 9 MAX */
$edad filtra_var($edad,1,1,3,9);
?>


La filtracion para evitar SQL INJECTION no se si es la mas optima, pero yo en mis paginas usaba ademas de todo eso funciones propias de MYSQL y no queria incluirlas en la funcion por si al ejecutarla aun no tenian una conexion establecida... cuestion de adaptarla a sus necesidades.

Saludos!
#31
PHP / Tratar con Arrays en Templates simples
24 Enero 2009, 19:50 PM
Buenas!
Estoy acostumbrado a tratar con Smarty como motor de plantillas y al mostrar datos de la db era facil con foreach... pero ahora quiero un sistema mas ligero, que solo puede asignar variables... asignas un dato en el codigo php y lo reemplaza por su correspondiente en la plantilla html. Pero cuando al hacer una query me llegan todos los datos de los mensajes de un foro por ejemplo, como lo muestro? Sin tener que meter nada de html en un foreach con php o por el estilo... para que se siga separando html de php.

Gracias.
PD: Solo necesito la idea mental, no se esfuercen en ejemplos :D
#32
Electrónica / Voltaje de una Usb Power Bar
7 Diciembre 2008, 20:28 PM
Buenas,
Me ha dado la curiosidad por estas baterias que se cargan por USB y luego sirven para cargar otros gadgets...
La mas interesante que he encontrado es la "USB Power Bar", que es mas pequeña que el resto de baterias que he encontrado, tiene indicador led, linternita como detalle... en fin, que es perfecta exepto en que tiene una salida de 5.6V, frente al estandar USB de 5V...
Supongo que los gadgets tienen un margen de resistencia pero... Se podran quemar? o existe algun adaptador para bajar ese pelin de voltaje? o conocen alguna bateria por el estilo...?

Gracias :D
#33
PHP / Separar cadena en variables y valores
10 Julio 2008, 12:55 PM
Buenas,
Mi hosting solo me deja usar una variable de $_SESSION... y tengo que pasar toda la info en una sola variable...
Hasta ahora he usado el metodo de carlos/65/98 etc y separarlos con un explode()... pero con esto se crea dependencia del orden de las palabras y en el momento de crear un nuevo dato habria que modificar todos los archivos...
Hay alguna forma de meter los datos como name:carlos/grupo:65/edad:98 y luego un script que cree las variables $name="carlos"; etc?

Gracias.
#34
Buenas!
Tengo un sistema de usuarios propio y deseo instalar SMF pero no a costa de perder mi sistema propio de usuarios, sino mantenerlo independiente... SMF incluye ssi.php para la integracion, pero solo para incluir el formulario de login... y no quiero eso.
Crear usuarios en los 2 sistemas no creo que de mucho problema, al igual que borrarlos, creo que sera cuestion de que mi sistema propio escriba una linea en mi tabla y en la de SMF a la vez (O tal vez el sistema de usuarios de SMF no sea tan simple? :S)
El problema es cuando un usuario logee en mi sistema... como creo yo la sesion de SMF?

Saludos y gracias.
#35
Buenas,
ya se han escrito temas similares pero no estan totalmente completos...
Supongamos que la ruta del public_html es /home/tuweb/public_html/ y vamos a centrarnos en que tenemos un archivo 2 subdirectorios mas abajo, y necesitamos saber la ruta del public_html para incluir un archivo que esta en la raiz. Descartamos cosas como ../../ y DOCUMENT_ROOT, pues el primero no funciona en cuanto incluyes el archivo desde otro lado, y el segundo casi nunca esta definido.

Recopile 3 metodos para conseguir dicha ruta, el primero lo saque de un tema de este foro, otro del codigo fuente de SMF y otro directamente de php.net
Código (php) [Seleccionar]
str_replace("subdir/subdir/miscript.php", "", __FILE__);
Código (php) [Seleccionar]
dirname(dirname(__FILE__));
Código (php) [Seleccionar]
realpath("../../");
Luego ya pondriamos un IF para saber si la variable de la ruta esta definida, sino la definiriamos con alguno de estos metodos (alguna idea mejor?).

Mi pregunta seria... cual de estos 3 seria el mas limpio/rapido/optimo ? hay que tener en cuenta que se usaria al principio de todos los scripts, y por eso cada nanosegundo cuenta  :rolleyes:

Si alguno/a tiene idea de alguna otra forma...

Ya se que con una web modulada no haria falta nada de esto, pues ya los llamo desde un solo archivo y listo, pero para proyectos mas grandes no puedes llamarlo todo desde un fichero.

Saludos y gracias

EDITO:
Cito un comentario de php.net:
CitarThis is silly:
dirname(dirname( dirname( dirname(dirname( dirname( dirname(__FILE__))))))); // This is rediculous
       
function recursiveDirName($file, $x){
    if($x > 0) return recursiveDirName( dirname($file), $x-1 );
    return $file;
}

This is much easier:
$file = recursiveDirName(__FILE__, 7);

Que opinan sobre esto? se refiere solo a comodidad o tiene algun otro sentido?
#36
Buenas,
tengo una db de noticias con una columna llamada fecha con datos del tipo 20070102,
para no tener que hacer 3 columnas diferentes para cada dato (tal vez sea mala idea a la larga?)... y ahora quiero hacer un buscador para que el usuario busque en el archivo segun el ano, o ano + mes... como podria hacer algo asi? es decir que si quiere ver todas las noticias de 2005, como haria para mostrar todas las filas en cuyo dato de la columna fecha sea 2005... ?

Gracias.
#37
PHP / Que error hay en esta funcion php?
3 Septiembre 2007, 13:26 PM
Buenas,
Estoy haciendo unas cuantas funciones en php para simplificar los registros de usuarios noticias etc...
Este es el codigo de la funcion, mas abajo el error:
Código (php) [Seleccionar]
<?
// Funcion para anadir noticia
function add($autor, $titulo, $not) {
$db->query("INSERT INTO news (autor, titulo, noticia) VALUES ('$autor','$titulo','$not')");
}

add("Robert", "Hola mundo!", "El clasico Hola Mundo...");
?>


Y me da el siguiente error:
CitarFatal error: Call to a member function on a non-object in...

He buscado mucho pero no encuentro el significado...

Gracias
#38
PHP / Reconocer urls externas en php
31 Agosto 2007, 15:48 PM
Buenas,
antes de nada dar gracias a los que participaron en mi anterior tema sobre Javacript para MD5... y decir que no busco que me hagan un script php, sino pistas para saber por donde empezar...
Lo que quiero hacer es una funcion php que al colocarla al final de cada archivo de mi pagina verifique si es un link hacia una pagina externa o interna, si es externa deberia modificarla al estilo de mipag.com/proxy.php?url=...
La historia es que no quiero pasar el texto de un comentario por ejemplo por la funcion para que modifique el enlace estaticamente, sino que lo modifique en la salida, para que si algun dia en la funcion decido cambiar la forma de tratar las urls se cambien todas.
Y ya luego tampoco deben ser tratadas las webs afiliadas, entonces tendria que hacer alguna especie de lista blanca en un txt con mi dominio y los dominios afiliados para que los dejara intactos no? o tal vez sea mejor hacer que la zona de la pagina donde se encuentran sea excluida? (creo que esta ultima idea complicaria las cosas...).

Saludos y gracias.
PD: ya busque sobre como reconocer urls con php... pero no encuentro nada.
#39
PHP / Urls Amigables (solo con el titulo)
21 Agosto 2007, 21:23 PM
Buenas,
busque por la red y por el foro pero lo maximo que encontre para un sistema de noticias es del tipo /ID/titulo-y-tal pero eso no me gusta, por que si tenemos 1 millon de noticias ya el id ya quedando mal... y mi idea seria que la id de la noticia fuera sacada del titulo pasado por url.
Pense en codificar a md5 el nombre pasado por url para usarlo como ID de la noticia, pero no se si tiene inconvenientes de performace o de otro tipo, que opinan ustedes? o hay formas mas recomendables?

Resumiendo estoy formando mi sistema de noticias propio y para las url me gustaria pasar tipo /06/02/2007/titulo-de-la-noticia/ y no teniendo que pasar una variable mas con la id de la noticia. Respecto a lo anterior mejor asi o la fecha con - en vez de / ? (no se si depende del gusto o que los buscadores vean demasiada profundidad de dirs...).

Por cierto... si tienen urls donde se hable a fondo del tema (y no se centre tanto en modrewrite sino mas en el tema...) les agracederia que las pusieran.

Muchas gracias.
#40
PHP / Auto-Login con PHP?
20 Agosto 2007, 23:33 PM
Buenas,
voy a explicar la idea con un ejemplo para no liar mucho... haber, imaginemos que tengo una cuenta en pepito.com, y miweb.com tiene el user y pass de esa cuenta, como podria hacer Auto-Login desde miweb.com para que yo no tuviera que teclear ninguna informacion de usuario? es decir, en miweb.com le de a la opcion de Auto-Login y ya me apareciera logeado en pepito.com
Algo parecido usan en PassPack (un gestor de pass online).
Pongo esto en el foro de PHP por que se supone que el login tendria que hacerse desde la parte del server, si pasa por el cliente con javascript por ejemplo ya podria ser captada...

El caso estaria en que pepito.com no me perteneceria... en resumen la idea es pasar los datos a la web para el login sin pasar por el cliente.

Saludos.
#41
PHP / Como estructurar una DB
9 Agosto 2007, 14:00 PM
Buenas,
antes de nada decirles que en esto de las bases de datos soy novato, siempre las evitaba usando txt etc... pero mi duda viene a ser mas administrativa que de tecnica.
Se hacer un sistema de usuarios tipico (en una tabla: id, name, email, permisos), y para la autentificacion y tal va bien, pero ahora el problema esta en que en diversos servicios de mi web requieren aumentar el perfil del usuario pidiendo su web, preferencias sobre la herramienta... y si aumentamos a esto los comentarios que publique... se hace todo un lio, pues aunque todo pueda estar en tablas diferentes con referencia al nombre de usuario, cuando por ejemplo borras el usuario siguen rastros de el en todos lados...
En definitiva... me gustaria saber como organizan las tablas y los datos en la db para algo mas complejo que un simple login.
La idea optima para mi web seria hacer algo similar a lo que hace google con sus registros: pedir datos basicos como el user y pass y luego irse subscribiendo en cada servicio en particular aumentando los datos si se requieren.

No se si habra algun manual sobre la estructuracion de datos... busque pero nada... pero no creo que sea yo el unico con problemas sobre esto  :-[

Saludos y gracias (y perdon por escribir tanto).
#42
PHP / Cambiar header "Server" ?
11 Julio 2007, 21:45 PM
Buenas,
Estoy chequeando mi web en busca de fallos etc... y vi que por los headers va informacion sobre la version de Apache o PHP...
con lo siguiente consegui eliminar la version de PHP:
header('X-Powered-By: PHP');
Pero aun en el header Server se muestra algo como Apache...Unix...Open...PHP...
todo con sus versiones...
Alguna forma de cambiar eso al igual que pude con X-Powered-By?

Saludos y gracias.
#43
Buenas,
Mi problema es que mi organizacion de los ficheros es algo liosa, debido a que esta todo tan ordenado, que para acceder a un archivo 3 directorios mas arriba hacia ../../../, pero claro, cuando ademas metes includes y tal... como no uses la ruta completa al final salen 3000 errores.
Mi primera pregunta es: Cual de estos 2 metodos es mejor para obtener la ruta base en todos los archivos?
- Metodo 1:
  Incluir en todos los ficheros el siguiente codigo:
  <?
$ruta_add = "/alex/algo.php";
$ruta_abs = str_replace($ruta_add, "", __FILE__);
echo $ruta_abs;
?>

  Asi, suponiendo de que __FILE__ diera /opt/...../alex/algo.php, al reemplazar lo ultimo me daria la ruta base de mi carpeta inicial.
  Lo malo de este metodo es evidente: repetitivo codigo en 2000 ficheros que abulta espacio.
  tambien me lo plantee con substr... esta bien asi o hay una forma mejor de quitarle las 2 palabras que sobran de esa ruta?
- Metodo 2:
  Incluir en el .htaccess:
  <FilesMatch "\.(php)$">
php_value short_open_tag "Off"
php_value auto_append_file "/opt/...../alex/config.php"
</FilesMatch>

y que en config.php haya una variable con el valor de la ruta absoluta.
Y en este caso lo malo seria la obligacion a usar .htaccess, que muchos hosts no lo permiten, y que se incluya hasta en los ficheros no necesarios y peligrosos en algunos casos...

Muchas gracias por leer al menos :). Agradezco tanto que se me aconseje cual de los 2 usar, como optimizar el primer metodo, que seguro hay alguna forma mas sencilla... como dar alguna otra opcion para obtener la ruta base... (DOCUMENT_ROOT no funciona ni similares por la config del host).
Otra preguntilla: dado a que veo que mucha gente no tiene ese problema de las rutas... como hacen ustedes para organizar la web? escalar como maximo a 1 dir inferior?

Saludos y muchisimas gracias.
PD: Perdonen ortografia por el teclado ingles, y tambien gracias al usuario Rentero por la aportacion que dio en mi ultimo tema sobre esto.
#44
PHP / Ruta completa del archivo, como?
11 Mayo 2007, 16:10 PM
Buenas tardes (al menos aqui  ;D),
Despues de mucho tiempo buscando sobre el tema, abro este post por que ya no encuentro nada...
El asunto esta en incluir/utilizar un archivo que esta en un directorio superior, y por ahora solo encontre las siguientes formas de hacerlo:
- poner manualmente ruta completa del directorio (descartado, ver abajo)
- poner manualmente la direccion del sitio web (descart.)
- utilizar Documentroot (no funciona en casi ningun sitio)
- ir usando "../" para referise a subir directorio
- pedir ruta principal a una db Mysql, algo que no me agrada mucho, ya que casi nunca podria cambiar claves de las databases, debido a que estarian citados los datos en cada archivo...
Quisiera saber si existe alguna otra forma, ya que el problema esta en que la pagina la quiero modificar tanto en mi pc (direccion web nula, ruta de archivos distinta) como en el servidor, y claro con lo de ../ se podria hacer para una vez y tal... pero si haces algo como ../../../../config.php, cuando luego incluyas eso en otro lado... no funcionara por que no son las mismas veces...

No se si es que todos ponen en un mismo dir todos los archivos y yo soy el unico que los organiza y tiene ese problema... o todos usan un unico archivo php desde el que llamar todo... o nose... me gustaria saber como lo hacen ustedes...

Gracias, muchas gracias.
#45
Scripting / Bash - Error en operaciones?
26 Abril 2007, 15:32 PM
Buenas, estoy aqui haciendo un codigo para calcular % en shell...
Traduciendo la siguiente formula matematica para calular la diferencia entre 2 cantidades:
1valor=50
2valor=75
(2valor-1valor)/1valor*100 = 25


Me salio asi:
capini=75
capinic=50
let porcapc=($capini-$capinic)/$capinic*100
echo $porcapc

Pero me da 0 en lugar de 25
Que esta mal? he estado probando estos 2 dias con miles de soluciones...

Saludos y gracias

EDITO
Ya encontre el problema, y era por el tema decimales.......
ahora tengo otro, puse un if para separar las operaciones de decimales con ls que no a gusto del usuario:
if [ "$decimf" = "no" ]; then
  let timp=timp+$imp
else 
  timp=$(echo "scale=$decimscala;timp+$imp" | bc)
fi

Pero en el primer caso (no decimales) va perfecto con enteros y TIMP se autoincrementa... y en el segundo caso puede coger los decimales pero TIMP no se autoincrementa en el bucle (esta mas arriba del codigo que puse) y solo toma el ultimo valor de &imp

Gracias