Ver Mensaje Individual
  #4 (permalink)  
Antiguo 17/11/2004, 06:05
Cluster
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
La función header() no es -sólo- usada para "redireccionar" pese que el 99% de los ejemplos que suelas ver se use para eso.

Dicha función es "genérica" y se usa para "lanzar" (enviar) cabeceras HTTP a tu cliente (navegador) .. Una de tantas cabeceras HTTP son las de "Location" que indican al navegador que "cambie" la página que estás viendo por otra para redireccinar. Así que el uso de header() para el caso concreto de "redireccionar" sería:

Código PHP:
header ("Location: pagina.tal"); 
A su vez .. como lo que haces es enviar cabeceras HTTP al cliente vía la función header() .. NOO puedes enviar otro tipo de salida al navegador antes de usar dicha función .. EN tu caso el error te dice que en la línea 7 de tu index_usuario.php ya estás enviando cierto tipo de salida .. en concreto es ese HTML que ahí tienes de <html> .. etc ..

El script que usas de index_usuario.php hace dos procesos .. o un formulario HTML con su salida correspondiente necesaria (tu HTML) .. o bien hace un proceso puramente PHP que es la validación de tu usuario. En el proceso "puro" de PHP de validación NOOO es necesario el HTML que debes usar para formar tu página HTML para crear ese formulario HTML .. si te finas .. cuando "validas" .. lo que haces es redireccionar vía header("Location ...") así que no tiene sentido ese HTML ahí pues NUNCA se procesará. Las cabeceras HTTP enviadas por header() al navegador se procesan por parte de tu navegador -antes- que el resto de HTML que puedas enviar y demás que generas.

De lo dicho .. tu código tendrías que reordenarlo para que quede tipo:
Código PHP:
if (!isset($submit)){ 
?>
<html>
etc ....
<?
formulario
($login,$password);
?>
etc ...
</body>
</html>
<?
} else { 
comprobar($login,$password);}
Ojo por qué un simple espacio antes del primer <? .. o un salto de línea se considera también como "salida" .. y dará problemas con header().

Otros detalles que tienes (mal) son ..
* Para ver si tu usuario existe bajo ese nombre de usuario y password . .NO debes hacer una consulta SQL total a tu BD y comparar uno por uno los registros que te arroja bajo PHP y tu IF .. DEBES! usar más SQL (que significa: lenguaje estrucutrado de consultas) .. con el objetivo de que sea tu BD la que vía SQL te devuelva si hay o no registros que coincidan con tu consulta realizada bajo el criterio que definas.

Ejemplo:
Código PHP:
$consulta="select login,pass,tipo from usuarios WHERE login='".$login."' AND pass='".$password."' AND tipo='".$tipo."'" 
Con ese tipo de consulta .. ya que necesitas esos datos si es que coincide todo (el login, pass y el tipo ...) puedes usar la función mysql_num_rows() para contar el n° de resultados que te arrojó dicha consulta .. en teoría o 1 o 0 si existe o no ..

Código PHP:
$result=mysql_query($consulta) or die (mysql_error());
if (
mysql_num_rows($result) == 1){
   
$row=mysql_fetch_array($result);
   
$_SESSION["login"]=$row['login']; 
   
$_SESSION["password"]=$row['pass']; 
   
header("Location: menuAlumno.php"); 
   exit;
} else {
   
header ("Location: error.php");
   exit;

Si te fijas .. ante el error que no exista el usuario NO hago un echo "Error..." sino que redirecciono igualmente .. pero a otra página para mostrar el error (podría ser la misma página .. pero con una variable de control para saber si corresponde mostrar el error o no ..)

Todos esto conceptos lo puedes ver funcionando en mi script Autentificator por si quieres hecharle un vistazo:
http://php.cluster-web.com/autentificator/

Un saludo,

Última edición por Cluster; 17/11/2004 a las 06:06