Problema con sistema de login de usuarios

Hola!

Bueno, estaba haciendo un sistema de registro y el problema es que al loguearme me da error, aquí tenéis los códigos:

registro.html (No da error)
<html> 
<head> 
<title>Registo | Doodleo</title> 
<link rel="stylesheet" href="/estilos.css" type="text/css" media="all"> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head> 
<script type="text/javascript"> 
function setFocus(aField) {
document.forms[0][aField].focus();
}
 
function isAnEmailAddress(aTextField) {
 
if (document.forms[0][aTextField].value.length<5) {
return false;
}
else if (document.forms[0][aTextField].value.indexOf("@") < 1) {
return false;
}
else if (document.forms[0][aTextField].value.length -
 document.forms[0][aTextField].value.indexOf("@") < 4) {
return false;
}
else { return true; }
}
 
function isEmpty(aTextField) {
if ((document.forms[0][aTextField].value.length==0) ||
 (document.forms[0][aTextField].value==null)) {
return true;
}
else { return false; }
}
function validate() {
 
if (isEmpty("USUARIO")) {
	alert("Por favor introduce un nombre de usuario.");
	setFocus("USUARIO");
	return false;
}
if (isEmpty("CONTRASEÑA")) {
	alert("Por favor introduce una contraseña.");
	setFocus("CONTRASEÑA");
	return false;
}
if (!isAnEmailAddress("EMAIL")) {
	alert("El email introducido no es válido.");
	setFocus("EMAIL");
	return false;
}
return true;
 
}
</script> 
<body> 
<div id="global"> 
 
<!-- Inicio cabecera --> 
<div id="cabecera"><img src="/imagenes/cabecera2.jpg" /></div> 
<!-- Fin cabecera --> 
<br /> 
<div id="contenido"> 
[COLOR="red"]<form action="registro.php" method="post" onSubmit="return validate()"> 
<label><b>Nombre de usuario:</b> <input type="text" name="USUARIO" size="30"></label> 
<br /><br /> 
<label><b>Contraseña: <input type="password" name="CONTRASEÑA" size="30"></label> 
<br /><br /> 
<label><b>Email:</b> <input type="text" name="EMAIL" size="30"></label> 
<br /><br /> 
<button type="submit">Completar el registro</button> 
</form>[/COLOR] 
</div> 
<br /> 
<div id="pie">Doodleo - <a href="http://comocreartuweb.com" target="_blank">CCTW</a></div> 
</div> 
</body> 
</html>


registro.php (No da error)
<html>
<head>
<title>Registro | Doodleo</title>
<link rel="stylesheet" href="/estilos.css" type="text/css" media="all">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<?php 

include("config.php"); 

// Conexión con el servidor
$link = mysql_connect($server, $db_user, $db_pass)
or die ("No se ha podido conectar al servidor porque ".mysql_error());

// Selección de la base de datos
mysql_select_db($database)
or die ("Error al seleccionar la base de datos porque ".mysql_error());

// Revisar si el nombre de usuario ya se encuentra en la base de datos
$check = "select id from $table where USUARIO = '".$_POST['USUARIO']."';"; 
$qry = mysql_query($check)
or die ("Could not match data because ".mysql_error());
$num_rows = mysql_num_rows($qry); 
if ($num_rows != 0) {
echo "¡Vaya! parece que el nombre de usuario <b>$USUARIO</b> ya está siendo usado.<br />";
echo "Prueba otra vez a registrarte!";
exit; 
} else {

// Registrar usuario en la base de datos
$insert = mysql_query("insert into $table values ('NULL', '".$_POST['USUARIO']."', '".$_POST['CONTRASEÑA']."', '".$_POST['EMAIL']."', 'images/avatar.jpg')")
or die("Could not insert data because ".mysql_error());

// Imprimir mensaje en pantalla indicando que el registro se completó
echo "Tu cuenta se ha creado correctamente!<br>"; 
echo "Ahora puedes <a href=login.html>loguearte</a>!"; 
}

?>
</body>
</html>

login.html (No da error)
<html>
<head>
<title>Login | Doodleo</title> 
<link rel="stylesheet" href="/estilos.css" type="text/css" media="all"> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
#formulariologin {
border: 3px solid green; 
padding: 10px;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
}
#formulariocontraseña {
border: 3px solid green;
padding: 10px;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
}
</style> 
</head>
<script type="text/javascript">
function setFocus(aField) {
document.forms[0][aField].focus();
}

function isAnEmailAddress(aTextField) {

if (document.forms[0][aTextField].value.length<5) {
return false;
}
else if (document.forms[0][aTextField].value.indexOf("@") < 1) {
return false;
}
else if (document.forms[0][aTextField].value.length -
 document.forms[0][aTextField].value.indexOf("@") < 4) {
return false;
}
else { return true; }
}

function isEmpty(aTextField) {
if ((document.forms[0][aTextField].value.length==0) ||
 (document.forms[0][aTextField].value==null)) {
return true;
}
else { return false; }
}

function validate() {

if (isEmpty("USUARIO")) {
	alert("Introduce tu nombre de usuario.");
	setFocus("USUARIO");
	return false;
}
if (isEmpty("CONTRASEÑA")) {
	alert("Introduce tu contraseña.");
	setFocus("CONTRASEÑA");
	return false;
}
return true;

}
</script>
<body>
<div id="global">
<div id="cabecera"><img src="imagenes/cabecera2.jpg"></div>
<div id="contenido">
[COLOR="red"]<form action="login.php" method="post" onSubmit="return validate()">
Usuario: <input type="text" name="USUARIO" size="20">
<br /><br />
Contraseña: <input type="password" name="CONTRASEÑA" size="20">
<br />
<button type="submit">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Login&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</button>
</form>[/COLOR]
</div>
<br /><br />
<div id="formulariocontraseña">
<form action="forgotpass.php" method="post" onSubmit="return validateresendpass()">
<strong><u>Recuperar contraseña</u></strong><br /><br />
Usuario: <input type="text" name="usuarioo" size="20"><br /><br />
<button type="submit">Reenviar contraseña</button>
</form>
</div>
<br /><br />
</div>
<br />
<div id="pie">Doodleo - <a href="http://comocreartuweb.com">CCTW</a></div>
</div>
</body>
</html>
Los &nbsp; del botón de envío son para que el botón sea más ancho, no es ningún error xD

login.php (Sí da error)
<html> 
<head> 
<title>Doodleo - CCTW</title> 
<link rel="stylesheet" href="/estilos.css" type="text/css" media="all"> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
</head>
<body>
<?php
ob_start();

include("config.php"); 

// Conexión con el servidor
$link = mysql_connect($server, $db_user, $db_pass) 
or die ("Could not connect to mysql because ".mysql_error()); 

// Conexión con la base de datos
mysql_select_db($database) 
or die ("Could not select database because ".mysql_error()); 

$match = "select id from $table where USUARIO = '".$_POST['USUARIO']."' 
and password = '".$_POST['CONTRASEÑA']."';";

$qry = mysql_query($match) 
or die ("Could not match data because ".mysql_error()); 
$num_rows = mysql_num_rows($qry); 

if ($num_rows <= 0) { 
echo "¡Vaya! El usuario <strong>".$_POST['USUARIO']."</strong> no existe o has escrito mal la contraseña<br />"; 
echo "<a href=login.html>Inténtalo de nuevo</a>"; 
exit;

} else { 

setcookie("loggedin", "".$_POST['USUARIO']."", time()+(3600 * 24));
echo "Bienvenido <strong>".$_POST['USUARIO']."</strong><br />"; 
echo "Vuelve al inicio y disfruta de las nuevas opciones de ser un usuario registrado!"; 
}
ob_end_flush();
?>
</body>
</html>

Y el error me lo da al intentar loguearme, el error es:
Could not match data because Unknown column 'password' in 'where clause'


Los campos de la base de datos son:
[contenido no disponible]
Hola, lo que pasa es que en el archivo login escribiste: "select id from $table where USUARIO = '".$_POST['USUARIO']."' and password = '".$_POST['CONTRASEÑA']."';" y si te fijas bien, la columna password no existe en la tabla (según lo que has mostrado en la fotografía). En tu caso debes cambiar password por CONTRASEÑA, que sí es una columna válida.

Saludos.
Sí, lo que imaginaba, ya había probado eso pero me da otro error al hacer ese cambio:
Could not match data because You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '‘A = ''' at line 2

De momento login.php queda así:
<html> 
<head> 
<title>Doodleo - CCTW</title> 
<link rel="stylesheet" href="/estilos.css" type="text/css" media="all"> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
</head>
<body>
<?php
ob_start();

include("config.php"); 

// Conexión con el servidor
$link = mysql_connect($server, $db_user, $db_pass) 
or die ("Could not connect to mysql because ".mysql_error()); 

// Conexión con la base de datos
mysql_select_db($database) 
or die ("Could not select database because ".mysql_error()); 

$match = "select id from $table where USUARIO = '".$_POST['USUARIO']."' 
and CONTRASEÑA = '".$_POST['CONTRASEÑA']."';";

$qry = mysql_query($match) 
or die ("Could not match data because ".mysql_error()); 
$num_rows = mysql_num_rows($qry); 

if ($num_rows <= 0) { 
echo "¡Vaya! El usuario <strong>".$_POST['USUARIO']."</strong> no existe o has escrito mal la contraseña<br />"; 
echo "<a href=login.html>Inténtalo de nuevo</a>"; 
exit;

} else { 

setcookie("loggedin", "".$_POST['USUARIO']."", time()+(3600 * 24));
echo "Bienvenido <strong>".$_POST['USUARIO']."</strong><br />"; 
echo "Vuelve al inicio y disfruta de las nuevas opciones de ser un usuario registrado!"; 
}
ob_end_flush();
?>
</body>
</html>
REvisa por si te sobra algo del final en:

$match = "select id from $table where USUARIO = '".$_POST['USUARIO']."' and CONTRASEÑA = '".$_POST['CONTRASEÑA']."' ; ";

No te sobra el punto y coma coloreado en rojo?
Se que para ponder añadir "valores" con eñes dentro de un campo hay que definir el cotejamiento correcto. Pero para el propio nombre del campo no tengo nada claro. De todas formas, por intentarlo...
Muchísimas gracias Jorgens, al final era la Ñ jajaja

Ahora tengo un problema... cuando hago el login no me encuentra el usuario, me dice que el usuario no existe cuando SÍ existe en la DB :S

igualmente ya he solucionado ese error, mañana miro el código que ya me duermo! jejeje
Oki, lo miramos mañana, que ya es hora! ja ja ja

Genial lo de la eñe, a ver si recuerdo aclararlo en el curso de php y así lo voy mejorando.

Me lo he pasado bien hoy contigo ;=) Un abrazo!
No habrás llamado ANTOÑO al usuario? ja ja ja

Jajajaja XD. Como dice Jorgens, debes asegurarte de utilizar el tipo correcto de cotejamiento. Los que generalmente funcionan para el español son utf8_bin/ci, utf8mb4_general_ci/ci o utf8mb4_general_ci/ci (ci, case insensitive).
No, el usuario se llama Doodleo jejeje

Voy a probar a modificar el cotejamiento y os cuento! gracias por todo!
Vale, he cambiado el cotejamiento de utf8mb4_general_ci a utf8_spanish_ci y funciona más o menos, cuando me intento loguear sí reconoce al usuario y me loguea, pero me da un pequeño error:

