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 - Skeletron

#561
PHP / Como evito SQL Inyection?
7 Diciembre 2009, 18:12 PM
Hola gente.. les comento que en mi web, tengo algunas entradas y salidas de datos, que me gustarian mejroarlas en seguridad.. para evitar SQL Inyection.

Supongamos en el metodo INSERT:
$res = mysql_query("INSERT INTO mails (mail) VALUES ('" . $_POST['mail'] . "')");

Y en el metodo SELECT:
$res = mysql_query("SELECT calle FROM locales WHERE calle = '" . $_POST['direccion'] . "' ORDER BY calle");
while($row = mysql_fetch_array($res)){
   echo $row['calle'] . "<br />";
}

Y que me dicen del UPDATE???
#562
Bases de Datos / Re: Dudas de consulta SQL
7 Diciembre 2009, 17:44 PM
No por favor.. nada de disculpas.. Tu me estas salvando la vida mas de 1 vez.. nada de pedir disculpas :D

Continuando con alguna que otra pregunta:

Hace un tiempo me dijeron que agregar mas de 1 o 2 indices, ya hacía mas retardada la consulta.. y que hay que saber colocarlos bien a ellos, porque sino juega en contra.. es verdad ello?

Otra consultita:
Un "PRIMARY", tambien funciona como INDICE?
#563
Bases de Datos / Re: Dudas de consulta SQL
7 Diciembre 2009, 16:00 PM
Estoy usando éste:
$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')");


Y juro que no devuelve nada.. entre 300 y 1000
Y los numerros del ejemplo, estan entre ese rango.. muy extraño...
Mira las imagenes que puse arriba... ahí podras ver los valors exactos de las entradas..

mira:
#564
Bases de Datos / Re: Dudas de consulta SQL
7 Diciembre 2009, 05:55 AM
Perfecto!!!
Quedó así:


y el codigo php así:

Código (php) [Seleccionar]
$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('3000','100000')");
echo "Resultados:<br />";
while($row = mysql_fetch_array($res)){
echo "<hr /><br />Nombre del local: " . $row['nombre'] . ", Tipo: " . $row['tipo'] . ", Direccion: " . $row['calle'] . " " . $row['numero'];
}


La imagen de la tabla: LOCALES

Y ningun otro INDICE ni nada??


PERO.. 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???


Que me dices de los INDICES en OPINIONES, TIPOS y SERVICIOS??? Ellas 3, tienen solo 2 columnas.. y utilizo SIEMPRE, solamente 1 columna.. ID... Le hago indice en las 3?
En las 3 tablas, "ID" es "PRIMARY"... funciona tambien como indice? o hace falta que ID sea PRIMARY y tambien agregarle un INDICE?
#565
Bases de Datos / Re: Dudas de consulta SQL
7 Diciembre 2009, 04:55 AM
Y que mejor para que vallan imaginando, que ver la web..

:www.brodasoft.com.ar/NuevaCordoba

Dont by Evil..
Puede tener XSS por el momento, porque esta en desarrollo.. no sean malos :D no prueben maldades :D
#566
Bases de Datos / Re: Dudas de consulta SQL
7 Diciembre 2009, 04:50 AM
Llego la hora de especificar:

No voy a hacer 1 solo tipo de búsqueda.. el usuario podra hacer 4 tipos de busqueda:
la tabla en realidad, no tiene una "DIRECCION" sino que tiene 2 campos: CALLE y NUMERO (numero, es el numero de la calle.. como por ejemplo: Independencia 710).
También podra buscar por TIPOS de locales, tambien podra por NOMBRE DE LOCAL, y por ultimo, por servicios ofrecidos (aunque, de ésto no les he hablado.. ya que SI O SI tengo que hacer 2 consultas sql)


Supongamos que estamos haciendo la busqueda por DIRECCION..
El usuario podrá ingresar 3 valores:
Calle, Numero "DESDE" y numero "HASTA".. para buscar todos los locales en la calle Independencia, desde la altura 300 al 1000 (supongamos)

Mi codigo es éste:

Código (php) [Seleccionar]

$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 > '300' and l.numero < '1000'");
echo "Resultados:<br />";
while($row = mysql_fetch_array($res)){
echo "<hr /><br />Nombre del local: " . $row['nombre'] . ", Tipo: " . $row['tipo'] . ", Direccion: " . $row['calle'] . " " . $row['numero'];
}

(suponemos que donde puse el dato: INDEPEDNENCIA y 300 y 1000, ahí estarán tomados los valores desde las variables GET del la URL
Y los datos de mi base de datos son:

Citar
   TABLAS:
      mails:                           TABLA DE MAILS
         mail(varchar:35)               Los Mails de los registrantes
      locales:                        TABLA DE LOCALES
         id(int:4) (primaria)            Identificador
           nombre(varchar:50)               Nombre del Local
          tipo(int:2) (indice)            Identificador Tipo de Local
           calle(varchar:100)               Direccion del local
           numero(int:4)                  Direccion del local
          servicios(varchar:50)            Numeros de los Servicios prestados
           telefono(varchar:15)            Telefono del local
          votos (int:4)                  Total de votos recibidos
          total(int:5)                  Suma del total de los votos
           observacion(varchar:120)         Observaciones nuestras
       tipos:                           TABLA DE TIPOS DE LOCALES
          id(int:2) (primaria)            Identificador
           tipo(varchar:30)               Tipo de Locales: Delivery, Bar, etc
       servicios:                        TABLA DE SERVICIOS
          id(int:2) (primaria)            Identificador
           tipo(varchar:30)               Tipo de servicio: Gaseosas, Alcohol, Hospedaje, Delivery, etc
      opiniones:                        TABLA DE OPINIONES
          id(int:4) (indice)               Identificador
           texto(varchar:1000)               Texto de la opinion



La web que es?
La web tendrá todos los datos de todos los tipos de locales que hay en MI BARRIO de MI CIUDAD...
Por lo que la gente que quiera buscar que locales hay en X calle, podra hacerlo buscando por direccion..
Si quieren bsucar donde esta el local: "Don Juan el Pizzero" podran hacerlo bsucando por NOMBRE
Si quieren buscar donde venden Pizzas y Gaseosas, lo harán con otro metodo (el valor SERVICIOS dentro de LOCALES, tendrá separado por comas "," cada tipo de servicio que ofrece.. pero esos valores, no serán los servicios en SI, sino, los numeros de los servicios que tambien estan identificados en la tabla SERVICIOS.. sería LO MISMO que pasa en éste caso..)


Ahora bien.. Sabiendo que hay 4 tipos de COnsultas.. Donde me conviene poner los Index? yo lo puse en TIPO.. porque supongo que lo que mas se va a buscar es el "TIPO" de local.. porque la mayoria (supongo) buscará Deliverys... o tambien puede que busquen por servicios.. eso lo haré con una consulta que mire si dentro de SERVICIOS está el numero "4" (supongamos que 4 es: EMPANADAS, y el usuario buscaba empanadas)...

Bien.. Ahí esta toda la explicacion...

Tifa, 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á?
#567
Bases de Datos / Re: Dudas de consulta SQL
7 Diciembre 2009, 04:01 AM
FUNCIONA!!!

Hice ésto:

$res = mysql_query("SELECT l.*, t.* FROM locales l INNER JOIN tipos t ON l.tipo=t.id WHERE l.calle='Independencia'");
         while($row = mysql_fetch_array($res)){
            echo "Tipo: " . $row['calle'] . ", Nombre: " . $row['nombre'] . "<br>";
         }


Ahora bien.. si quiero mostrar el ID.. sabiendo que tengo un ID en Locales, y otro ID en Tipos, como hago para hacerle un "ECHO" a ese ID???

$row['t.id'] <<< no funciona
#568
Bases de Datos / Re: Dudas de consulta SQL
7 Diciembre 2009, 03:55 AM
Cita de: Novlucker en  7 Diciembre 2009, 03:52 AM
Código (sql) [Seleccionar]
SELECT locales.*,tipos.tipo
FROM locales inner join tipos
ON locales.tipo=tipos.tipo
WHERE direccion='Pepe'


Saludos

Seguramente debe ser eso lo que pido.. Pero acordate que en la tabla "TIPOS" tengo un ID y un TIPO... en ID tengo el numero, que identifica al tipo, y en la tabla LOCALES, en TIPO, tengo al NUMERO que es igual al ID de la tabla TIPOS..

Será así?:
Código (sql) [Seleccionar]
SELECT locales.*,tipos.*
FROM locales INNER JOIN tipos
ON locales.tipo=tipos.id
WHERE direccion='Pepe'
#569
Bases de Datos / Re: Dudas de consulta SQL
7 Diciembre 2009, 02:57 AM
Y el mysql_query?
Basicamente, yo no se como hacer ésta consulta.


"SELECT todo de LOCALES y todo de TIPOS FROM TIPOS y LOCALES WHERE calle sea igual a: xxxxx"
Mostrar Datos de los locales que devolvió la consulta, pero con su "tipo de local" correspondiente..


Si me entendes, bien, sino, decime y te hago una super explicacion de unas 95 paginas de los 2 lados, así me entendes :)
#570
Bases de Datos / Re: Dudas de consulta SQL
7 Diciembre 2009, 00:22 AM
No.. yo en PHP no estoy haciendo nada.. Es mas..
Mira esta linea:
echo "El local de nombre: " . $row[] . ", es del tipo: " . $row[] . "y esta en: " . $row[] . "<br>";
Crees que esa linea sería capaz de imprimir algo por pantalla?

NO HICE ABSOLUTAMENTE NADA...

No creo que sea necesario armar semejante complejidad...
Mira.. como voy a mostrar el dato:
"Es un local de COMIDA RAPIDA", si lo que dice en la tabla es: "1"
O sea.. como REEMPLAZO el valor 1, por el valor de TEXTO que le corresponde que esta en la otra tabla... todo eso, en 1 sola consulta..

Porque podria hacer una consulta para traer los locales de direccion: Xxxxxx y luego hago otra consulta para ver como es el "tipo de local" que tiene el ID igual al numero de tipo de local de la tabla LOCALES...

Tendria que traer primero los locales, y luego los tipos.. o sea.. 2 consultas... y no quiero hacer eso..
Como puedo hacer todo en 1 sola consulta? en 1 solo mysql_query