Hacer un login php/mysql

helicon

¿Cómo se supone que debo hacerlo? Si vengo a preguntar aquí es porque he seguido varios tutoriales tanto en español como en inglés y ninguno me ha funcionado :\

BLZKZ

yo lo hice pensando por mi cuenta xD, pero este -> http://www.desarrolloweb.com/manuales/37/ te sirve seguro, porque lo lei por encima despues de hacer mi sistema para comprobar si la habia cagado o lo podía hacer más seguro :P

helicon

#2 ya bueno, es que yo no sé php xdddddddddddd.

voy a probar con eso a ver que tal xd, muchas gracias.

BLZKZ

pues en esa web que te he puesto tienes muchisimos manuales/tutos de php,sql, asp, html, css, js/ajax...

De todas formas acuerdate de encriptar las contraseñas de las bbdd aunque sea con un simple md5 xD

LR

como ya te ha puesto #2 ahi tienes lo basico para hacerte un sistema de login. Ya luego lo puedes complicar/mejorar todo lo que quieras.

De todas formas lo mas basico es:

/// login ///

session_start():

$sql = mysql_query ("select * from usuarios where nombre like ' ".$nombre." ' and pass like ' ".$pass." ' ");

$esta = mysql_num_rows($sql);

if($esta){

$_SESSION['estado'] = "logueado";

}else{

echo "usuario o contraseña no validos";

}

despues de eso solo tendrias que comprobar que este logueado, comprobando que existe la variable de sesion "estado" y que el valor es "logueado"

/// queremos_que_logueado.php ///

session_start();

if(!empty($SESSION['estado']) && ($SESSION['estado'] == "logueado")){

echo "estas logueado";

}else{

echo "logueate";

}

NeB1

#5 un pequeño inciso, yo no pondría un 'like', si no un '=', ya que el usuario y el password, o és, o no és....

helicon

joder, el tutorial ese de php que me has dado, blzkz es lo más chano del mundo. no permite registro y básicamente lo que hace es permitir el login de UN usuario.

:|

eXtreM3

El concepto que tienes que tener claro es:

  1. Introduces usuario y su contraseña.
  2. Buscas que el usuario exista en la bd.
    3.1. Si existe -> comparas la contraseña que ha escrito con la asociada a dicho usuario.
    3.2. Si no existe -> error de datos.
    4.1. Si las contraseñas son iguales -> se loguea (creas variable session)
    4.2. Si son distintas -> error de datos.

Olvídate de momento de encriptar la contraseña, ya tendrás tiempo de eso.

Encriptar con simple md5

Suerte!

helicon

Si tengo claro cómo tiene que ir, el caso es que yo no puedo hacerlo por mi cuenta. Quiero decir, yo no puedo escribir el código porque NO SÉ php.

Voy a ser más concreto:
Todo esto va para el proyecto final de mi ciclo de grado medio (esi), para el cual necesito entregar una página web con base de datos integrada.
mi página en concreto es una tienda de guitarras; y el problema es que no soy ni capaz de hacer el login, ¿por qué?
porque nos han enseñado html, css y mysql, pero de php no nos han enseñado nada más que a hacer un triste echo.
entonces, básicamente lo que necesito es aprender a integrar cualquier script de por ahí y meterlo, pero todos me dan fallo y por mucho que los modifico investigando y tal no consigo hacer funcionar NADA.

pd. en caso de que no consiga nada para el día de entrega no pasa nada porque nos quejaremos y tal, ya que no nos pueden pedir algo que no nos han dado y blablabla, pero antes de investigar como liarla y eso me gsutaría intentar aprender por mi cuenta o algo como hacerlo :\

LR

#9 eres de mi instituto? xDD

Para que te hagas una idea, a nosotros de php lo que nos enseñaron fue:

con esto os conectais a la bd
con esto os recuperais datos
con esto sabeis si tiene datos

ademas de eso, nos enseñaron como se hace un while y que los checkbox tienen "2 estados"

"1 y 0"

Usabamos una version mas antigua de wamp porque con la nueva version, para saber si un checkbox estaba pulsado habia que hacer esto:

if(isset($checkbox))

mientras que antes teniamos que hacer esto:

if($checkbox == 1)

No, no nos enseñaron que en php existian los includes, las funciones, que las conexiones habian que cerrarlas y demas cosas basicas xD

Y eso fue todo lo que me enseñaron de php

Con eso te puedes hacer una idea del nivel xDD

A raiz de ahi, todo es mirar por tu cuenta, yo por lo pronto, ya he hecho varias cosas (el proyecto mio), sobre todo en las practicas, que van desde un simple instalador en php, hasta wrappers o juegos completamente en php.

El proyecto mio es una web para una inmobiliaria, muchas consultas, un sistema de login y un panel de administracion para poder dar de alta propiedades, clientes, usuarios, zonas (pais y ciudad) y una pequeña gestion de bd (importar y exportar).

Si yo he aprendido a hacer esas cosas, cualquiera puede xD

LR

#6 cierto, se me fue la cabeza xD

Un ultimo apunte #1, ya que tienes conocimientos mas o menos amplios de css + mysql + html, empieza a buscar por... aqui[illasaron.com], por aqui[desarrolloweb.com] o aqui[forosdelweb.com].

