Foros del Web » Programando para Internet » PHP »

sera verdad que es mejor usar esto???

Estas en el tema de sera verdad que es mejor usar esto??? en el foro de PHP en Foros del Web. Hola estimados en afan se optimizar el codigo de mis aplicaciones me he orientado a leer en la web sobre este tema y me han ...
  #1 (permalink)  
Antiguo 11/11/2007, 06:27
 
Fecha de Ingreso: abril-2001
Mensajes: 293
Antigüedad: 23 años
Puntos: 0
sera verdad que es mejor usar esto???

Hola estimados en afan se optimizar el codigo de mis aplicaciones me he orientado a leer en la web sobre este tema y me han surgido los siguientes cambios de optimizacion:


usar print en vez de echo -> segun lei print devuelve un warning y echo un vacio si no existe la variable, ahora bien sabiendo que la cadena es una constante cual seria mejor usar???

ej: echo 'Esto es una prueba';
print 'Esto es una prueba';


lo otro fue utilizar el operador === en vez de ==, la verdad que el 1ero chequea que la variable sea igual ademas del tipo de dato, y recomendaban usar ===, la verdad no estoy muy seguro de eso ya que si yo se que esto comparando numeros para que utilizar el comparar tipos de datos??


lo otro que me llamo la atencion es lo siguiente:

$id = $_GET['id'];

$query1='select ....... where id_tabla1='.$id;
$query2='select ....... where id_tabla1='.$id;


segun lo leido esto seria menos optimo que esto:

$query1='select ....... where id_tabla1='.$_GET['id'];
$query2='select ....... where id_tabla1='.$_GET['id'];


la verdad para mi el 1ero es mas optimo ya que la funcion $_get la estoy llamando solo una vez.. que dicen ustedes??


saludos y gracias
  #2 (permalink)  
Antiguo 11/11/2007, 08:59
 
Fecha de Ingreso: noviembre-2007
Mensajes: 157
Antigüedad: 16 años, 5 meses
Puntos: 3
Re: sera verdad que es mejor usar esto???

Todo eso es falso. En cada situación tienes que usar lo que necesitas para ella.

Por ejemplo, usar === indiscriminadamente no es mejor que usar ==. Si usas === cuando tienes que usar ==, tendrás un código que no se comportará como esperas.

Respecto a $_GET['id'] o $id, pues es más bien indiferente. Con $id quizás ganas algo de legibilidad de código... va a gustos.

Y usa echo si no necesitas un warning... que es lo más normal.

Lo que sí tienes ahí es un problema de seguridad. Para ir bien, tendrías que escapar los datos $_GET,$_POST,$_COOKIE con mysql_real_escape_string antes de usarlos para realizar una consulta a la base de datos.
  #3 (permalink)  
Antiguo 12/11/2007, 06:35
 
Fecha de Ingreso: abril-2001
Mensajes: 293
Antigüedad: 23 años
Puntos: 0
Re: sera verdad que es mejor usar esto???

ummm podrias explicarme mejor el tema de seguridad no me ha quedado muy claro??


saludos
  #4 (permalink)  
Antiguo 12/11/2007, 06:50
 
Fecha de Ingreso: noviembre-2007
Mensajes: 157
Antigüedad: 16 años, 5 meses
Puntos: 3
Re: sera verdad que es mejor usar esto???

http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL
  #5 (permalink)  
Antiguo 12/11/2007, 09:44
 
Fecha de Ingreso: diciembre-2003
Mensajes: 1.583
Antigüedad: 20 años, 4 meses
Puntos: 13
Re: sera verdad que es mejor usar esto???

Cita:
usar print en vez de echo -> segun lei print devuelve un warning y echo un vacio si no existe la variable, ahora bien sabiendo que la cadena es una constante cual seria mejor usar???
echo es más rápido que print justamente por el hecho que el primero no devuelve nada. Si sabes que la cadena a imprimir siempre va a existir, yo te recomendaría usar echo.

