necesito ayuda con login con php y mysql

frigorificus

Hola pues eso, que no se xk no m funca, nom llega a entrar en el while, le he estado dando vultas y no encuentro el error, x eso recurro a vosotros, gracias de antemano
<?php
session_start();

//Obtener variables

$email = $POST['email'];
$contrasena = $
POST['contrasena'];

//Creamos conexion

$conexion = mysql_connect("localhost","julio","julio");

if(!$conexion){


die ("No se ha podido conectar con la Base de Datos: ".mysql_error());

}

mysql_select_db("julio",$conexion);

//Consulta

$consulta = "SELECT * FROM usuario WHERE Email ='".$email."';";

//Lanzar la consulta

$resultado = mysql_query($consulta,$conexion);

//Repasar los resultados

while($fila = mysql_fetch_array($resultado)){
$emailbasedatos = $fila['Email'];
$contrasenabasedatos = $fila['Contrasena'];
if($email == $emailbasedatos & $contrasena == $contrasenabasedatos){
//Si es positivo vuelvo a index con login=yes y asigno variables
$SESSION['email'] = $email;
$
SESSION['contrasena'] = $contrasena;
$SESSION['login'] = "yes";
echo'
<html>
<head>
<meta http-equiv="REFRESH" content="0;url=../index.php">
</head>
</html>
';
}else{
//Si es negativo vuelvo a index con login=no
$
SESSION['login'] = "no";
echo'
<html>
<head>
<meta http-equiv="REFRESH" content="0;url=../index.php">
</head>
</html>
';

		
}

}
//En cualquier otro caso
$_SESSION['login'] = "no";
echo'
<html>
<head>
<meta http-equiv="REFRESH" content="0;url=../index.php">
</head>
</html>
';

//Cerramos base de datos
mysql_close($conexion);
?>

B

1) Usa el tag code para postear código
2) Debugea el código
3) A simple vista

if($email == $emailbasedatos & $contrasena == $contrasenabasedatos)

está mal , el operador lógico es &&

frigorificus

gracias, pero m sigue sin entrar en el while, me voy a buscar un programa para debuguear el codigo, alguna sugerencia, sk he estado usando el dreamweaver y con ese no se puede.
PD:ya se k es una mierda

B

No hace falta nada adicional, dumpea las variables hasta que veas donde falla.

http://es2.php.net/manual/es/function.var-dump.php

Poisonous

Si no te entra en el while es pq la condición lógica no se satisface o pq alguna instrucción anterior ha terminado con el flujo de ejecución.
Mis sospechosos:

die ("No se ha podido conectar con la Base de Datos: ".mysql_error());
while($fila = mysql_fetch_array($resultado))

Quizás tengas la consulta mal hecha, y por eso no entra al while. Revisa los nombres de las tablas y las columnas. Así como la sintaxis

Merkury

Aparte estas escapando mal

$consulta = "SELECT * FROM usuario WHERE Email ='".$email."';";

Lo correcto sería:

Los slash de escape en realidad son hacia el otro lado, pero no me deja mostrarlos.

Y aparte te sobra el primer punto y coma.

1 respuesta
Tunnecino

#6 si haces = "'.$var.'" también funciona.

Te todas formas, el código de #1 está super warro.

