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>');
}
}
?>

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *