Projet Internet Licence MASS et MST-GG

Dates limites

Pour rendre le projet

Envoyez-moi par mail :

  1. Le nom et le login des membres du binome ;
  2. L'url (sur www-mips.unice.fr) où se trouve la home page du projet ;
  3. Le chemin complet (~utilisateur/apache/cgi-bin/...) de tous les scripts CGI utilisés par le projet. Vérifiez que ces fichiers soient autorisés en lecture et exécution pour tous (chmod a+x ...).

Sujet

On vous demande de réaliser un site web sur un thème de votre choix.

Ce thème peut être culturel (groupe de musique, livres, émission de télévision, les films d'un réalisateur), scientifique, ludique, etc. Bref, vous avez le choix du thème

Le site devra être écrit en HTML 4.0, en suivant la DTD strict ou transitional au choix (avec une petite préférence pour la strict). Vous devrez utiliser une feuille de style pour gérer l'aspect général du site. Toutes les pages du site devront "passer" au validator, et comporter l'icone correspondante en bas de page.

Vous pourrez utiliser des tableaux ou des frames, au choix, avec une préférence pour les tableaux (allez voir les exemples).

Scripts CGI

Les CGI pourront être écrits en Perl, Shell, ou C.

Inspirez-vous des exemples du TD sur les CGI pour compléter les exemples ci-dessous...

N'oubliez par les commandes magiques "xterm -e tail -f ..." (voir sujet du TD), elles vous aideront à trouver vos erreurs

Vous pouvez utiliser des feuilles de style, il suffit de mettre la balise <link rel="stylesheet"... dans les en-tetes html écrits par le CGI. Fautes attention que le cgi s'exécute dans "/cgi-bin", et il faudra donc donner le chemin complet de la feuille de style sur le serveur (par ex. "/~utilisateur/style.css"). Si votre feuille de style fait appel à d'autres urls (fond de page...), mettez également le chemin complet.

Les scripts shell doivent toujours commencer par la ligne magique #!/bin/sh

Vote

Sur le thème choisi, le site devra proposer un vote : par exemple, on pourra voter de 0 à 10 pour chacun des films d'un réalisateur. Une page permettra d'afficher le nombre de votes pour chaque film et la moyenne des votes. Ces votes seront gérés par la méthode de votre choix (le plus simple est sans doute un script CGI).

En script shell

Il faut faire un formulaire pour le vote, et deux scripts CGI : Un pour le vote et un pour visualiser le résultat.

  1. Enregistrement du vote (script appelé par un formulaire) :
    #!/bin/sh
    eval `...`
    ...
    # ajoute la note sur une ligne à la fin du fichier votes.txt
    echo $FORM_note >> votes.txt
    # ajoute l'adresse de la machine distante à la fin du fichier votants.txt
    echo $REMOTE_ADDR >> votants.txt
    ...
    echo '<a href="/cgi-bin/resultats.cgi">visualiser les résultats</a>'
    ...
    
  2. Lecture des résultats, appelée par <a href="/cgi-bin/resultats.cgi">...</a>
    #!/bin/sh
    ...
    # compte le nombre de lignes contenant la note 01
    # attention: apostrophes à l'envers
    total1=`fgrep 01 votes.txt|wc -l`
    ...
    echo "$total1 personnes ont donné la note 01"
    ...
    
    La meme chose avec awk est plus puissante, et calcule en plus la moyenne
    #!/bin/sh
    ...
    awk '{ sum[$1] ++;\
           total += $1;\
          if ($1 > max)\
              max = $1\
        }\
    END { for (i = 1; i <= max; i++) {\
              printf("%g personnes ont donné la note %d<br>\n", sum[i], i)\
          }\
          printf("moyenne = %g<br>\n",total/NR)\
        }' votes.txt
    
    On peut aussi utiliser le programme awk pour calculer seulement la moyenne:
    # calcul de la moyenne
    awk '{total += $1} END {printf("moyenne = %g<br>\n",total/NR)}' votes.txt
    

Questions subsidiaires

Faites en sorte qu'on n'aie droit qu'a un vote par machine.

Ajoutez plusieurs catégories de vote.

Livre d'or

Le site devra également comporter un "livre d'or" sur lequel les visiteurs pourront laisser leurs commentaires

En script shell

#!/bin/sh
eval `...`
...
# ajoute la note sur une ligne à la fin du fichier livredor.html
echo "<hr><p>$FORM_message" >> /u/disque/utilisateur/www/livredor.html

En perl

Le meme script sert à consulter le livre d'or, à écrire le formulaire d'ajout de message, et à y ajouter un message.

Le script comprend donc 4 parties, à vous de trouver dans quel ordre les mettre ! Je les donne volontairement dans le désordre.

  1. écriture es en-tetes et du début de la réponse html
  2. écriture du formulaire html : allez voir les exemples
  3. afficher le contenu du livre d'or :
    open(IN,"/u/mstgg1/.../www/livredor.txt");
    while(<IN>) {
      print;
    }
    close IN;
    
  4. écrire le commentaire qui a été entré à la fin du livre d'or :
    if (param()) {
      # ouvre le fichier pour écrire à la fin
      open(OUT,">>/u/mstgg1/.../www/livredor.txt");
      # ajoute le commantaire
      print OUT "Commentaire de :", em(param('nom')), br
        param('commentaire'),br;
      close OUT;
    }
    

Dans la réalité, c'est beaucoup plus compliqué : deux personnes peuvent vouloir entrer un commentaire exactement en meme temps, et il faut utiliser un fichier-verrou. Allez-voir les exemples du cours pour voir comment faire

Facultatif

Une zone privée du site, gérée par un mot de passe, vous permettra d'accéder aux "logs" du serveur et des scripts CGI.

Ceci nécessite de configurer le serveur (fichier ~/apache/conf/httpd.conf)


Valid HTML 4.01!

Frederic Devernay

Last modified: Thu Feb 14 17:10:25 MET 2002