UPPREVIOUSNEXT  Technologies Internet et Education, © TECFA
  2. Traitement de simple formulaires avec PHP

2. Traitement de simple formulaires avec PHP

2.1 Traitement de formulaires avec PHP I (Calcul)

Exemple 2-1: Un simple quiz et POST vers un autre fichier PHP

 

 

 

Le formulaire HTML (seulement une partie):

<form action="calcul.php"
 method="post">Quelles sont vos connaissances de HTML ?<input type="radio" name="choice" value="1"
 checked>faibles<input type="radio" name="choice" value="2">moyennes<input type="radio" name="choice" value="3">bonnes<br>Indiquez votre expertise en programmation:<input type="radio" name="choice2" value="1"
 checked>absente<input type="radio" name="choice2" value="2">moyenne<input type="radio" name="choice2" value="3">bonne<P><input type="submit" value="Voir le résultat!"></form>

 

A. La récupération des variables d’un formulaire

Les données en provenance des formulaires sont stockées dans des variables spéciales de php qu’on appelle des arrays "super globaux" (car ils sont accessible depuis n’importe quel endroit du programme).

Selon la méthode choisie pour la transmission du formulaire (POST ou GET), on utilise la variable $_POST ou $_GET.

Les valeurs sont indéxés dans ces arrays par le nom donné à l’input avec l’attribut NAME.

Dans notre exemple, on peut donc récupérer la réponse aux questions dans la variable $_POST:

$choice = $_POST[’choice’];
$choice2 = $_POST[’choice2’];

B. Calcul et affichage des résultats

<?php
 
// Récupération des variables du formulaire
$choice = $_POST[’choice’];
$choice2 = $_POST[’choice2’];
 
// Ensuite on calcule le score
$score = $choice + $choice2;
 
// Et on donne le résultat en fonction du score obtenu
echo "<h3>Votre score est de " . $score . "</h3>";
// Et finalement un commentaire
if ($score < 3
) {
  echo "<p>Vous &ecirc;tes un d&eacute;butant</p>";
} elseif ($score < 5) {
  echo "<p>Vous avez un niveau moyen</p>";
} else {
  echo "<p>Vous &ecirc;tes un expert !</p>";
}
?>
 

A retenir:

C. Empêcher l’accès direct à cette page PHP (sans données)

2.2 Traitement de formulaires avec PHP II

Exemple 2-2: Checkboxes avec PHP - arrays

Voici un extrait du formulaire html:

<form action="calcul4.php
" method=post>
Quels sont vos couleurs préféres?
<br>
<input type="checkbox
" name="choice[]
" value="Red">Red
<table bgcolor="red" width="50"><tr><td>&nbsp;</td></tr></table>
 
<input type="checkbox" name="choice[]
" value="Blue">Blue
<table bgcolor="blue" width="50"><tr><td>&nbsp;</td></tr></table>
 
<input type="checkbox" name="choice[]
" value="Green">Green
<table bgcolor="green" width="50"><tr><td>&nbsp;</td></tr></table>
.....
<input type="checkbox" name="choice[]
" value="Black">Black
<table bgcolor="black" width="50"><tr><td>&nbsp;</td></tr></table>
 
<input type="submit" value="Voir le résultat!">
</form>
  • Notez bien la syntaxe pour stocker les choix dans un array: "choice[]"

Voici le code php qui traite le formulaire.

 
 
<?php
$choice = $_POST[’choice’];
 
echo("<h3>Vos couleurs préférées sont </h3>");
 
for ($i=0;$i<sizeof($choice);$i++) {
    if (isset($choice[$i]
)) {
       echo("$choice[$i]
 - ");
    }
}
?>
 
 

Exemple 2-3: Checkboxes avec PHP - multiples variables

Voici un extrait du code HTML:

<form action="calcul3.php
" method=post>
Quels sont vos couleurs préféres?
<input type="checkbox" name="choice1
" value="Red">Red
<table bgcolor="red" width="50"><tr><td>&nbsp;</td></tr></table>
 
<input type="checkbox" name="choice2
" value="Blue">Blue
<table bgcolor="blue" width="50"><tr><td>&nbsp;</td></tr></table>
.....
<input type="checkbox" name="choice6
" value="Black">Black
<table bgcolor="black" width="50"><tr><td>&nbsp;</td></tr></table>
<input type="submit" value="Voir le résultat!">
</form>

Voici un extrait du code PHP:

<?php
echo "<h3>Vos couleurs préférées sont </h3>";
 
if (isset($_POST[’choice1’])) {echo $_POST[’choice1’] . " - ";}
if (isset($_POST[’choice2’])) {echo $_POST[’choice2’] . " - ";}
if (isset($_POST[’choice3’])) {echo $_POST[’choice3’] . " - ";}
if (isset($_POST[’choice4’])) {echo $_POST[’choice4’] . " - ";}
if (isset($_POST[’choice5’])) {echo $_POST[’choice5’] . " - ";}
if (isset($_POST[’choice6’])) {echo $_POST[’choice6’]);}
?>

