Corsi on-line
Chiudi
Newsletter:
  • Seguici su Facebook
  • Seguici su Twitter
  • Seguici su Google+
  • Seguici via RSS
  • Seguici col tuo Smartphone

Crare un sondaggio con CGI

Articolo scritto da Claudio Garau
Pagina 1 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 più sotto...)

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 LinuxCorso Linux
Guida completa al sistema open-source. A partire da 39 €.
Corso MySQLCorso MySQL
Gestione del database open-source. A partire da 49 €.
Corso PHPCorso PHP
Corso completo per la creazione di siti Web dinamici. Sconto -25% sino al 23/05/2012.
Vedi anche...
Annunci

Mr.Webmaster

Pubblicità
Chi Siamo
Contattaci
Collabora
Note Legali
© 2003 - 2012 Mr.Webmaster - Il portale dei Webmaster Italiani - Tutti i diritti riservati | Powered by IKIweb Internet Media S.r.l. - PIVA 02848390122