Corsi on-line

Crare un sondaggio con CGI

  • CommentiScrivi un commento
  • ForumDiscuti sul forum
  • Prev
  • NextCrare un sondaggio con CGI
    Pagina 2 di 2

1. Il form per le votazioni e la pagina di elaborazione

CGI ci permette di creare utili applicazioni per i nostri siti web sfruttando la sua capacitā di raccogliere input provenienti dagli utenti e di scriverli su un supporto di memorizzazione come per esempio un file di testo.

In questo breve articolo descriveremo la procedura necessaria per creare un semplice sondaggio da proporre ai navigatori. L'applicazione comprenderā un comune form HTML con il quale permettere le votazioni, un file destinato alla scrittura di queste su un file di testo, il file di testo che utilizzeremo come database e, infine, una pagina con il compito di mostrare a video i risultato del nostro sondaggio.

L'articolo continua dopo la pubblicità

Cominciamo subito proponendo il semplice form che presenterā al pubblico l'argomento del sondaggio e le possibilitā di scelta per il voto:

<html>
<head>
<title>Sondaggio in CGI</title>
</head>
<body>
<form action="../cgi-bin/sondaggio.cgi" method="POST"> 
Quale linguaggio utilizzi per il Web?<br /> 
<input type="radio" name="voto" value="PHP">PHP<br /> 
<input type="radio" name="voto" value="ASP">ASP<br /> 
<input type="radio" name="voto" value="JSP">JSP<br /> 
<input type="radio" name="voto" value="CGI">CGI<br /> 
<input type="submit" value="Vota"> 
</form> 
<a href="risultati.cgi">Risultati</a><br>
</body>
</html> 
Dal lato del form non vi č nulla da segnalare, basta una conoscenza base dell'HTML per realizzarlo. Passiamo invece al codice della pagina che si occuperā di scrivere i voti all'interno del file di testo:
#!/usr/bin/perl -w
use CGI qw(:standard);
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
use strict;
use Fcntl qw(:flock :seek);

my $db = "db.txt";
if (param('voto'))
{
  open(OUT, ">>$db") or &dienice("Impossibile aprire $db: $!");
  flock(OUT, LOCK_EX); 
  seek(OUT, 0, SEEK_END); 
  print OUT param('voto'),"\n";
  close(OUT);
}else{
  &dienice("Non hai ancora votato!");
}

print redirect("http://www.sito.it/cgi-bin/risultati.cgi");

sub dienice
{
  my($errore) = @_;
  print header;
  print start_html("Attenzione");
  print h1("Si č verificato un errore");
  print $errore;
  print end_html;
  exit;
}
In pratica il file 'sondaggio.cgi' non fā altro che aprire il file di testo deputato all'archiviazione dei voti espressi dagli utenti. Vi sono poi alcune funzioni di controllo: se per esempio l'utente non ha ancora espresso una preferenza viene stampata a video la relativa notifica; nello stesso modo, se viene espresso un voto l'applicazione lancia un redirect verso la pagina contenente i risultati.
Da notare come lo script preveda di creare un output HTML apposito in caso di errori generati dall'esecuzione.

A livello sintattico, vā sottolineato l'utilizzo del modulo Perl Fcntl in associazione alla funzione flock; quest'ultimo permette l'accesso esclusivo ad un file da parte di un applicazione per evitare che il suo contenuto possa essere daneggiato in caso di accessi simultanei.
Al momento dell'apertura del file possiamo notare anche il flag LOCK_EX che indica appunto l'accesso esclusivo al file in scrittura.

Corsi
  • Corso Linux
    Corso Linux
    Guida completa al sistema open-source. A partire da 39 €
  • Corso MySQL
    Corso MySQL
    Gestione del database open-source. A partire da 39 €
  • Corso PHP
    Corso PHP
    Creare siti web dinamici avanzati con PHP e MySQL. A partire da 39 €
Vedi anche...
Guide