Programación Web y Scripting > PHP
Crear Login Y Registro
F_Tanori:
comprueba que no esten vacios
Puedes hacerlo con la funcion empty de php, o comparar si es Null o si esta inicializada isset
--- Código: Text ---if (!empty ($_REQUEST['nombre']) && !empty ($_REQUEST['clave']) ){ $usuario=mysql_fetch_array($reg); if ($usuario[0]==$_REQUEST['nombre'] && $usuario[1]==$_REQUEST['clave']) { } }
Saludos
Krosty:
Yeah quedo ;)
Muchas gracias mira:
--- Código: Text ---<html><body><?php$con=mysql_connect("localhost","USER","PASS");mysql_select_db("prueba",$con);$reg= mysql_query("select nombre,clave from usuarios where nombre='$_REQUEST[nombre]' and clave='$_REQUEST[clave]'",$con);if (!empty ($_REQUEST['nombre']) && !empty ($_REQUEST['clave']) ){$usuario=mysql_fetch_array($reg);if ($usuario[0]==$_REQUEST['nombre'] && $usuario[1]==$_REQUEST['clave']){echo "Sus datos son correctos"; echo "<br />"; echo "En breve sera redirigido al guestbook";} else{echo "sus datos son incorrectos";}}else{echo "Sus campos estan vacios";}?></body></html>
Me quedo una duda sobre la funcion "empty" si el empty va con un "!" adelante quiere decir que SI NO esta vacio, haga tal cosa?
En cambio si pondria "empty" solo diria que si esta vacio haga tal cosa ?
Salu2 gracias
F_Tanori:
--- Cita de: "Krosty" ---Me quedo una duda sobre la funcion "empty" si el empty va con un "!" adelante quiere decir que SI NO esta vacio, haga tal cosa?
En cambio si pondria "empty" solo diria que si esta vacio haga tal cosa ?
Salu2 gracias
--- Fin de la cita ---
Efectivamente ! es el operador de negacion (NOT)
--- Código: Text ---if (!empty ($_REQUEST['nombre'])) { echo "Contiene algo"; }
para se niega la condicion para evitar hacer lo que hacen algunos progrmadores que es "mala practica", el dejar un if "vacio" para utilizar la parte falsa
--- Código: Text ---if (empty ($_REQUEST['nombre'])) { //no hacer nada } else { echo "Contiene algo"; }
(vease "Tabla de verdad del NOT" )
Saludos
venedan:
bueno entre a ver este comentario tarde y me alegro que el creador del post haya corregido su duda solo que quiero acotar algunas correpciones
1) para que hacer esto
if ($usuario[1]==$_REQUEST['clave'] && $usuario[1]==$_REQUEST['nombre'])
{
echo "Sus datos son correctos";
echo "<br />";
echo "En breve sera redirigido al guestbook";
}
es decir para que hacer eso si con esta funcion ((" if($reg) { ")) se esta diciendo si la consulta que se hizo (" where nombre='$_REQUEST[nombre]' and clave='$_REQUEST[clave]' ") genera un registro es porque los datos de usuario y contraseña son correctos y hacer el if ($usuario[1]==$_REQUEST['clave'].....
seria como hacer una rebundancia que no tiene sentido ya que si genera registro obviamente los datos introducidos son correctos
2) para el pana que decia que si no se colocaba ningun dato igualmente entraba pues obvio el ultimo else de tu codigo estas diciendo si el usuario o contraseña no estan en la base de datos lo que agregastes es un comentario es decir como no hay ninguna condicion si no solo un comentario no va a imprimir nada si no una pagina en blanco
if ($reg) {
}
else
{
//echo mysql_error(); #solo para debug
}
y que mas bueno no se porque el pana F_tanori recomienda no comparar el password a traves de SQL ?? es algo que todavia no entiendo porque dice eso
F_Tanori:
Bueno mira
--- Cita de: "venedan" ---1) para que hacer esto
if ($usuario[1]==$_REQUEST['clave'] && $usuario[1]==$_REQUEST['nombre'])
{
echo "Sus datos son correctos";
echo "<br />";
echo "En breve sera redirigido al guestbook";
}
--- Fin de la cita ---
es para saber si el usuario es el indicado yo sugeri usar mysql_num_rows pero esa opcion es valida
Luego "if ($reg) { " no es una funcion solo es una condicion para comprobar que se ejecuto la consulta
y estas equivocado:
Esto
--- Código: Text ---if ($reg)
no es lo mismo que esto
--- Código: Text ---if ($usuario[1]==$_REQUEST['clave'] && $usuario[1]==$_REQUEST['nombre'])
asi que no es ni "rebundancia" :P ni redundancia pues no son intrucciones iguales
Te explico un poco mas
si Krosty hace esto
--- Código: Text --- $reg= mysql_query("select nombre,clave from usuarios where nombre='Ftanori' and clave='1000'",$con);
si la instruccion se procesa correctamente aun cuando el usuario no exista $reg devuelve un 'objeto' lo cual no significa que haya encontrado al usuario indicado me explico?
--- Cita de: "http://www.php.net/manual/es/function.mysql-query.php" ---Valores retornados
Para las sentencias SELECT, SHOW, DESCRIBE o EXPLAIN, mysql_query() regresa un resource en caso exitoso, y FALSE en error.
--- Fin de la cita ---
la razon de validar if ($reg) es saber que es un resource valido para poder usado con otras funciones como por ejemplo mysql_fetch_array($reg); pues espera es un resource como parametro
en caso de que sea falso puedes ver el error por el cual no se proceso la consulta ( la linea comentada, esta comentada porque tampoco es recomendable mostrar los errores directos como los devuelve mysql (pues indica nombres de campos, tablas, tipos de datos,bd etc informacion que puede ser usada por intrusos)
--- Código: Text --- if ($reg) {}else{//echo mysql_error(); #solo para debug}
conclucion que devuelva un resource no significa que haya encontrado el usuario :P
--- Cita de: "venedan" ---y que mas bueno no se porque el pana F_tanori recomienda no comparar el password a traves de SQL ?? es algo que todavia no entiendo porque dice eso
--- Fin de la cita ---
los password regularmente distingen entre mayusculas y minusculas (es un atributo digamos implicito ) SQL no y ese puede ser un atributo de seguridad
Seria mas facil adivinar
--- Código: Text ---nombre=FTanoriclave=TANORI
que algo como
--- Código: Text ---nombre=FTanoriclave=TaNoRi
en un ataque diccionario o por fuerza bruta incluso por ingenieria social....
y bueno ya que estamos en esto solo como comentario utilizar $_REQUEST puede resultar inseguro (segun el caso) pues no tiene distincion con los metods de envio POST ($_POST) y GET ($_GET)
entonces te pueden enviar datos por GETy alterarte variables que tal vez a traves de un formulario este restringido
Quizás quiso decir: correcciones :P
Saludos
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa