Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Poner código php en html (creo que no es tema redundante)

Estas en el tema de Poner código php en html (creo que no es tema redundante) en el foro de PHP en Foros del Web. Holas. He estado consultando y aunque el título de este tema es similar a muchos otros, no encuentro la solución. El objetivo final es comprobar ...
  #1 (permalink)  
Antiguo 13/11/2014, 05:25
 
Fecha de Ingreso: noviembre-2014
Ubicación: Madrid
Mensajes: 81
Antigüedad: 9 años, 5 meses
Puntos: 1
Pregunta Poner código php en html (creo que no es tema redundante)

Holas.

He estado consultando y aunque el título de este tema es similar a muchos otros, no encuentro la solución.

El objetivo final es comprobar en cada página del sitio que el usuario está logueado.

Después de loguearse te lleva a la página principal, que está escrita en html. Y en ella, antes de nada, comprueba que esté logueado. Aunque en ésta no sea necesario lo será en las siguientes y entonces tendrá el mismo problema.

El código es este (he probado también include)

Código:
<body>
<?php
require_once("logueado.php");
?>
BIENVENIDO
</body>
</html>
Y la página php logueado.php tiene este código:

Código:
<?php
/**
 * Veridica si el usuario está logueado
 * @return bool
 */
function estoy_logueado () {
    @session_start(); //inicia sesion (la @ evita los mensajes de error si la session ya está iniciada)
     
    if (!isset($_SESSION['usuario'])) return false; //no existe la variable $_SESSION['USUARIO']. No logueado.
    if (!is_array($_SESSION['usuario'])) return false; //la variable no es un array $_SESSION['USUARIO']. No logueado.
    if (empty($_SESSION['usuario']['$usuario'])) return false; //no tiene almacenado el usuario en $_SESSION['USUARIO']. No logueado.
 
    //cumple las condiciones anteriores, entonces es un usuario validado
    return true;
}
if (!estoy_logueado()) { // si no estoy logueado
    header('Location: login.html'); //saltamos a la página de login
    die('Acceso no autorizado'); // por si falla el header (solo se pueden mandar las cabeceras si no se ha impreso nada)
}
?>
Sé que en la página php se podría hacer todo sin necesidad de poner la función, pero ese es otro lío que no viene, creo, al caso.

La cuestión es que si ejecuto directamente la página logueado.php, creo que funciona perfectamente por que me dice que no estoy autorizado.
Pero si a continuación ejecuto la página html de bienvenida pues no me dice que no estoy autorizado, si no que me da la bienvenida.
En fin que no entiendo nada.
He leído por ahí que me evitaría este problema si todas mis páginas fueran php. Pero como novato que soy miedo me da cambiarlas.
También he leído algo de que si el servidor habría que configurarlo pra que hiciera no se qué. A eso aún lo tengo más miedo.

En fin, espero haber sido claro y muchas gracias por adelantado.
Tened buen día.
  #2 (permalink)  
Antiguo 13/11/2014, 07:33
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Poner código php en html (creo que no es tema redundante)

No, el problema es que session_start() requiere que NO imprimas nada antes de usarla, pero así lo haces.

Es decir, el HTML que tienes antes de incluir código PHP, debes evitarlo a toda costa.

Además la @ únicamente sirve para ocultarte un posible error y es entonces por eso que no entiendes lo que sucede.

Lo mejor es mostrar todos los errores y programar en consecuencia, jamás debes ocultarlos ni aplicar "hacks" sólo porque no pudiste hacer bien tu trabajo.

Ahora, claro que sólo los archivos PHP son capaces de ejecutar código para acceder a la sesión pero si es un archivo .html tampoco debería haber un problema porque la sesión se comparte únicamente si se ha iniciado correctamente.

Lo cual sólo es posible con archivos .php, así que los .html no deberían afectarla en lo absoluto.

También piensa que si accedes directamente a un recurso (que no es PHP ni ha invocado session_start() ni ha incluido tu script que verifica la sesión) entonces no está realmente protegido, ¿se entiende?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 13/11/2014, 12:27
 
