Categories: sviluppo web

Pagine con piu’ scopi in php

Pagine con piu’ scopi, ovvero pagine che possono decidere cosa mostrare in base a una o piu’ condizioni. La lettura del bel libro di Kevin Yank e’ stata illuminante…

Vediamo un esempio:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Sample Page</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
</head>
<body>

<?php if (!isset($_GET['name'])): ?>

  <!-- Nessun nome assegnato, per cui viene richiesto all'utente -->

  <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
  <label>Please enter your name: <input type="text" name="name" /></label>
  <input type="submit" value="GO" />
  </form>

<?php else: ?>

  <p>Your name: <?php echo $_GET['name']; ?></p>

  <p>This paragraph contains a <a href="newpage.php?name=<?php echo urlencode($_GET['name']); ?>">link</a> that passes the name variable on to the next document.</p>

<?php endif; ?>

</body>
</html>

Qualche picola nota:

E’ da da notare, l’uso della funzione isset.
Questa funzione ritorna un valore “vero” se alla variabile e’ assegnato un valore e “falso” se la variabile non esiste.

Interessante anche l’uso della variabile $_SERVER[‘PHP_SELF’], utilizzata per specificare l’attributo action del form.

$_SERVER[‘PHP_SELF’] e’ sempre configurata sull’URL della pagina corrente, quindi il form, una volta inviato, carichera’ sempre la stessa pagina, ma con la variabile settata.


 

Immaginiamo ora di avere un sito gestito attraverso database. Il problema e’ quello di creare due differenti versioni di ciascuna pagina: una per l’utente non loggato (con la form per fare il login), una per l’utente regolarmente loggato.
Usando la tecnica delle pagine con piu’ scopi il problema ha in php una soluzione semplice ed elegante. L’esempio che riporto e’ tratto da un articolo di Kevin Yank (questo il link all’articolo originale).

Bob ha una pagina con delle news e un piccolo riquadro di login. Ecco il codice:

 

<html>
<head>
<title>Bob's Login Site</title>
<body bgcolor="#00cc00">
<?php
if ($_POST['login'] == "do") {
$name = $_POST['name'];
$pass = $_POST['password'];
$db_cnct = mysql_connect("localhost", "user", "pass") or die("Could not connect to the database!");
$db = mysql_db_select("users", $db_cnct);
$sql = "SELECT user, pass FROM users WHERE user = \"$name\" and pass = \"md5($pass)\"";
// This is for an encrypted password-protection database
$check_user = mysql_query($sql);
$users = mysql_num_rows($check_user);
if ($users < 1) {
echo ("<center>Invalid Password!</center>");
echo ('<form action="'.$PHP_SELF.'" method="post">');
echo ('<input type="text" name="name"><br />');
echo ('<input type="password" name="password"><br />');
echo ('<input type="hidden" name="login" value="do">');
echo ('<input type="submit" value="Log-in">');
echo ('</form>');
}
else {
echo ("Welcome, $name!");
}
}
else {
echo ('<form action="'.$PHP_SELF.'" method="post">');
echo ('<input type="text" name="name"><br />');
echo ('<input type="password" name="password"><br />');
echo ('<input type="hidden" name="login" value="do">');
echo ('<input type="submit" value="Log-in">');
echo ('</form>');
?>
</body>
</html>

 

Lo script controlla se ci sono username e password (passati tramite il metodo HTTP POST).
Se non ci sono, lo script mostrera’ il codice che chiedera’ di loggarsi.

Se ci sono, lo script interroga il database per controllare se si tratta di una coppia di valori validi.
Se e’ tutto ok, verra’ mostrata la scritta “Welcome, $name!”, altrimenti verra’ stampata a schermo una indicazione di errore e verra’ riproposto il modulo di login.

Ed ecco un esempio pratico un po’ piu’ evoluto:

 

<?PHP
$forum = $_GET['forum'];
if (!isset ($forum) ) {
$sql = "SELECT forums, ID FROM master_list";
$get_forums = mysql_query($sql);
while ($forums = mysql_fetch_array($get_forums) ) {
echo ('<a href="forums.php?forum'.$forums["ID"].'">'.$forums["forums"].'</a><br />');
}
}

else {
$thread = $_GET['thread'];
if (!isset ($thread) ) {
$sql = "SELECT thread, ID FROM forum".$forum;
$get_threads = mysql_query($sql);
while ($threads = mysql_fetch_array($get_forums) ) {
echo ('<a href="forums.php?forum='.$forum.'&thread='.$threads["ID"].'">');
echo ($threads["thread"].'</a><br />');
}
}
else {
$sql = "SELECT messages FROM thread".$thread;
$get_messages = mysql_query($sql);
while ($messages = mysql_fetch_array($get_messages) ) {
echo ('<table><tr><td>'.$messages["message"].'</td></tr></table>');
}
}
?>
paolo

Share
Published by
paolo

Recent Posts

Clustering delle keyword: raggruppare migliaia di query con K-means e clustering gerarchico

Capita spesso che si esporti l'elenco delle keyword da Search Console o da un tool,…

2 mesi ago

CTR atteso vs reale: trovare le pagine che rendono meno della loro posizione

Chi passa le giornate dentro Search Console conosce bene una situazione di questo tipo: una…

2 mesi ago

Naive Bayes: classificare l’intento delle query con il teorema di Bayes

Nell'articolo sul multi-armed bandit abbiamo usato Bayes per decidere fra varianti: spostare il traffico verso…

2 mesi ago

Multi-armed bandit: ottimizzare le varianti mentre il test è ancora in corso

Nell'articolo sull'A/B test bayesiano abbiamo confrontato due varianti a campione fisso: si raccolgono i dati…

2 mesi ago

A/B test bayesiano: non solo “se” B è meglio di A, ma “di quanto”

Abbiamo avuto modo di esaminare, nell'articolo sull'A/B testing classico, come confrontare due varianti con il…

2 mesi ago

Stima bayesiana di un conversion rate: quanto possiamo fidarci dei pochi dati che abbiamo

Abbiamo avuto modo di esaminare, nell'articolo sulle fondamenta della statistica bayesiana, come l'aggiornamento bayesiano funzioni…

2 mesi ago