Cuando escribas código, aunque parezca más tedioso, debes controlar totalmente el flujo de ese código, evaluando todas las posibilidades y enviando en cualquier caso un mensaje o algo que informe al usuario de lo ocurrido.
Tu código, por decirlo de alguna forma, es mudo es muchos puntos. Hay por lo menos 4 ó 5 casos en los que el código podría fallar y no haces nada al respecto.
Te aconsejo también que evites el uso de ñ
, de acentos, de caracteres especiales, en los nombres de tablas o columnas de la base de datos, así como en el nombre de variables PHP.
Te dejo un ejemplo de código controlado, donde sabrás siempre lo que ha ocurrido para actuar en consecuencia.
En el código indico también la forma de establecer un charset adecuado a la conexión. Deberías también establecer un charset al documento actual PHP/HTML.
<?php
session_start();
$usuario=!empty ($_POST['email']) ? $_POST['email'] : NULL;
$contraseña=!empty ($_POST['contraseña']) ? $_POST['contraseña'] : NULL;
if ( $usuario && $contraseña ) {
if ( $conexion=mysqli_connect("localhost","root","","datos_usuario") ) {
#Establecemos el charset para evitar errores
mysqli_set_charset($conexion, "utf8");
$consulta="SELECT * FROM datos WHERE email='$usuario' and contraseña='$contraseña'";
if ( $resultado=mysqli_query($conexion, $consulta) ) {
$filas=mysqli_num_rows($resultado);
mysqli_free_result($resultado);
mysqli_close($conexion);
if ( $filas > 0 ) {
header("location:index.html");
}else{
echo "error en la autentificación";
}
} else {
echo "Error en la consulta: ". mysqli_error($conexion);
}
} else {
echo "Conexión inválida";
}
} else {
echo "No se postearon los datos";
}
?>
Debes indicar siempre un charset adecuado en tu documento, que suele ser UTF-8.
Puedes hacerlo en la cabecera HTML del documento.
HTML
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
O puedes hacerlo desde PHP, al inicio del script:
PHP
mb_internal_encoding("UTF-8");
O bien:
ini_set("default_charset", "UTF-8");
Para más detalles sobre esto, puedes consultar la respuesta a la pregunta: ¿Por que el Carácter inspector (�) aparece en algunos datos obtenidos de la Base de Datos?
Nota sobre la seguridad
Tu forma de pasar la consulta es insegura, podrías ser víctimas de ataques de Inyección SQL, un grave riesgo
que afecta no solamente a la base de datos, sino que podría causar
daños en el sistema. Cuando sea posible lee sobre el tema y blinda el
código usando consultas preparadas.