Fecha de Ingreso: noviembre-2014
Ubicación: Madrid
Mensajes: 81
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Poner código php en html (creo que no es tema redundante)

Gracias por contestar.
Menos que más te entiendo.
Prueba de ello es que sigo sin saber por qué si ejecuto la página html llego a la bienvenida y si ejecuto directamente la php, que es la llamada de la html, me dice que no estoy autorizado.
PD No estoy en mi ordenador y no puedo quitar la orden hack esa que me sugieres que quite. Lo probaré, aunque no creo que altere el funcionamiento anómalo de ahora.
Salud.
  #4 (permalink)  
Antiguo 13/11/2014, 14:23
 
Fecha de Ingreso: septiembre-2007
Mensajes: 76
Antigüedad: 16 años, 7 meses
Puntos: 2
Respuesta: Poner código php en html (creo que no es tema redundante)

En paginas HTML no se puede ejecutar codigo php. De hecho si entendi bien si ejecutas el codigo que tienes en la pagina html te debe mostrar algo asi:


Código HTML:
Ver original
  1. <?php
  2. require_once("logueado.php");
  3. ?>
  4. BIENVENIDO


Prueba cambiando la extension de tu pagina html por php y pruebas
  #5 (permalink)  
Antiguo 13/11/2014, 15:23
 
Fecha de Ingreso: noviembre-2014
Ubicación: Madrid
Mensajes: 81
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Poner código php en html (creo que no es tema redundante)

He quitado
Código:
@session_start();
y sigue ahciendo lo mismo.
Gue, gue, gue.

Una de las preguntas que quedó en el aire, si pongo todas las páginas en php me evitaré este tipo de problemas?
  #6 (permalink)  
Antiguo 13/11/2014, 16:09
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Poner código php en html (creo que no es tema redundante)

Cita:
Iniciado por melkart239 Ver Mensaje
[...] Una de las preguntas que quedó en el aire, si pongo todas las páginas en php me evitaré este tipo de problemas?
No, que el archivo sea .php no hace que se inicie la sesión por arte de magia, en dado caso debes programar que sea así.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 13/11/2014, 16:16
 
Fecha de Ingreso: septiembre-2007
Mensajes: 76
Antigüedad: 16 años, 7 meses
Puntos: 2
Respuesta: Poner código php en html (creo que no es tema redundante)

Si tienes codigo php dentro de un archivo con extension .HTML nunca se va a ejecutar el codigo y te lo va a mostrar como texto.

Para que se ejecute el codigo php el nombre del archivo debe tener extension .PHP

Saludos.
  #8 (permalink)  
Antiguo 14/11/2014, 04:04
 
Fecha de Ingreso: noviembre-2014
Ubicación: Madrid
Mensajes: 81
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Poner código php en html (creo que no es tema redundante)

Cita:
Iniciado por pateketrueke Ver Mensaje
No, que el archivo sea .php no hace que se inicie la sesión por arte de magia, en dado caso debes programar que sea así.
No aclaré que cuando el usuario se loguea correctamente se ejecuta la apertura de la sesión
Código:
  $_SESSION['usuario'] = $usuario;
Claro que con esto me surge la pregunta tonta. Si la sesión se abrió en una página php, en la siguiente página en la que entre el usuario y yo quiera comprobar que esté logueado, debo poner otra vez esa línea?

Gracias Pateketrueke
  #9 (permalink)  
Antiguo 14/11/2014, 04:06
 
Fecha de Ingreso: noviembre-2014
Ubicación: Madrid
Mensajes: 81
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Poner código php en html (creo que no es tema redundante)

Cita:
Iniciado por israbart Ver Mensaje
Si tienes codigo php dentro de un archivo con extension .HTML nunca se va a ejecutar el codigo y te lo va a mostrar como texto.

Para que se ejecute el codigo php el nombre del archivo debe tener extension .PHP

Saludos.
Pues voy a probar a hacer todas las páginas php. Es como cambiar de barca sin saber por dónde voy a hacer aguas. Bueno sí que lo sé, por todos lados.

Gracias Israbat

Etiquetas: html, tema, variable
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 21:01.