Foros del Web » Programando para Internet » PHP »

Problemas llamando a una función

Estas en el tema de Problemas llamando a una función en el foro de PHP en Foros del Web. Hola a todos, Estoy pasando algunas páginas de ASP a PHP y aunque en general no estoy teniendo muchos problemas, creo que no entiendo bien ...
  #1 (permalink)  
Antiguo 27/05/2009, 08:25
 
Fecha de Ingreso: junio-2008
Mensajes: 145
Antigüedad: 15 años, 10 meses
Puntos: 0
Problemas llamando a una función

Hola a todos,

Estoy pasando algunas páginas de ASP a PHP y aunque en general no estoy teniendo muchos problemas, creo que no entiendo bien la forma de llamar funciones que estan en un archivo externo en PHP.

El problema que tengo es el siguiente, tengo panel de acceso para los usuarios que cambia en función de si el usuario acaba de entrar, se ha conectado correctamente o ha introducido mal los datos de acceso. Las 3 versiones de este panel son funciones que llamo en función del contenido de la variable $_SESSION['estado']. El caso es que haga lo que haga siempre me llama a la misma función y las otras 2 las ignora a pesar de que por el valor de la variable de sesión debería llamarlas, la validación del usuario y la contraseñ la hace bien ya que he probado a hacer un echo del $_SESSION['estado'] y en cada caso pone lo que corresponde pero siempre llama a la función formulario. Os dejo el código de las 3 páginas por si podéis darme algun consejo.

index.php
Código PHP:
<?php
    session_start
();
    include (
"includes/panel.php");
    
?>
/*Aquí va todo el código de html, excepto el final de body y de html*/
<? if (isset($SESSION['estado'])) {
        if (
$SESSION['estado'] == "ok") {
            
conectado();
            }
        elseif (
$SESSION['estado'] == "ko") {
            
fallo();
        }
    }
    else {
    
formulario();
    }
    echo 
$_SESSION['estado'];
      
 
?>

panel.php
Código PHP:
<?php
session_start
();
include (
"funciones.php");



function 
conectado() {
echo 
'<div class="normal">Bienvenid@ '.$_SESSION["usuario"].'</div><div class="normal2">';
echo 
'<a href="desconectar.php" >Finalizar sesión</a></div>'
}
    
function 
fallo() {
echo 
'<div class="normal2">Nombre de usuario o contraseña incorrecta. <br/>Por favor, vuelva';
echo 
' a intentarlo</a></div>';
echo 
'<form class="formulario" action="validar.php" method="post" >';
echo 
'<label for="usuario">Usuario<br/></label><input name="usuario" type="text" id="usuario"';
echo 
' value="Usuario" size="13" /><label for="pwd">Contraseña<br/></label><input name="pwd"';
echo 
' type="text" id="pwd" value="Contraseña" size="13" style="margin-bottom:5px;" />';
echo 
'<input type="submit"  name="button4" id="button4" value="Acceder" /></form>';
    }
function 
formulario(){

echo 
'<form class="formulario" action="validar.php" method="post" >';
echo 
'<label for="usuario">Usuario<br/></label><input name="usuario" type="text" id="usuario"'; echo 'value="Usuario" size="13" /><label for="pwd">Contraseña<br/></label><input name="pass"';
echo 
' type="text" id="pass" value="Contraseña" size="13" style="margin-bottom:5px;" />';
echo 
'<input  type="submit"  name="button4" id="button4" value="Entrar" /></form>';
    }    
?>
validar.php
Código PHP:
<?php
session_start
();
include (
"includes/funciones.php"); 
$idcnx conectar();

$usu $_REQUEST['usuario'];
$pass $_REQUEST['pass'];

$sql "SELECT * FROM usuarios WHERE usuario='$usu' and pass='$pass'";
$res mysql_query($sql,$idcnx);


if (
mysql_num_rows($res)!=0){
    
$_SESSION['usuario'] = $usu;
    
$_SESSION['estado'] = "ok";
    
header ("Location: foro.php");
}else {
    
$_SESSION['estado'] = "ko";
    
header("Location: index.php");
}
mysql_free_result($res);
mysql_close($idcnx); 
?>
  #2 (permalink)  
Antiguo 27/05/2009, 09:49
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 7 meses
Puntos: 55
Respuesta: Problemas llamando a una función

primeor el session_start(); debe ir en el controlador y al principio antes de cualquier salida por pantalla

y segundo
todo lo q incluyas desde un archivo externo es usable directamente desde quien incluye no tiene q haber ningun poroblema
__________________
Degiovanni Emilio
developtus.com
  #3 (permalink)  
Antiguo 27/05/2009, 16:35
 
Fecha de Ingreso: junio-2008
Mensajes: 145
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Problemas llamando a una función

Hola emiliodeg, gracias por contestar siento no haber podido responder antes.

No se si entiendo lo que me quieres decir, quiero decir el session_start(); lo tengo puesto en los 3 archivos antes que cualquier otra cosa nada más abrir los símbolos de php, de hecho acabo de quitar unos espacios vacíos que tenía en index.php para dejarlo justo después del símbolo "<?php" de apertura, el problema que tengo no es que no me detecte la sesión en el index.php, ya que he probado a hace un echo justo después del session_start(); y la detecta perfectamente, el problema es que no accede a las funciones fallo y conectado y va directo siempre a la función formulario.

Sobre lo segundo que comentas me imagino que te refieres al archivo panel.php, ahí tengo la duda de si tengo que poner el session_start(); al principio ya que en realidad de ese archivo sólo quiero las funciones para usarlas en el archivo index.php o en los que sean. Y en ese archivo ya existe un session_start(); al principio. De todas formas he probado a meter las funciones directamente en index.php a ver si así funcionaba y sigue funcionando igual de mal así que creo que el problema debe estar en esta parte del código pero yo lo veo todo correcto:

Código PHP:
<? 
    
if (isset($SESSION['estado'])) {
        if (
$SESSION['estado'] == "ok") {
            
conectado();
            }
        else if (
$SESSION['estado'] == "ko") {
            
fallo();
        }
    }
    else {
    
formulario();
    } 
    echo 
$_SESSION['estado'];     
 
?>
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:01.