[000]Jean
17-04-2008, 01:00
Sto seguendo un tutorial (http://spinningtheweb.blogspot.com/2006/07/approximating-master-pages-in-php.html) che ho trovato in giro che spiega come creare dei templates in stile master page di ASP.NET. Per ora sembrava andare tutto bene, ma quando ho provato a innestare del codice PHP all'interno del contenuto delle pagine, ha smesso di funzionare.
Questo è il codice del template:<?php
include "common.inc.php";
if (basename($_SERVER["PHP_SELF"]) <> "index.php") {
session_start();
if (!session_is_registered('biblioteca')) errore_accesso('3');
else $logged = 1;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Biblioteca - <?php echo $titolo; ?></title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<br />
<h1>Biblioteca</h1>
<h2><?php echo $titolo; ?></h2>
<br />
<div class="container">
<div class="nav">
<form class="log" action="<?php if (!$logged) echo "login.php"; else echo "logout.php";?>" method="POST" name="log">
<?php if ($logged) echo "Benvenuto ".$_SESSION['user']."\n<br />"; ?>
<div <?php if ($logged) echo "class=\"hidden\"";?>>
<label>User:</label> <input type="text" name="user"><br />
<label>Password:</label> <input type="password" name="pass"><br />
<input type="submit" value="Entra" name="invia">
<input type="reset" value="Reset" name="reset">
</div>
<input <?php if (!$logged) echo "class=\"hidden\"";?> type="submit" value="Logout" name="logout">
</form>
<ul>
<li><a href="autori_add.php">Inserimento autori</a></li>
<li><a href="libri_add.php">Inserimento libri</a></li>
<li><a href="editori_add.php">Inserimento editori</a></li>
<li><a href="lingue_add.php">Inserimento lingue</a></li>
</ul>
</div>
<?php if (is_set($logged)) echo "<div class=\"".$msg_class."\">".$msg_text."</div>\n";
else if($_SESSION['msg_text'] <> '') {
echo "<div class=\"".$_SESSION['msg_class']."\">".$_SESSION['msg_text']."</div>\n";
$_SESSION['msg_text'] = '';
}
?>
<div class="content">
<?php echo $content; ?>
</div>
</div>
<div class="footer">Questo sito è un esercizio di PHP realizzato da Tizio Caio, mat 39999</div>
</body>
</html>E questo è il codice di una generica pagina con un echo innestato, che funziona<?php ob_start();?>
Questa è la pagina di benvenuto.
<br />
<br />
<?php echo "Questo è del codice innestato"; ?>
<?php
$content = ob_get_clean();
$titolo = "Pagina iniziale";
include("template.php");
?>Se invece provo con questa, mi risponde picche:<?php ob_start(); ?>
Inserimento autori:
<form action="autori_q.php" method="POST" name="autori">
<label>Cognome: </label><input type="text" name="cognome"><br />
<label>Nome: </label><input type="text" name="nome"><br />
<label>Nome tradotto: </label><input type="text" name="nome_trad"><br />
<label>Qualifica: </label><input type="text" name="qualifica"><br />
<label>Pseudonimo: </label><input type="text" name="pseudonimo"><br /><br />
<?php
$conn = mysql_connect("localhost", "root") or send_msg("ERRORE: connessione al server non riuscita", "msg_err");
mysql_select_db("biblioteca", $conn) or send_msg("ERRORE: scelta del database non riuscita", "msg_err");
$sql = "SELECT * FROM lingue";
$res = mysql_query($sql, $conn);
$num = mysql_num_rows($res);
if($num > 0) {
echo "<select name=\"lingua\">\n";
while ($row = mysql_fetch_array($res)) {
echo "<option name=\"".$row['0']."\">".$row['0']."</option>\n";
}
echo "</select>";
} else send_msg("ERRORE: non è stata inserita nessuna lingua", "msg_err");
?>
<input type="submit" value="Inserisci"> <input type="reset" value="Cancella">
</form>
<?php
$content = ob_get_clean();
$titolo = "Inserimento autori";
include("template.php");
?>Se provo a innestare questo codice, mi tira fuori una pagina contenente solo ciò che è compreso tra l'ob_start() e il primo tag <?php ?>. Se tolgo il codice innestato, o provo con la pagina di prima, va tutto a meraviglia.
Cosa sto sbagliando? :muro:
Questo è il codice del template:<?php
include "common.inc.php";
if (basename($_SERVER["PHP_SELF"]) <> "index.php") {
session_start();
if (!session_is_registered('biblioteca')) errore_accesso('3');
else $logged = 1;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Biblioteca - <?php echo $titolo; ?></title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<br />
<h1>Biblioteca</h1>
<h2><?php echo $titolo; ?></h2>
<br />
<div class="container">
<div class="nav">
<form class="log" action="<?php if (!$logged) echo "login.php"; else echo "logout.php";?>" method="POST" name="log">
<?php if ($logged) echo "Benvenuto ".$_SESSION['user']."\n<br />"; ?>
<div <?php if ($logged) echo "class=\"hidden\"";?>>
<label>User:</label> <input type="text" name="user"><br />
<label>Password:</label> <input type="password" name="pass"><br />
<input type="submit" value="Entra" name="invia">
<input type="reset" value="Reset" name="reset">
</div>
<input <?php if (!$logged) echo "class=\"hidden\"";?> type="submit" value="Logout" name="logout">
</form>
<ul>
<li><a href="autori_add.php">Inserimento autori</a></li>
<li><a href="libri_add.php">Inserimento libri</a></li>
<li><a href="editori_add.php">Inserimento editori</a></li>
<li><a href="lingue_add.php">Inserimento lingue</a></li>
</ul>
</div>
<?php if (is_set($logged)) echo "<div class=\"".$msg_class."\">".$msg_text."</div>\n";
else if($_SESSION['msg_text'] <> '') {
echo "<div class=\"".$_SESSION['msg_class']."\">".$_SESSION['msg_text']."</div>\n";
$_SESSION['msg_text'] = '';
}
?>
<div class="content">
<?php echo $content; ?>
</div>
</div>
<div class="footer">Questo sito è un esercizio di PHP realizzato da Tizio Caio, mat 39999</div>
</body>
</html>E questo è il codice di una generica pagina con un echo innestato, che funziona<?php ob_start();?>
Questa è la pagina di benvenuto.
<br />
<br />
<?php echo "Questo è del codice innestato"; ?>
<?php
$content = ob_get_clean();
$titolo = "Pagina iniziale";
include("template.php");
?>Se invece provo con questa, mi risponde picche:<?php ob_start(); ?>
Inserimento autori:
<form action="autori_q.php" method="POST" name="autori">
<label>Cognome: </label><input type="text" name="cognome"><br />
<label>Nome: </label><input type="text" name="nome"><br />
<label>Nome tradotto: </label><input type="text" name="nome_trad"><br />
<label>Qualifica: </label><input type="text" name="qualifica"><br />
<label>Pseudonimo: </label><input type="text" name="pseudonimo"><br /><br />
<?php
$conn = mysql_connect("localhost", "root") or send_msg("ERRORE: connessione al server non riuscita", "msg_err");
mysql_select_db("biblioteca", $conn) or send_msg("ERRORE: scelta del database non riuscita", "msg_err");
$sql = "SELECT * FROM lingue";
$res = mysql_query($sql, $conn);
$num = mysql_num_rows($res);
if($num > 0) {
echo "<select name=\"lingua\">\n";
while ($row = mysql_fetch_array($res)) {
echo "<option name=\"".$row['0']."\">".$row['0']."</option>\n";
}
echo "</select>";
} else send_msg("ERRORE: non è stata inserita nessuna lingua", "msg_err");
?>
<input type="submit" value="Inserisci"> <input type="reset" value="Cancella">
</form>
<?php
$content = ob_get_clean();
$titolo = "Inserimento autori";
include("template.php");
?>Se provo a innestare questo codice, mi tira fuori una pagina contenente solo ciò che è compreso tra l'ob_start() e il primo tag <?php ?>. Se tolgo il codice innestato, o provo con la pagina di prima, va tutto a meraviglia.
Cosa sto sbagliando? :muro: