Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/04/2014, 16:37
Profesor_Lambetain
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 7 meses
Puntos: 1
Validación de password entre ficheros, que se resiste.

Hola foreros:
Aclaro de entrada que soy novato. Pues bien, tengo dos ficheros entre los que intento hacer una validación de clave de acceso a una página, el home.php y el validación.php (son ficheros "adaptados" para presentar en el foro, los originales son muy extensos, pero he resumido las partes de la validación que son las que contienen el problema).

La estructura de la validación de password es dar 3 intentos disponibles, pasados los cuales sin haber dado con una clave correcta, se redirecciona a la Wikipedia.

El fichero home.php, por el que se ingresa al sistema de ficheros:

Código HTML:
<?php

ob_start();
session_start();

if(!isset($_SESSION['cont'])){ // Para sesión aún no inicializada.
	$_SESSION['cont']=3; // Intentos permitidos.
	$_SESSION['conforme']='no'; /* Variable que indica estado de validación entre home.php y validación.php: 3 valores posibles: 'no', 'si' y 'entrar'. */
	$claves=array('clave1','clave2','clave3','clave4','clave5'); // Vector de claves posibles.
	$_SESSION['dim']=count($claves); // Cantidad de claves posibles, usada en un ciclo for.
}

?>

<?xml version="1.0" encoding="UTF-8"?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd>
<html xmlns=http://w3.org/1999/xhtml xml:lang="en">

<head>
<title>Acceso</title>
</head>

<body style="background-color:#BBBBBB">

<?php 

if($_SESSION['cont']==3 && $_SESSION['conforme']=='no'){ // Pantalla inicial de pedido de primer ingreso de clave.

	echo "<p>Estimado Visitante:<br />Identifíquese con su clave de acceso.</p>"; 

	echo "<form action=\"validacion.php\" method=\"post\">
	<p>Clave de acceso: 
	<input name=\"clave\" id=\"clave\" type=\"password\" size=\"25\" maxlength=\"20\" value=\"\" />
	<input name=\"enviar\" id=\"buttons\" type=\"submit\" value=\"ENVIAR\" />
	<input name=\"borrar\" id=\"buttons\" type=\"reset\" value=\"BORRAR\" />
	</p></form>";

}elseif($_SESSION['cont']!=3 && $_SESSION['conforme']=='si'){ // La clave se validó correctamente en validacion.php.

	$_SESSION['conforme']='entrar';

	echo "<p>Bienvenido a la página<br />Pulse el botón y entre a la misma...</p>";

	echo "<form action=\"validacion.php\" method=\"post\">     
	<input name=\"clave\" id=\"clave\" type=\"hidden\" size=\"25\" maxlength=\"20\" value=\"".$_POST['clave']."\" />
	<input name=\"entrar\" id=\"buttons\" type=\"submit\" value=\"ENTRAR A LA PÁGINA\" /></p></form>";

}elseif($_SESSION['cont']<3 && $_SESSION['cont']>0 && $_SESSION['conforme']=='no'){ // Si quedan intentos disponibles...

	$_SESSION['cont']-=1;

	echo "<p>Clave de acceso incorrecta. Inténtelo de nuevo ( le resta(n) '".$_SESSION['cont']."' intento(s) ):</p>"; 
	echo "<form action=\"validacion.php\" method=\"post\">
	<p>Clave de acceso: 
	<input name=\"clave\" id=\"clave\" type=\"password\" size=\"25\" maxlength=\"20\" value=\"\" />
	<br /><br />
	<input name=\"enviar\" id=\"buttons\" type=\"submit\" value=\"ENVIAR\" />
	<input name=\"borrar\" id=\"buttons\" type=\"reset\" value=\"BORRAR\" />
	</p></form>";	

}elseif($_SESSION['cont']==0){ // Se acabaron los intentos disponibles: dirige a www.wikipedia.org.
	session_destroy();
	header('Location: http://www.wikipedia.org');
}

ob_end_flush();

?>

</body>

</html> 

... y el de validación.php:

Código HTML:
<?php

ob_start();
session_start();

if($_SERVER['REQUEST_METHOD']=='GET'){ // No hay sesión definida: dirige a home.php.
	header('Location: home.php');
}

$claves=array('clave1','clave2','clave3','clave4','clave5');

if($_SESSION['conforme']!='entrar'){ // Proceso de validación: recorro todas las claves hasta encontrar una coincidencia.

	for($i=0;$i<$_SESSION['dim'];$i++){

		if($_POST['clave']==$claves[$i]){
			$_SESSION['conforme']='si';
			break;
		}
	}

	$_SESSION['cont']-=1;
	header('Location: home.php');

} // Fin if.

session_destroy();
ob_end_flush();

?>


<?xml version="1.0" encoding="UTF-8"?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd>
<html xmlns=http://w3.org/1999/xhtml xml:lang="en">

<head>
<title>LA PÁGINA</title>

<script type="text/javascript">
function procesadato(x){
	alert("Tu clave ha sido: "+x+".");
}
</script>

</head>

<?php
// TRAMSMITO LA CLAVE correcta ingresada a la función procesadato().
echo "<body style=\"background-color:#294954\" onLoad=\"javascript:procesadato('".$_POST['clave']."');\">";
?>

ESTA ES LA PÁGINA.

</body>

</html> 

La clave de acceso correcta debe transferirse a una función (en nuestro caso function procesadato(x)) ya que ella contiene información para determinar la pantalla a presentar al usuario que ingresó.

Bueno, pues no hay caso, llevo 3 días con ello, sé que es una tontería, pero no la puedo encontrar. El problema es que no me sale de la pantalla primera de presentación inicial del campo de ingreso de clave.

¿Qué opináis? Gracias anticipadas.

Última edición por Profesor_Lambetain; 06/04/2014 a las 16:48 Razón: error cometido al transcribir código.