next up previous contents Next:  setuid des scripts CGI. Up: Installation et configuration d'Apache. Previous:  CGI - Interface passerelle   Table des matières  

37.2.9  Formulaires et CGI.

Pour créer un formulaire fonctionnel, utilisez le marqueur <FORM> d'HTTP de la manière suivante. Un fichier /opt/apache/htdocs/form.html:

<HTML> 
 <FORM name=''myform'' action=''test.cgi'' method=''get''> 
   <TABLE> 
     <TR> 
       <TD colspan=''2'' align=''center''> 
         Please enter your personnal details: 
       </TD> 
     </TR> 
     <TR> 
       <TD>Name:</TD><TD><INPUT type=''text'' name=''name''></TD> 
     </TR> 
     <TR> 
       <TD>Email:</TD><TD><INPUT type=''text'' name=''email''></TD> 
     </TR> 
     <TR> 
       <TD>Tel:</TD><TD><INPUT type=''text'' name=''tel''></TD>

     </TR> 
     <TR> 
       <TD colspan=''2'' align=''center''> 
         <INPUT type=''submit'' value=''Submit'' 
       </TD> 
     </TR>

   </TABLE> 
 </FORM> 
</HTML> 



devrait donner:

Image img-CGI

Notez la manière dont ce formulaire appelle notre script existant test.cgi. Voici un script qui ajoute les données entrées, dans notre la table postgres SQL:

#!/bin/sh 
 
echo 'Content-type: text/html' 
echo 
 
opts=`echo ``$QUERY_STRING''` | \ 
   sed -e 's/[^A-Za-a0-9 %&+,.\/:=@_~-]//g' -e 's/&/ /g'   -e q` 
 
for opt in $opts; do 
   case $opt in 
       name=*) 
           name=${opt/name=/} 
           ;; 
       email=*) 
           email=${opt/email=/} 
           ;; 
       tel=*) 
           tel=${opt/tel=/} 
           ;; 
   esac 
done 
 
if psql -d template1 -H -c ``\ 
INSERT INTO people (name, email, tel) \ 
VALUES ('$name', '$email', '$tel')'' 2>&1 | grep -q '^INSERT ' ; then 
   echo `` 
   echo ``have been successfully recorded.</HTML> 
else 
   echo `` 
fi 
 
exit 0  


Remarquez comment les premières lignes du script éliminent tous les caractères non-désirés de QUERY_STRING. Un tel traitement est obligatoire pour des raisons de sécurité parce que les scripts de shell peuvent aisément exécuter des commandes si des caractères comme $ et ` sont présent dans une chaîne.

Pour utiliser la méthode ``POST'' alternative, modifiez le marqueur FORM en:

<FORM name=''myform'' action=''test.cgi'' method=''post''> 
 
 
La méthode POST envoie le texte de la requête via l'entrée standard (stdin) du script CGI. Par conséquent, vous devez aussi modifier votre ligne opts= en:

opts=`cat | \ 
  sed -e 's/[^A-Za-z0-9 %&+,.\/:=@_~-]//g' -e 's/&/ /g' -e q` 


next up previous contents Next:  setuid des scripts CGI. Up: Installation et configuration d'Apache. Previous:  CGI - Interface passerelle   Table des matières  
1-01-2006