Login php
Les pego primero el código y al final el error que tira la pagina.
INDEX.PHP
<?php
// iniciamos sesiones
session_start ();
// archivos necesarios
require_once 'config.php';
require_once 'conexion.php';
require_once 'esUsuario.php';
// obtengo puntero de conexion con la db
$dbConn = conectar();
// verificamos que no este conectado el usuario
if ( !empty( $_SESSION['usuario'] ) && !empty($_SESSION['password']) ) {
if ( esUsuario( $_SESSION['usuario'], $_SESSION['password'] ) ) {
header( 'Location: lista_trabajos.php' );
die;
}
}
// si se envio el formulario
if ( !empty($_POST['submit']) ) {
// definimos las variables
if ( !empty($_POST['usuario']) ) $usuario = $_POST['usuario'];
if ( !empty($_POST['password']) ) $password = $_POST['password'];
// completamos la variable error si es necesario
if ( empty($usuario) ) $error['usuario'] = 'Es obligatorio completar el nombre de usuario';
if ( empty($password) ) $error['password'] = 'Es obligatorio completar la contraseña';
// si no hay errores registramos al usuario
if ( empty($error) ) {
// verificamos que los datos ingresados corresopndan a un usuario
if ( $arrUsuario = esUsuario($usuario,md5($password),$dbConn) ) {
// definimos las sesiones
$_SESSION['usuario'] = $arrUsuario['usuario'];
$_SESSION['password'] = $arrUsuario['password'];
header('Location: lista_trabajos.php');
die;
} else {
$error['noExiste'] = 'El nombre de usuario o contraseña no coinciden';
}
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Panel de Administración</title>
</head>
<body>
<h1>Inicio de sesión</h1>
<? if (!empty($error)) { ?>
<ul>
<? foreach ($error as $mensaje) { ?>
<li><?= $mensaje ?></li>
<? } ?>
</ul>
<? } ?>
<form action="index.php" method="post">
<p>
<label for="usuario">Nombre de usuario</label><br />
<input name="usuario" type="text" value="<? if ( ! empty($usuario) ) echo $usuario; ?>" />
</p>
<p>
<label for="password">Contraseña</label><br />
<input name="password" type="password" value="<? if ( ! empty($password) ) echo $password; ?>" />
</p>
<p>
<input name="submit" type="submit" value="Ingresar" />
</p>
</form>
</body>
</html>
ESUSUARIO.PHP
<?php
function esUsuario ( $usuario, $password, $conexion ) {
// verifica que esten los dos campos completos.
if ($usuario=='' || $password=='') return false;
// busqueda de los datos de usuarios para loguear.
$query = "SELECT id_usuario, usuario, password FROM lp_usuarios WHERE usuario = '$usuario' ";
$resultado = mysql_query ($query, $conexion);
$row = mysql_fetch_array ($resultado);
$password_from_db = $row ['password'];
unset($query);
// verifica que el pass enviado sea igual al pass de la db.
if ( $password_from_db == $password ) {
return $row;
} else return false;
}
?>
El error que tira cuando se intenta loguear es el siguiente:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/virtual/site35/fst/var/www/html/panel/esUsuario.php on line 11
La linea a la que se refiere es:
$row = mysql_fetch_array ($resultado);
leojp
Creo que no entiendo muy bien tu pregunta, igual te respondo por lo que interpreté.
La función mysql_query() esta dentró de una función llamada "esUsuario". Cuando se llama a esUsuario se le pasa como parámetro los datos de la conexión necesarios para hacer una consulta la la base de datos.
andrewman
Se desconectó mientras editaba ... ¿por qué metes los parámetros de conexión dentro de la función mysql_query()?
andrewman
Pues no sé si existan diferencias entre usar comillas simples o dobles a nivel rendimiento, lo que sí debes entender es cómo usarlas. Por ejemplo, no es lo mismo usar '$var' que "$var", ya que las comillas simples al hacer el análisis ("parsear") no te entregará el valor de dicha variable, sino simplemente $var, pero no en el caso de las comillas dobles, el cual sí lo hace. Podríamos decir que las comillas simples devuelven todo como una simple cadena de texto. Por ello es más común concadenar cadenas de texto y variables.
Por otro lado también te encontrarás con las secuencias de escape (escape character) cuando, por ejemplo, quieres usar comillas dentro de una cadena de texto, usando la barra diagonal invertida en casos como:
$var = "\"Hello\"";
lo cual te entrega "Hello". Casos más comunes son cadenas de texto en inglés donde uses palabras como I'm, don't, they're, etc.leojp
Antes que nada muchas gracias Aleix por responderme :) !!
Probe las dos formas que me envías pero sigue dando el mismo error. Me podrías explicar como es el tema de los "" y ' todavía no comprendo bien cuando va uno o cuando va otro. O talvez algún enlace en donde se explique esto.
Bueno gracias nuevamente.
Usuario desconocido
$query = 'SELECT id_usuario, usuario, password FROM lp_usuarios WHERE usuario = "'.$usuario.' "';
Por cierto, ahí hay un paso innecesario. Puedes hacer la consulta buscando directamente por usuario y contraseña, así:
$query = 'SELECT id_usuario, usuario, password FROM lp_usuarios WHERE usuario = "'.$usuario.' " AND password = "'.$password.'" ';
De esta manera ya no te hace falta el IF del chequeo del password, ya que si no existe la coincidencia de usuario/password en la base de datos no va a mostrar ningún resultado.
Saludos.