Cita:
lo otro fue utilizar el operador === en vez de ==, la verdad que el 1ero chequea que la variable sea igual ademas del tipo de dato, y recomendaban usar ===, la verdad no estoy muy seguro de eso ya que si yo se que esto comparando numeros para que utilizar el comparar tipos de datos??
El operador == necesita hacer un paso más que el operador ===, puesto que el primero necesita convertir ambos datos al mismo tipo para poder hacer la comparación. Pero como te decía Lanselot, la que debas a usar va a depender de tus necesidades; cuando usar ===:

A) Cuando necesites comprobar que ambos datos sean del mismo tipo.
B) Cuando sabes que ambos datos siempre van a ser del mismo tipo.

Cita:
la verdad para mi el 1ero es mas optimo ya que la funcion $_get la estoy llamando solo una vez.. que dicen ustedes??
$_GET no es una función sino un array, así que aunque lo llames una o il veces siempre estará ocupando el mismo espacio en memoria (salvo que lo modifiques obviamente). Además, si necesitas llamar 100 veces a $_GET['id'], cuando lo pases a $id igual tendrás que llamar 100 veces a $id.

Coincido en que es una cuestión de gustos y legibilidad, aunque también tienes que considerar que al pasarlo a la variable $id estarás ocupando más espacio en memoria (lo que ocupa $id y lo que ocupa $_GET['id']).
__________________
El conocimiento es libre: Movimiento por la Devolución
  #6 (permalink)  
Antiguo 12/11/2007, 11:40
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
Re: sera verdad que es mejor usar esto???

coincido con los compañeros de que debes de utilizar lo que necesites solo quiero completar lo que mencionan:
para el caso de igual(==) e identico(===)
ejemplo:
digamos que tu quieres saber si $var es verdadero(true) pero $var puede tener tambien el valor de 1
Código PHP:
#igual
if($var==true)//en este caso los dos son verdaderos tanto con TRUE como con 1
#identico
if($var===true)//en este caso solo con true es verdadero y con 1 es falso 
la principal causa de usar $_GET['var'], $_POST['var'] o $_REQUEST['var'] en ves de $var, es por seguridad, y es que, a partir de php5 la directiva register_globals esta desactivada es decir esta en "off", que pasaba cuando estaba en "on", pues simplemente bastaba con poner en la barra de direciones el nombre de la variable y el valor y funcionaba sin respetar si tu formulario lo habias enviado por post.

espero y se entienda, ya que no soy muy bueno para las explicaciones

saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.

Última edición por eits; 12/11/2007 a las 12:22
  #7 (permalink)  
Antiguo 12/11/2007, 12:09
 
Fecha de Ingreso: diciembre-2003
Mensajes: 1.583
Antigüedad: 20 años, 4 meses
Puntos: 13
Re: sera verdad que es mejor usar esto???

Cita:
la principal causa de usar $_GET['var'], $_POST['var'] o $_REQUEST['var'] en ves de $var, es por seguridad, y es que, a partir de php5 la directiva register_globlas esta desactivada es decir esta en "off", que pasaba cuando estaba en "on", pues simplemente bastaba con poner en la barra de direciones el nombre de la variable y el valor y funcionaba sin respetar si tu formulario lo habias enviado por post.
Eso es cierto, pero en este caso lo que el amigo planteaba era si resulta más conveniente usar directamente $_GET['var'] o primero pasarlo a $var, y luego utilizar $var.
__________________
El conocimiento es libre: Movimiento por la Devolución
  #8 (permalink)  
Antiguo 12/11/2007, 12:14
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Re: sera verdad que es mejor usar esto???

Cita:
Iniciado por frijolerou
Eso es cierto, pero en este caso lo que el amigo planteaba era si resulta más conveniente usar directamente $_GET['var'] o primero pasarlo a $var, y luego utilizar $var.
Yo te recomiendo pasarlo a $var por el mismo tema señalado de la seguridad.

Es muy facil poner la injeccion como ya debes saber. Y para eso se usa la variable para poder convertir eso a una cadena valida en mysql.

Si bien seria mas rapido poner $_GET['var'] directamente en tu sql, no es lo mas conveniente por lo señalado.

Suerte
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #9 (permalink)  
Antiguo 12/11/2007, 12:31
 