[COLOR="red"]Warning: Cannot modify header information - headers already sent by (output started at /home/doodleoc/public_html/gc/login.php:8) in /home/doodleoc/public_html/gc/login.php on line 35[/COLOR]
Bienvenido doodleo
Vuelve al inicio y disfruta de las nuevas opciones de ser un usuario registrado!

El error es lo que está en rojo, el resto lo pone cuando te logueas jeje
Intentare aportar algo por mi parte (elimina todos los acentos, deja la codificacion x defecto, y dinos que tienes en la linea 8 de login.php (porque ahi te manda el error).

Un saludo,
mm... me suena mucho ese error.

Ten en cuenta que las líneas de header han de colocarse lo primero en el archivo, nada más empezar, en la primera línea, o al menos NUNCA antes de algún comando que haga que se muestre algo en la pantalla (por ejempli, nunca después de un echo)

Puedes verificar eso?
El problema es que no tengo ninguna línea de header en el código :S

Victor ahora edito el post con la línea 8, que tengo que mirar el código, gracias por tus consejos
Usas session_start() ? En ese caso ponlo antes de cualquier cosa que imprima algo en pantalla.

Cuida que no hayan espacios en blanco antes del primer <?php ni después de ?>

y nos cuentas, claro! je je je
El código va así de momento:
<html> 
<head> 
<title>Doodleo - CCTW</title> 
<link rel="stylesheet" href="/estilos.css" type="text/css" media="all"> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
</head>
<body>
<?php
ob_start();

include("config.php"); 

// Conexión con el servidor
$link = mysql_connect($server, $db_user, $db_pass) 
or die ("Could not connect to mysql because ".mysql_error()); 

// Conexión con la base de datos
mysql_select_db($database) 
or die ("Could not select database because ".mysql_error()); 

$match = "select id from $table where USUARIO = '".$_POST['USUARIO']."' 
and PASSWORD = '".$_POST['PASSWORD']."'";

$qry = mysql_query($match) 
or die ("Could not match data because ".mysql_error()); 
$num_rows = mysql_num_rows($qry); 

if ($num_rows <= 0) { 
echo "¡Vaya! El usuario <strong>".$_POST['USUARIO']."</strong> no existe o has escrito mal la contraseña<br />"; 
echo "<a href=login.html>Inténtalo de nuevo</a>"; 
exit;

} else { 

setcookie("loggedin", "".$_POST['USUARIO']."", time()+(3600 * 24));
echo "Bienvenido <strong>".$_POST['USUARIO']."</strong><br />"; 
echo "Vuelve al inicio y disfruta de las nuevas opciones de ser un usuario registrado!"; 
}
ob_end_flush();
?>
</body>
</html>

Y la línea 8 es...
<?php
Viste? Has colocado ob_start(); después de haber enviado algo a imprimir en el navegador! El title es algo que se muestra en él.

Inténtalo de nuevo colocando el ob justo al principio del codigo html.

<?php
ob_start();
?>
<html>
<head>
<title>Doodleo - CCTW</title>
<link rel="stylesheet" href="/estilos.css" type="text/css" media="all">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<?php
include("config.php");
// Conexión con el servidor
$link = mysql_connect($server, $db_user, $db_pass) or die ("Could not connect to mysql because ".mysql_error());
// Conexión con la base de datos mysql_select_db($database)
.........
........
Y ahora?
Solucionado!!! Muchas gracias Jorgens!!

No había caido en lo que el title es un texto más que se imprime en el navegador jeje

Gracias de nuevo por la ayuda a todos!
Parece ser que sí jajaja

En el curso de php y MySQL más adelante podrías poner un sistema de registro de usuarios bien explicadito, para que no tengamos que estar preguntando cada 2 x 3 como yo jejeje

Un saludo!
Quería avisar de que si vais a coger estos códigos (ya corregidos, gracias de nuevo a todos) tengáis en cuenta que le falta "protección", ya que es vulnerable a las SQLi (SQL inyection). Para saber más como protegeros buscar más en google, que yo sé poquito de este tema jeje