No lo he probado a fondo, pero cambiando un par de cosas funciona bien.
Aún así, la forma más sencilla de descartar, es probar primero con variables locales
Código PHP:
$pass = sha1('mypass');
Si después va todo correcto, empiezas a probar con las variables que provienen de url's o formularios.
Te he dejado algunas notas.
Lo he probado sin las funciones tuyas, así que al cambiarlo, para dejarlo como si lo ejecutases en tu máquina, igual se fue algo, pero debería salirte el error en el navegador.
Código PHP:
error_reporting(E_ALL);
ini_set("display_errors", 1); // Estas dos líneas activan los errores en el navegador.
session_start();
include("modulo.php"); // MODULO.php es un archivo que contiene la funcion limpiar_sql para evitar ataques de SQL inyection, no influlle para nada en las variables finales (en este caso de $nick)
$pass = sha1($_POST['passlogin']);
$nick = limpiar_sql($_POST["nicklogin"]);
if( isset($nick) && isset($pass) ) //comprueba si están definidas
{
$link = mysqli_connect('localhost', '********', '*******', '********');
if( !$link )
{
die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
echo "imposible conectar con la base de datos";
exit;
}
else
{
$query = "SELECT nick, contrasena FROM Usuarios WHERE nick = '$nick' AND contrasena = '$pass'";
$result = mysqli_query($link, $query); //<-- Falta el link en la query
if( !$result )
{
echo "nombre o contraseña erroneos";
exit;
}
}
if( mysqli_num_rows($result) == 0 ) // "<=" Menor o igual que 0, es 0, con == es suficiente.
{
echo "nombre y contraseña no existen";
exit;
}
if( $result )
{
$_SESSION["valid_user"] = true; //por ejemplo
$_SESSION["name"] = $nick;
}
echo 'Está conectado el usuario ' . ($_SESSION["name"])? $_SESSION["name"] : 'Guest' . '? ' . ($_SESSION["valid_user"])? 'Si' : 'NO';
}