# Query
$query = mysql_query('SELECT * FROM usuario WHERE LOWER(Email) = "'.strtolower($email).'");
# Check resultados
while($fetch = mysql_fetch_array($query)) {
  $emaildb = $fetch['Email'];
  $passdb = $fetch['Contrasena'];
  if(($email == $emaildb) && ($contrasena == $passdb)) {
    $_SESSION['email'] = $email;
    $_SESSION['contrasena'] = $contrasena;
    $_SESSION['login'] = "yes";
    header('Location: ../index.php');
  }else{
    $_SESSION['login'] = "no";
    header('Location: ../index.php');
  }
}

Por cierto, tu código no vale un duro, así de claro. Es 0 seguro... revisatelo a fondo.

1 respuesta
Merkury

#7 Yo escapo siempre porque SE que así funciona bien.

De todas maneras el codigo de #1 esta muy wuarro pero el tuyo #7 tiene cosas que yo no haría en la vida.. como meter la contraseña en $_SESSION

2 respuestas
Tunnecino

#8 Solo he adaptado su código... si te fijas solo he arreglado el while y el query.

MrTurbo

#1 Tienes varios fallos, he editado tu código, a ver si ahora te funciona.

<?php
	session_start();

//Obtener variables
$email = $_POST['email'];
$contrasena = $_POST['contrasena'];

//Creamos conexion

$conexion = mysql_connect("localhost","julio","julio");

if(!$conexion){
	die ("No se ha podido conectar con la Base de Datos: ".mysql_error());
}

mysql_select_db("julio", $conexion);

//Consulta
$consulta = "SELECT * FROM usuario WHERE Email LIKE '$email'";

//Lanzar la consulta
$resultado = mysql_query($consulta,$conexion);

//Repasar los resultados
while($fila = mysql_fetch_array($resultado)){
	$emailbasedatos = $fila['Email'];
	$contrasenabasedatos = $fila['Contrasena'];
	if($email == $emailbasedatos && $contrasena == $contrasenabasedatos){
		//Si es positivo vuelvo a index con login=yes y asigno variables 
		$_SESSION['email'] = $email;
		$_SESSION['contrasena'] = $contrasena;
		$_SESSION['login'] = "yes";
		echo'
			<html>
			<head>
			<meta http-equiv="REFRESH" content="0;url=../index.php">
			</head>
			</html>
		';
	} else {
		//Si es negativo vuelvo a index con login=no
		$_SESSION['login'] = "no";
		echo'
			<html>
			<head>
			<meta http-equiv="REFRESH" content="0;url=../index.php">
			</head>
			</html>
		';
	}
}
//En cualquier otro caso
$_SESSION['login'] = "no";
echo'
	<html>
	<head>
	<meta http-equiv="REFRESH" content="0;url=../index.php">
	</head>
	</html>
';

//Cerramos base de datos
mysql_close($conexion);
?>
frigorificus

Gracias a todos, se k mi codigo será guarro, pero estoy empezando, poquito a poco, me ha servido mucho vuestra ayuda

frigorificus

#8 aunque finalmente no las paso, ya que en las siguientes paginas no las necesito, ¿xk no pasarias la contraseña como una variable de sesión? yo tenia entendido que las variables de sesion eran seguras, gracias por tu respuesta y ten compasión de un novato, ;)

1 respuesta
Merkury

#12 Porque realmente para que quieres pasar la contraseña como variable de sesión si la comprobación la haces en server side que es donde hay que hacerla? Que sean seguras no quiere decir que sean perfectas y ademas que no la necesitas realmente, porque una vez que has hecho la comprobación de la contraseña en el lado del servidor sabes que en teoria esta bien y ya generas la sesión y bastara con validar la cookie.

Tunnecino

Y además, la contraseña se codifica siempre.

Martita-

Aprovecho este post para poner mi codigo mysql que no inserta nada, y el echo devuelve 1, no devuelve nada mas, fijo que es alguna tonteria.

<form action="index.php?pag=conectarsemysql" method="post">
Nombre<br />
<input type="text" name="nombre"><br />
Primer Apellido<br />
<input type="text" name="priapellido"><br />
Segundo Apeliido<br />
<input type="text" name="segapellido"><br />
<input type="Submit" name="Enviar"><br />
</form>
$nombre = $_POST['nombre'];
$priapellido = $_POST['priapellido'];
$segapellido = $_POST['segapellido'];

$query = "insert into alumnos (nombre,priapellido,segapellido) values ('$nombre','$priapellido','$segapellido')";

mysql_query($query) or die(mysql_error());
$result = mysql_query($query);

echo $result; 
2 respuestas
Caotico

#15 El fallo creo que está en :

$query = "insert into alumnos (nombre,priapellido,segapellido) values ('$nombre','$priapellido','$segapellido')";

Ponlo así:

$query = "insert into alumnos (nombre,priapellido,segapellido) values ('".$nombre."','".$priapellido."','".$segapellido."')";
1 respuesta
MrTurbo

#16

Es lo mismo escribir las variables dentro de comillas dobles (" '$variable '") que hacerlo concatenando variables " ('". $variable ."')". En PHP se permiten las dos formas, yo siempre lo hago de la primera forma, queda el código mucho más limpio y legible.

Saludos

EnZo

#15 Si te devuelve true, en principio la consulta sql se ha insertado bien. Pero no entiendo porqué la ejecutas dos veces la misma consulta.
1º mysql_query($query) or die(mysql_error());
2º $result = mysql_query($query);
La misma consulta...

Prueba:

$result = mysql_query($query);
if (!$result)
    die('Error: ' . mysql_error());
1 respuesta
Martita-

Gracias, al final con las cosas que me habeis dicho lo he solucionado, gracias.

DarkSoldier

me estoy dando cuenta que la gente se lia mucho con las comillas simples y dobles xD

sobre el primer post... cuantos resultados sacas buscando por email en una base de datos?? debería ser único por lo que un bucle sobra,

sobre el segundo caso, ya lo ha dicho #18, mysql_error() es tu amigo

1 respuesta
frigorificus

#20 llevas razón, gracias por tu ayuda, ya solucione los problemas y con esto podre hacer mi codigo mas limpio, mil gracias

Usuarios habituales