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 - ^Tifa^

#611
PHP / Re: Como evito SQL Inyection?
7 Diciembre 2009, 19:31 PM
Para intentar protegerte de inyecciones SQL tienes softwares como este:

http://www.greensql.net/

Pero si quieres algo mas personalizado, puedes crear dentro del motor de BD procedimientos almacenados y pasarle cierta cantidad de parametros, tambien existen en php creo que magic_quotes... (O no se bien, en Perl se conoce como placeholder) en php no se como se llame esta tecnica, pero tambien se utiliza dentro del lenguaje scripting para intentar evitar las inyecciones SQL.

#612
CitarQue NO es lo mismo que la estructura de las tablas en sql como se suele confundir

Se que no es lo mismo, pero a mi particularmente me queda mas sencillo y facil hacer el estructurado de las tablas sin nisiquiera pasar por el diagrama entidad relacion inicial... (Y reconozco que el diagrama es muchisimo mas simple de realizar que la otra manera).

Nunca he sido partidaria de los diagramas ni de base de datos, ni en programacion (diagrama de flujo) aveces me colocaban tarea en vivo en un aula en programacion en algun lenguaje y me decian hazlo ahora mismo... y ufff tiraba el codigo en unos pocos minutos y funcionaba y todo al compilarse, pero cuando el profesor me decia ok, y el diagrama de flujo de eso que acabas de hacer donde esta si eso debio ser lo primero que debiste hacer? y me quedo como plop  :-\  ahhhh no se. Y me han dicho hazme el diagrama ahora, y lol me pasan 2 horas y me vez con una hoja vacia pensando por donde comenzar a dibujar el dichoso diagrama  :xD