Te aconsejo que te hagas muy amigo del manual de php y que busques info sobre todo en ingles (ya que normalmente hay bastante mas que en español)

BLZKZ

por cierto LR si usas las dobles comillas para "crear" una cadena, dentro puedes usar directamente las variables. Lo digo por tu sentencia en el query a la bbdd que cuando haces value='".$variable."' puedes poner value='$variable' y debería funcionar. Es la característica que diferencia las " de las ' , ademas de que las dobles son mas lentas de renderizar.

LR

siempre se aprende algo nuevo #12 :P

Sabia que funcionaban sin tener que poner las comillas, pero no sabia si era correcto o no.

Entonces... esto funcionaria?

$sql = mysql_query("select * from usuarios where usuario = '.strtoupper($variable).' and pass = '$pass');

BLZKZ

Con la llamada a la funcion (strtoupper) no se si funciona pero cuando pones directamente lo que has puesto en la 2 condicion del where (pass = '$pass') si que funciona. Para comprobarlo guarda la cadena de la consulta en una varible y haz un echo de la variable, si la consulta te sale bien funcionara xD

2 meses después
U

en 3 meses aprendí CSS3 y en 4 meses php+mysql : Si yo en 7 meses soy capaz de hacer una web con panel de control multiusuario con tipos de cuenta y x asi decir una inmobiliaria con todo lo que conlleva , cualquiera puede !

NeB1

#12 pero metiendo una variable dentro de una cadena el tiempo de ejecución aumenta mogollón.

es decir :

echo " me llamo $usuario";

es mucho más lento que

echo "me llamo ".$usuario;

erdanblo

#15 Y si con 10 meses de experiencias te vienes aires de superioridad y prepotencia, me gustaría que publicases la url de esa web, para ver lo que iba a durar si un mr. bean en la portada (y seguro que no a través de xss)

erdanblo

#16 Puesto a optimizar tu solución también esta mal (de hecho creo que tardaría lo mismo), lo más rápido sería:

echo 'me llamo '.$usuario;

BLZKZ

#18 +1

La única razón para usar comillas dobles es la de meter variables, porque son mas lentas que las simples de ahi que dijera que si usaba dobles metiera las variables dentro

NeB1

No encuentro ahora el documento que escribio uno de los de zend donde explicaba que lo de las comillas simples y dobles desde PHP5 ya no existe (en realidad si que existe, pero la diferencia era mínima), pero que el auténtico problema era gastar una variable dentro de la cadena por el tema de conversión de tipos. Sigo buscando.

NeB1

Como no lo encontraba he hecho un pequeño benchmark yo mismo:

	$time = microtime(true);
	for($i = 0; $i < 100000; $i++){
		echo 'hola esto es una variable: '.$i;
	}
	$time1 = microtime(true) - $time;	
	$time = microtime(true);
	for($i = 0; $i < 100000; $i++){
		echo "hola esto es una variable: ".$i;
	}
	$time2 = microtime(true) - $time;
	$time = microtime(true);
	for($i = 0; $i < 100000; $i++){
		echo "hola esto es una variable: $i";
	}
	$time3 = microtime(true) - $time;
	

echo "<br /><br /><br /><br />
/* Y el tiempo es de:
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /<br /><br />
 <strong>Comilla simple con variable concatenada: </strong>".$time1." <br /><br />
 <strong>Comilla doble con variable concatenada: </strong>".$time2." <br /><br />
 <strong>Comilla doble con variable dentro : </strong>".$time3." <br /><br />
 <small>
	<strong>Versi&oacute;n PHP:</strong> 5.2.6-1+lenny3
</small>
";

los resultados medios son estos:

/* Y el tiempo es de: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /

Comilla simple con variable concatenada: 2.18828988075

Comilla doble con variable concatenada: 2.80092000961

Comilla doble con variable dentro : 3.19795203209

Versión PHP: 5.2.6-1+lenny3

Se aprecia una diferencia aunque tampoco excesiva.

BLZKZ

Comilla simple con variable concatenada: 2.18828988075

Comilla doble con variable concatenada: 2.80092000961

Comilla doble con variable dentro : 3.19795203209

Con eso se demuestra que hay menos perdida de comillas dobles con variable dentro con respecto a variable concatenada a usar compuestas con concatenada a simple.

Asi que usar comillas dobles para no usar variables dentro es una perdida de recursos sin sentido, y llegamos al punto de que o usas las dobles para lo que dije o no las usas xD

PD: en #20 estabas muy lejos de lo que te has demostrado a ti mismo en #21 :P

NeB1

#22 ya bueno, también se demuestra que se pierde rendimiento al meter la variable dentro de las comillas que al ponerla fuera :P

BLZKZ

eso está claro xD aqui nadie dijo lo contrario :P

NeB1

sí, #18 decía que creía que tardaría lo mismo :P:P:P.

Pero siiiiiii, parece que se nota más la diferencia entre comillas simples y dobles, pese a todo xD

BLZKZ

habia un articulo genial que lei hace no mucho (todo en ingles) muy interesante sobre como optimizar tu codigo de cara a que tardara menos tiempo en ejecutarse, si lo encuentro lo pongo, en el que entre otras cosas comentaba el uso de las comillas xD

Usuarios habituales