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

Guida ai Test Statistici per analisi A/B

I test statistici sono strumenti fondamentali per l’analisi dei dati e la presa di decisioni informate. Scegliere…

8 mesi ago

Come usare gli Alberi Decisionali per classificare i dati

Gli Alberi Decisionali sono un tipo di algoritmo di apprendimento automatico che utilizza una struttura…

11 mesi ago

L’algoritmo di Discesa del Gradiente spiegato semplice

Immaginiamo di voler trovare il percorso più veloce per raggiungere una destinazione in auto. Si…

1 anno ago

La Discesa del Gradiente: un nuovo studio mette in discussione un assunto base sull’ottimizzazione

Nel 1847, il matematico francese Augustin-Louis Cauchy stava lavorando su calcoli astronomici, quando ideò un…

1 anno ago

Il Metodo Montecarlo spiegato in modo semplice e applicato a casi reali

La simulazione Monte Carlo è un metodo utilizzato per quantificare il rischio associato a un…

2 anni ago

La distribuzione ipergeometrica

Abbiamo visto che la distribuzione binomiale si basa sull’ipotesi di una popolazione infinita N, condizione che si…

2 anni ago