2.3 Traitement de formulaires avec PHP III

Exemple 2-4: Prix calcul d’une voiture avec un seul fichier PHP

A. Le formulaire HTML (seulement une partie):

<FORM METHOD="POST" ACTION="<? echo $_SERVER[’PHP_SELF’] ?>"
>      ........      <br>      Entrez le cout de votre assurance/ Insurance<br>      <input type="text" name=assurance size=8 value=0><br>      Entrez le prix que vous ont coûté vos accidents / Accidents<br>      <input type="text" size=8 name=accidents value=0><br>........      Entrez le coût de vos amendes ... / fines<br>      <input type="text" size=8 name=amendes
 value=0><br>      Votre Nom / Your name      <input type="text" size=40 name=nom><br>      <HR width=250><BR>      <input type="submit" value="Alors / Let’s see !?!" name="process"
>  </FORM>  </center>

B. A retenir (pour la suite)

C. Comment traiter la requête venant d’une page par la même page ?

<?php if (!isset($_POST[’process’])) {
?>//... ici on affiche le formulaire (directement en HTML)//    uniquement si $process = FALSE.  <FORM METHOD="POST" ACTION="<? echo $PHP_SELF ?>">  .....  </FORM><?} else {
//... ici on effectue les calculs}
?>
 

A retenir:

D. Calcul et affichage des résultats

Voici le code (sans la phase de récupération des variables):

// calculate the cost per month

$cost = round(((((((($accidents + $assurance) + (((($consokilo / 100.0) * $kilomois) * $prixcarbu) * 12.0)) + $vignette) + $tcs) + $autoroutes) + $entretien) + $amendes) / 12.0);echo "<h2>Resultat/Result</h2>";// print the name if we got oneif ($nom) { echo "$nom, votre "; } else { echo "Votre ";}// print the resultsecho "bagnole vous coutera environ $cost francs par mois / Your car costs about $cost Swiss francs/month.<p>";// give a short comment  if ($cost < 10) {   $evaluation = "Heh c’est pas sérieux / Mhh this doesn’t look serious !";   }  elseif ($cost < 400.0) {   $evaluation = "Vous en sortez bien / This is fine :)";   }  else {   $evaluation = "Vous ne vous en sortez pas bien, pensez aux transports communs / You pay quite a lot!";   }echo "$evaluation <p>";

E. A retenir:

F. Si c’était trop compliqué:

Voir la version intégrée de l’ exemple Un simple quiz et POST vers un autre fichier PHP:

Exemple 2-5: Un simple quiz et POST vers le même fichier PHP

2.4 Tester l’existence de variables et valeurs POST/GET

Dans PHP vous pouvez tester si une variable “POST/GET” existe ou si elle a une valeur non-zéro ou non-vide (string):

2 méthodes pour tester si une une entrée existe dans un array $_POST ou $_GET

  1. "array_key_exists()"
if (array_key_exists(’first’, $_POST)) { .... faire ...};
  1. 2. "isset()" pour voir si une variable existe:
    • utiliser pour décider s’il faut afficher un formulaire ou traiter le formulaire
if (isset($POST[’first’]) ) { .... faire ....}
La différence est que array_key_exists retourne TRUE même quand la valeur est NULL alors que isset retourne FAUX.

ATTENTION, Si vous utilisez des <input type="text"> il faut aussi tester si la variable en question est vide car elle existera avec les tests ci-dessus.

  1. “empty()” pour tester si une variable est zéro, vide ou inexistante
    • utiliser pour décider si l’utilisateur a rempli un champs
if (empty ($input) ) { ... ne rien faire} else { ... faire ...}

Donc empty() retourne TRUE si la valeur est soit: "", 0, "0", NULL, FALSE, array(), ....

2.5 Gestion de sessions

Exemple 2-6: Limiter l’accès répétée à une page

session_start();
if (!isset($_SESSION[’count’])) {
    $_SESSION[’count’] = 0;
} else {
    $_SESSION[’count’]++;
}
if ($_SESSION[’count’] > 2) {
echo ’<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">’;
    echo "<html> <body>";
    echo "Désolé c’est terminé, vous ne pouvez pas envoyer 2 fois le meme questionnaire";
    echo "</body> </html>";
    exit;
  } 
// .... continuer ici le code qui gère l’accès 1 et 2

UPPREVIOUS NEXT -- TIE