Sera cuestion de adaptacion, yo me lio con diagramas pero si me piden estructurado me manejo mas rapido. Pero a la larga creo no estoy segura, pero creo que si, que lo que el usuario que inicio el post buscaba era el diagrama no el estructurado de las tablas.
#613
Bases de Datos / Re: Dudas de consulta SQL
7 Diciembre 2009, 16:50 PM
Ups.... vas a molestarte mucho conmigo  :-[   :-[   :-[   :-[   :-[   :-[ 

sorry..  :-\

Era un poco tarde cuando te sugeri lo que te sugeri (estaba mas dormida que despierta), y ahora mirando la consulta es que me doy cuenta de mi fallo  :-\

Mira, no te devuelve nada cuando haces esto:

$res = mysql_query("SELECT l.*, t.* FROM locales l INNER JOIN tipos t ON l.tipo = t.id WHERE l.calle = 'Independencia' AND l.numero IN ('300','1000')");

Debido a que l.numero IN('300','1000') se le esta diciendo a la consulta retorname todas las filas donde el campo numero tenga 300 o 1000  :-[  perdona, se que lo que tu buscas es que los datos esten entre 300 y 10000 no que sean exclusivamente 300 y 1000...

Tu consulta estaba bien como estaba anteriormente (cuando utilizabas);

AND l.numero > '300' AND l.numero < '1000'

O puedes acortarlo con :

AND l.numero BETWEEN '300' AND '1000'

De antemano disculpame... no fue tu culpa.  ;)
#614
Si esta buscando el 'dibujito' que me parece que eso es lo que el inicialmente esta buscando el diagrama de entidad-relacion de su peticion.

El de Novlucker le podria servir de modelo  :-*

A mi tampoco me gustan para nada los diagramas.
#615
Citaryo entiendo que esto seria una relación reflexiva en la tabla usuarios que sería relacion tipo NM porque un usuario puede tener varios usuarios o amigos y un usuario o amigo pueden tener varios usuarios

Haber, un usuario puede tener varios amigos (una entidad puede relacionarse a varias entidades). Pero un amigo no puede tener varios usuarios  :-\  sino un solo usuario, cuando te registras en cualquier web se te asigna un usuario unico, no varios, lo que si se te permite es volver a registrar un usuario nuevo para tener mas de uno (Pero no tendria mucha logica ya que independientemente aunque yo tuviera 3 usuarios creados por ejemplo en este foro, cada uno seria independiente, unico y con sus caracteristicas individuales propias  :xD ). Entonces, seguiria mirando en tu caso la posibilidad de 3 tablas.

Usuarios
Mensajes
Amigos

Mi ejemplo expuesto (Aunque esta realizado en puro consultas SQL) podria servirte de base, lo que me parece que buscas es el 'Diagrama Entidad-Relacion' de eso que expuse mas arriba con consultas SQL.

Me temo que tengo una falla enorme con diagramar este tipo de situaciones y no soy muy amiga de los diagramas de flujo... pero mas o menos por ahi va el camino.

Usuario se relaciona a Mensajes y Amigos se relaciona a Mensajes.

Mensajes vendria siendo la tabla intermedio de relacion entre las dos (usuarios y amigos).
#616
Bases de Datos / Re: Dudas de consulta SQL
7 Diciembre 2009, 13:22 PM
CitarY ningun otro INDICE ni nada??

Dependera siempre y cuando vayas a hacer tu consulta SQL solicitando realizar una busquedad por una condicion mas, por ejemplo suponte que al where..and..and quieres agregarle otro campo mas:

where numero between(algo,algo) and votos = algo

Entonces el campo votos habria que crearle un indice, de lo contrario puedes dejar todo igual.

CitarPERO.. HAY PROBLEMAS:. No me devuelve nada..
Ejecuto ese codigo tambien en PHPMyAdmin, y TAMPOCO devuelve algo...
Recuerdo que lo que yo quiero, es devolver todos los locales que tengan un valor de "numero" entre 300 y 1000.. el "IN ('300', '1000')" funcionaría???

Si pero fijate en la consulta que estas guardando (Y que yo te coloque):

SELECT l.*, t.* FROM locales l INNER JOIN tipos t ON l.tipo=t.id WHERE l.calle='Independencia' AND l.numero in('3000','100000')

l.numero in('3000','100000')  no deberia ser para tu caso l.numero in('300','1000') ??? Porque entre 3000 y 100000 hay mucha diferencia de numeros delante de entre 300 y 1000.

#617
Bases de Datos / Re: Dudas de consulta SQL
7 Diciembre 2009, 05:13 AM
CitarTifa, vos me decis que haga:

SELECT l.*, t.* FROM locales l INNER JOIN tipos t ON l.tipo=t.id WHERE l.tipo IN(SELECT tipo FROM tabla WHERE calle = "independencia") AND t.id IN( SELECT tipo FROM tabla WHERE calle = "independencia")

La verdad, no logré ententer eso.. que se supone que hará?

Optimizacion chico, optimizacion. Recuerda que los registros en tu tabla iran creciendo con el tiempo y si dejas la consulta como la tienes, con el tiempo lo que tardaba en devolverte en a lo mejor 0.03 segundos en un futuro (depende el crecimiento de datos) podra tardar 0.50 segundos la misma consulta .... y si crecen mas datos dentro de la tabla luego no sera 0.50 segundos sino hasta 2 minutos lol.. para retornarte una consulta.

Obvia todo lo que dije anteriormente y ya que haz dado mas detalles de tus tablas:

Código (sql) [Seleccionar]


CREATE INDEX INDICE ON locales(calle, numero);



Y a tu consulta:



"SELECT l.*, t.* FROM locales l INNER JOIN tipos t ON l.tipo=t.id WHERE l.calle='Independencia' AND l.numero > '300' and l.numero < '10000'


Yo si fuese tu (por optimizacion) lo modificase a :



SELECT l.*, t.* FROM locales l INNER JOIN tipos t ON l.tipo=t.id WHERE l.calle='Independencia' AND l.numero in('3000','100000');

#618
Bases de Datos / Re: Dudas de consulta SQL
7 Diciembre 2009, 04:48 AM
Lo que provoca el horario nocturno tarde, suenio y pocas horas para dormir....

Obvia todo lo anterior que postee, he probado la consulta en el optimizador de MySQL (Ya que la anterior no la probe)

Te basta con crear un indice sobre el campo calle para que filtre y optimize la consulta como es  ;)  por ende puedes conservar intacta tu consulta, sencillamente crea un indice extra al campo calle para que el rendimiento sea mayor.

Un saludo
#619
Bases de Datos / Re: Dudas de consulta SQL
7 Diciembre 2009, 04:30 AM
Hasta ahora es que mas o menos vengo a entender tu peticion  :P

Haz intentando con $row["tipo.id"] o $row["locales.tipo"] o sencillamente $row['id'] ya que total tipo en locales y id en tipo tienen el mismo valor.

PD: Tu consulta tiene un problemita de optimizacion chiquito  ;)  es super bueno que te funcione pero.... si haces esto:

CitarON l.tipo=t.id

Le estas diciendo al optimizador de mysql, buscame en todas las columnas donde ambos datos correspondan... si tienes 10,000 columnas antes de retornarte el resultado final que solicitas con el WHERE l.calle = "independencia" (Que por cierto calle no es un indice es un campo comun y corriente segun expusiste... esto hara la consulta aun mas lenta que si campo fuese indice). Podrias ya que sabes que haras tu busquedad con la direccion, crear un indice en el campo calle y buscar la manera para que esto

CitarON l.tipo=t.id

No busque en todas las columnas existentes... podrias intentar antes de esa ultima validacion con algo mas o menos asi:

Código (sql) [Seleccionar]
WHERE l.tipo = (select tipo from table where calle = "independencia" ) and t.id = l.tipo

recuerdate crearle un INDEX al campo calle para hacer la validacion anterior.  ;)   lo anterior solo funciona si cuando hagas el select tipo where calle = bla retorne 1 solo valor, si retonar mas de 1 valor tendras que hacer algo como:

Código (sql) [Seleccionar]
WHERE l.tipo IN(select tipo from tabla where calle = "independencia") and t.id IN( select tipo from tabla where calle = "independencia")

no lo he probado esto te lo digo a puro comentario, pero mas o menos deberia funcionar y asi tu consulta quedaria mas optimizada de lo que no esta actualmente.
#620
Bases de Datos / Re: Dudas de consulta SQL
7 Diciembre 2009, 01:21 AM
Yo pensaba que esta linea:

Citarecho "El local de nombre: " . $row[] . ", es del tipo: " . $row[] . "y esta en: " . $row[] . "<br>";

A proposito le habias quitado los indices (por ejemplo $row[1], $row[2], etc) de las variables cuando posteaste tu duda aca por rapidez o porque era un ejemplo o algo asi   :-\  pero veo que no...... veo que realmente tu codigo es asi  :-\  por eso supuse que querias saber como imprimir dentro del motor los registros concatenados con las frases... disculpame si malinterprete mal.

Sobre tu codigo PHP creo que lo que andas buscando es

mysql_fetch_assoc

Donde $row["campo"] es el nombre real del campo dentro de la tabla en cuestion.

Código (php) [Seleccionar]


while ($row = mysql_fetch_assoc($res)) {
    echo "El local de nombre: "  .  $row["nombre"] . es del tipo: " . $row["tipo"] . "y esta en: " . $row["direccion"] . "<br>";