Fecha de Ingreso: diciembre-2003
Mensajes: 1.583
Antigüedad: 20 años, 4 meses
Puntos: 13
Re: sera verdad que es mejor usar esto???

Cita:
la principal causa de usar $_GET['var'], $_POST['var'] o $_REQUEST['var'] en ves de $var, es por seguridad, y es que, a partir de php5 la directiva register_globlas esta desactivada es decir esta en "off", que pasaba cuando estaba en "on", pues simplemente bastaba con poner en la barra de direciones el nombre de la variable y el valor y funcionaba sin respetar si tu formulario lo habias enviado por post.
Eso es cierto, pero en este caso lo que el amigo planteaba era si resulta más conveniente usar directamente $_GET['var'] o primero pasarlo a $var, y luego utilizar $var.
__________________
El conocimiento es libre: Movimiento por la Devolución
  #10 (permalink)  
Antiguo 12/11/2007, 12:44
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
Re: sera verdad que es mejor usar esto???

Cita:
Iniciado por frijolerou Ver Mensaje
Eso es cierto, pero en este caso lo que el amigo planteaba era si resulta más conveniente usar directamente $_GET['var'] o primero pasarlo a $var, y luego utilizar $var.
cierto, tienes toda la razón, pero creo que no esta de mas saberlo , y coincido contigo, para que duplicar una variable, pero eso es cuestion de gustos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #11 (permalink)  
Antiguo 12/11/2007, 14:12
 
Fecha de Ingreso: diciembre-2003
Mensajes: 1.583
Antigüedad: 20 años, 4 meses
Puntos: 13
Re: sera verdad que es mejor usar esto???

Cita:
Es muy facil poner la injeccion como ya debes saber. Y para eso se usa la variable para poder convertir eso a una cadena valida en mysql.

Si bien seria mas rapido poner $_GET['var'] directamente en tu sql, no es lo mas conveniente por lo señalado.
Esa conversión también la puedes hacer directamente sobre el array $_GET. Supongamos que el servidor tiene desactivadas las "magic quotes" y necesitas aplicar la función addslashes() a los valores enviados:

Código PHP:
if(!get_magic_quotes_gpc()){
    foreach(
$_GET as $key => $value){
        
$_GET[$key] = addslashes($value);
    }

Y luego continuas usando directamente $_GET['algo'] en la sentencia SQL
__________________
El conocimiento es libre: Movimiento por la Devolución
  #12 (permalink)  
Antiguo 12/11/2007, 15:11
 
Fecha de Ingreso: abril-2001
Mensajes: 293
Antigüedad: 23 años
Puntos: 0
Re: sera verdad que es mejor usar esto???

Gracias Amigos me ha quedado bastante claro.


saludos y gracias por sus respuestas
  #13 (permalink)  
Antiguo 12/11/2007, 18:28
 
Fecha de Ingreso: noviembre-2007
Mensajes: 157
Antigüedad: 16 años, 5 meses
Puntos: 3
Re: sera verdad que es mejor usar esto???

Cita:
Iniciado por frijolerou Ver Mensaje
Esa conversión también la puedes hacer directamente sobre el array $_GET. Supongamos que el servidor tiene desactivadas las "magic quotes" y necesitas aplicar la función addslashes() a los valores enviados:

Código PHP:
if(!get_magic_quotes_gpc()){
    foreach(
$_GET as $key => $value){
        
$_GET[$key] = addslashes($value);
    }

Y luego continuas usando directamente $_GET['algo'] en la sentencia SQL
Permíteme decir que la explicación está incompleta, y además es un mal consejo.
Primeramente, las magic quotes solo sirven si se usan comillas en la consulta sql.

Código PHP:
"select * from mitabla where id=".$_GET['id']; //sigue siendo vulnerable.

//Tendría que usarse así:
'select * from mitabla where id="'.$_GET['id'].'"'
Y aun así es insuficiente, pues hay métodos conocidos que posibilitan inyectar sql a pesar de tener comillas escapadas. SIEMPRE debe usarse mysql_real_escape_string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:07.