¿Cómo puedo aplicar diseño al PHP?

varuk

Hola.

Tengo un código PHP, tal que así, que básicamente lo que hace es llevarte a la página de administrador si la contraseña y el usuario son correctos.

<?php 
include("conexion.php"); 
session_start();

$usuario = $_POST['usuario'];
$contrasena = $_POST['contrasena'];

if ($usuario && $contrasena)
{
$resultado = mysql_query("SELECT * FROM administrar WHERE usuario='$usuario' AND contrasena='$contrasena'");
if (mysql_num_rows($resultado)>0)
	{
	//Si encuentra coincidencias asigna el $usuario a la variable "usuario_valido" y registra ésta última.
	$_SESSION['usuario_valido']=$usuario;
	}
}

//Si "usuario_vaido ha quedado registrado, porque se ha encontrado el usuario y contraseña, entonces redirige a la página privada
if (isset($_SESSION['usuario_valido']) && !empty($_SESSION['usuario_valido']))
{
header("Location: admin.php");
exit;
// ese exit lo ponemos para asegurar que no se ejucatará más código después de él
}

echo ("<form method='post' action='$PHP_SELF'>
  	Usuario</br><input type='text' name='usuario'></br>
  	Clave</br><input type='text' name='contrasena'></br></br>
  	<input type='submit' name='Submit' value='Entrar'>
	</form>");
 
echo ("<a href=\"email.php\">¿Olvidó la contraseña?</a>");

?>

Lo que quiero, es darle formato con CSS a eso. Así que he incluido este código, como en otros archivos PHP, al principio del todo:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title><?php include("title.php")?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="estilo.css" rel="stylesheet" type="text/css" />
</head>

<body>

<?php //Aquí iría el código de arriba ?>

</body>
</html>

El problema es que, da error. Por lo que he leido, si metes código antes del "session_start", entonces da un error.

¿Cómo podría darle formato con la hoja de estilos css a la página? He probado haciendo esto:

<?php 
include("conexion.php"); 
session_start();
?>




<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title><?php include("title.php")?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="estilo.css" rel="stylesheet" type="text/css" />
</head>

<body>

<?php //Resto código ?>

</body>
</html>

Y eso tampoco funciona. Muchas gracias : )

txandy

Para empezar empecemos por el principio, nunca mejor dicho :D

¿Que error te da?

1 respuesta
varuk

#2 Warning: session_start(): Cannot send session cache limiter - headers already sent

xD, ese.

PiradoIV

Pon session_start() antes de cualquier otra cosa

catalon

#1 Pon el codigo php antes que el html y en lugar de mostrar el resultado del php con un echo metelo en una variable, luego en el html haces el echo de esa variable.

<?php 
include("conexion.php"); 
session_start();

$usuario = $_POST['usuario'];
$contrasena = $_POST['contrasena'];

if ($usuario && $contrasena)
{
$resultado = mysql_query("SELECT * FROM administrar WHERE usuario='$usuario' AND contrasena='$contrasena'");
if (mysql_num_rows($resultado)>0)
        {
        //Si encuentra coincidencias asigna el $usuario a la variable "usuario_valido" y registra ésta última.
        $_SESSION['usuario_valido']=$usuario;
        }
}

//Si "usuario_vaido ha quedado registrado, porque se ha encontrado el usuario y contraseña, entonces redirige a la página privada
if (isset($_SESSION['usuario_valido']) && !empty($_SESSION['usuario_valido']))
{
header("Location: admin.php");
exit;
// ese exit lo ponemos para asegurar que no se ejucatará más código después de él
}

var1= "<form method='post' action='$PHP_SELF'>
        Usuario</br><input type='text' name='usuario'></br>
        Clave</br><input type='text' name='contrasena'></br></br>
        <input type='submit' name='Submit' value='Entrar'>
        </form>";
 
var2= "<a href=\"email.php\">¿Olvidó la contraseña?</a>";

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title><?php include("title.php")?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="estilo.css" rel="stylesheet" type="text/css" />
</head>

<body>

<?php echo var1.var2; ?>

</body>
</html>

Fyn4r

El problema (creo) es la posición del header, no puedes meterlo en medio del <body>

LzO

mete arriba del todo, en la primera linea del documento

session_start();

y luego el include y demas ponlo en el body...

Tunnecino

Nadie se ha fijado en el <title><?php include("title.php")?></title>?

1 respuesta
Zeroner

#1 con mucho cuidado.

varuk

Era por lo que decía #8 . Básicamente he tenido que poner después de todo el php, abajo, la información que me interesaba:

<title><?php include("title.php")?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="estilo.css" rel="stylesheet" type="text/css" />

Y ya funcionó aplicándole estilos. Muchas gracias ^^

Tunnecino

Y eso de meter código antes del session... yo casi siempre hago eso. El problema que si da por meter algo delante es con los header();, que si metes código html peta.

kodeone

Los headers() normalmente fallan si después hay código HTML. Siempre hay que ponerlos al principio del todo. Yo de ti crearia una función arriba con el header dentro y en vez de llamar al header en el código, llamaría la función.

Saludos!

yoseman

Para evitar errores de headers alredy sent a veces se usa esto

Poner al principio del script:

<?php
ob_start();
?>

http://php.net/manual/es/function.ob-start.php

Y al final

<?php
ob_end_flush();
?>

http://www.php.net/manual/es/function.ob-end-flush.php

Lo digo porque a veces si vas con prisas te saca de apuros, pero lo mejor es ordenar el código de forma que no lanzes headers desde php si has enviado ya algo al navegador(aunque sea un espacio en blanco o un retorno de carro) porque entonces las cabeceras se envian y obviamente te saltará el headers already sent.

Un saludo

B

Siempre recomiendo separar el código html(vista) del php(controlador) pero si te ves en al necesidad de ponerlo en el mismo archivo en vez de cerrar y abrir tags php usa la implementción de "heredoc " de php. Ejemplo:

print <<<<HTML
<div>
<label>a</label>b
<input type="text">
</div>
HTML.

A mi modo de ver queda más bonito y limpio.

Usuarios habituales