Les formulaires permettent de retourner des informations saisies par un utilisateur vers une application serveur.

<form method="GET | POST" action="page_cible.php">
  <input type="text" name="Champ_saisie" value="Texte"

  <select name="Liste_Choix" size="3">
    <option value="Option_1">Option_1</option>
    <option value="Option_2">Option_2</option>
    <option value="Option_3">Option_3</option>
  </select>

  <textarea name="Zone_Texte" cols="30" rows="5">
    Texte par défaut
  </textarea>

  <input type="checkbox" name="Case_Cocher[]" value="Case_1"> 
    Case à cocher 1<br>
  <input type="checkbox" name="Case_Cocher[]" value="Case_2"> 
    Case à cocher 2<br>
  <input type="checkbox" name="Case_Cocher[]" value="Case_3"> 
    Case à cocher 3<br>

  <input type="radio" name="Case_Radio" value="Case radio 1"> 
    Case radio 1<br>
  <input type="radio" name="Case_Radio" value="Case radio 2"> 
    Case radio 2<br>
    <input type="radio" name="Case_Radio" value="Case radio 3"> 
  Case radio 3<br>

  <input type="cancel" name="Annulation" value="Annuler">
  <input type="submit" name="Soumission" value="Soumettre">
</form>

La transmission d'un formulaire s'effectue selon une des deux méthodes d'envoi GET ou POST.

La méthode GET place les informations d'un formulaire directement à la suite de l'adresse URL de la page appelée. Mais cette méthode n'offrant aucune discrétion tend à devenir obsolète.

http://www.site.com/cible.php?champ=valeur&champ2=valeur

La méthode POST regroupe les informations dans l'entête d'une requête HTTP assurant, ainsi, une confidentialité des données efficace.

Lors de la soumission à une page de traitement, chaque élément de saisie est assimilé à une variable PHP dont le nom est constitué par la valeur de l'attribut name et son contenu par la valeur de l'attribut value.

<?php
  $resultat = $Champ_saisie . "<br>";

  $resultat .= $Liste_Choix . "<br>";

  $resultat .= $Zone_Texte . "<br>";

  for ($i = 0; $i < count($Case_Cocher); $i++)
  {
    $resultat .= $Case_Cocher[$i] . "<br>";
  }

  $resultat .= $Case_Radio . "<br>";
?>

La plupart des éléments d'un formulaire n'acceptent qu'une seule et unique valeur, laquelle est affectée à la variable correspondante dans le script de traitement.

$Champ_Saisie = "Ceci est une chaîne de caractères.";

Tandis que pour des cases à cocher et les listes à choix multiples, plusieurs valeurs peuvent être sélectionnées entraînant l'affectation d'un tableau de valeurs aux variables correspondantes. C'est pour cette raison qu'il est nécessaire de déclarer un nom de variable suivi de crochets dans l'attribut name d'un champ input type="checkbox". Cela a pour effet de simuler un tableau après la soumission du formulaire courant.

$Case_Cocher[0] = "Case radio 1";
$Case_Cocher[1] = "Case radio 3";

La page de traitement d'un formulaire peut être aussi bien une document cible spécifique que la page elle-même. Dans ce cas, la page doit contenir un dispositif spécial permettant de recueillir ses propres données et la valeur de l'attribut action de la balise form doit être sa propre adresse. Un moyen simple consisterait à utiliser une variable d'environnement telle que $PHP_SELF, $PATH_INFO ou encore $SCRIPT_NAME.

<?php
  if ($champ_saisie != 'Texte')
  echo 'Vous avez écrit dans le champ de saisie, ' 
                                          . 'le texte suivant : ' . $champ_saisie;
?>
<form method="POST" action="<?php echo $PHP_SELF ?>">
  <input type="text" name="champ_saisie" value="Texte">

  <input type="submit" name="Soumission" value="Soumettre">
</form>

Une fonction très intéressante permet de détecter si une variable existe évitant ainsi l'affichage d'une erreur PHP lorsqu'une variable d'un formulaire n'a pas été renseignée par l'utilisateur.

<html>
  <body>
    <?
      if(isset($choix)&&($choix==2)){
        echo 'Un message particulier !';
      }
     else{
    ?>
    <form name="form" method="post">
      <input type="radio" name="choix" 
                 value="1" checked>
        Premier choix <br>
      <input type="radio" name="choix" 
                 value="2" 
                 onclick="form.action='essai_form.php'; 
                          form.submit();"> 
        Google <br>
      <input type="submit" value="Valider">
    </form>
    <?
      }
    ?>
  </body>
</html>
Exemple [voir]
<!-- Fichier : form.html -->
<html>
  <head>
  <title>Formulaire</title>
  </head>
  <body>
    <form method="POST" action="traitement.php">
      <table align="center">
        <tr>
          <td>Sexe</td>
          <td><select name="Sexe" size="1">
              <option selected value="Monsieur">Monsieur</option>
              <option value="Madame">Madame</option>
              <option value="Mademoiselle">Mademoiselle</option>
            </select>
          </td>
        </tr>
        <tr>
          <td>Nom</td>
          <td><input type="text" name="nom" size="30"></td>
        </tr>
        <tr>
          <td>Prénom</td>
          <td><input type="text" name="prenom" size="30"></td>
        </tr>
        <tr>
          <td>eMail</td>
          <td><input type="text" name="email" size="30"></td>
        </tr>
        <tr>
          <td>Adresse</td>
          <td><input type="text" name="adresse" size="30"></td>
        </tr>
        <tr>
          <td>Code Postal</td>
          <td><input type="text" name="cp" size="30"></td>
        </tr>
        <tr>
          <td>Ville</td>
          <td><input type="text" name="ville" size="30"></td>
        </tr>
        <tr>
          <td>Age</td>
          <td>
            <input type="hidden" name="age" value="" >
            <input type="radio" name="age" value="0 - 7 ans" >
                  0 - 7 ans
            <input type="radio" name="age" value="8 - 14 ans">
                  8 - 14 ans
            <input type="radio" name="age" value="15 - 18 ans">
                  15 - 18 ans
            <input type="radio" name="age" value="19 - 30 ans">
                  19 - 30 ans
            <input type="radio" name="age" value="30 - 50 ans">
                  30 - 50 ans
            <input type="radio" name="age" value="au-delà de 51 ans">
                  au-delà de 51 ans
          </td>
        </tr>
        <tr>
          <td>Langage(s) connu(s)</td>
          <td><input type="hidden" name="langage[]" value="">
            <input type="checkbox" name="langage[]" value="HTML">
                 HTML<br>
            <input type="checkbox" name="langage[]" value="XML">
                 XML<br>
            <input type="checkbox" name="langage[]" value="XHTML">
                 XHTML<br>
            <input type="checkbox" name="langage[]" value="Javascript">
                 Javascript<br>
            <input type="checkbox" name="langage[]" value="ASP">
                 ASP<br>
            <input type="checkbox" name="langage[]" value="PHP">
                 PHP<br>
            <input type="checkbox" name="langage[]" value="SQL">
                 SQL<br>
            <input type="checkbox" name="langage[]" value="Perl">
                 Perl<br>
          </td>
        </tr>
        <tr>
          <td>Commentaire</td>
          <td>
           <textarea name="commentaire" cols="30" rows="3">
           </textarea>
          </td>
        </tr>
        <tr>
          <td>
            <input type="reset" value="Annuler" name="annulation">
          </td>
          <td>
            <input type="submit" value="Soumettre" name="soumission">
          </td>
        </tr>
      </table>
    </form>
  </body>
</html>
<!-- Fichier : traitement.php -->
<html>
  <head>
  <title>Traitement du formulaire</title>
  </head>
  <body>
    <?
      define("CRLF", "\r\n");

      $destinataire = "messagerie@laltruiste.com";
      $sujet = "Questionnaire d'admission";

      $exp_reg_email = ""
         . "^[a-z0-9]+((.|-|_)[a-z0-9]+)*@[a-z0-9]+((.|-|_)[a-z0-9]+)*(.([a-z]){2,4})$";
      $exp_reg_cp = "^([0-9]{5})$";

      $valide = true;

      $corps = "<table>";
      $corps .= "<tr><td>Sexe</td><td> : </td><td>" . $sexe . "</td></tr>";
      if ($nom == "")
      {
        echo("<h3>Le champ nom est vide !</h3>");
        $valide = false;
      }
      else
      {
        $corps .= "<tr><td>Nom</td><td> : </td><td>" . $nom . "</td></tr>";
      }
      if ($prenom == "")
      {
        echo("<h3>Le champ prénom est vide !</h3>");
        $valide = false;
      }
      else
      {
        $corps .= "<tr><td>Prénom</td><td> : </td><td>" . $prenom . "</td></tr>";
      }
      if (($email != "") && ereg($exp_reg_email, $email))
      {
        $corps .= "<tr><td>eMail</td><td> : </td><td>" . $email . "</td></tr>";
      }
      else
      {
        echo("<h3>Le champ eMail est vide ou incorrect !</h3>");
        $valide = false;
      }
      if ($adresse == "")
      {
        echo("<h3>Le champ adresse est vide !</h3>");
        $valide = false;
      }
      else
      {
        $corps .= "<tr><td>Adresse</td><td> : </td><td>" . $adresse . "</td></tr>";
      }
      if (($cp != "") && ereg($exp_reg_cp, $cp))
      {
        $corps .= "<tr><td>Code Postal</td><td> : </td><td>" . $cp . "</td></tr>";
      }
      else
      {
        echo("<h3>Le champ code postal est vide ou incorrect !</h3>");
        $valide = false;
      }
      if ($ville == "")
      {
        echo("<h3>Le champ ville est vide !</h3>");
        $valide = false;
      }
      else
      {
        $corps .= "<tr><td>Ville</td><td> : </td><td>" . $ville . "</td></tr>";
      }
      if ($age == "")
      {
        echo("<h3>Aucun choix n'a été sélectionné pour l'âge !</h3>");
        $valide = false;
      }
      else
      {
        $corps .= "<tr><td>Age</td><td> : </td><td>" . $age . "</td></tr>";
       }
      if (count($langage) <= 1)
      {
        echo("<h3>Aucun langage n'a été sélectionné !</h3>");
        $valide = false;
      }
      else
      {
        $nb = sizeof($langage);
        $s = ($nb > 1) ? "s" : "";
        $corps .= "<tr><td>Langage" . $s . "</td><td> : </td><td> ";
        for($i = 1; $i < $nb; $i++)
        {
          $separateur = $i != $nb - 1 ? ", " : ".</td></tr>";
          $corps .= $langage[$i] . $separateur;
        }
      }
      if ($commentaire == "")
      {
        echo("Le champ commentaire est vide !");
        $valide = false;
      }
      else
      {
        $corps .= "<tr><td>Commentaire</td><td> : </td><td>" 
                                                  . $commentaire . "</td></tr>";
      }
      $corps .= "</table>";

      $entete = "From: " . $prenom . " " . $nom . " <" . $email . ">" . CRLF 
            . "To: Administration <" . $destinataire . ">" . CRLF 
            . "Reply-To: Webmaster <webmaster@laltruiste.com>" . CRLF 
            . "Subject: " . $sujet . CRLF 
            . "Date: " . date("r") . CRLF 
            . "Message-ID: <1255388558@laltruiste.com>" . CRLF 
            . "MIME-Version: 1.0" . CRLF 
            . "Content-Type: text/html; charset=\"iso-8859-1\"" . CRLF 
            . "Content-Transfer-Encoding: 7bit" . CRLF;

      if ($valide == true)
      {
        if (mail($destinataire, $sujet, $corps, $entete))
        {
          echo "<h3>Le message a été envoyé avec succès</h3>"
                  . ""<u>Le contenu du message est le suivant:</u><br>" . $corps;
        }
        else
        {
          echo "<h2 style=\"color:#FF0000; text-align:center\">"
                  . "Une erreur s'est produite !<br>"
                  . "Veuillez réessayer la soumission ultérieurement.<br>Merci.</h2>";
         }
      }
      else
      {
        echo '<a href="javascript:history.go(-1)">Retournez à la page précédente</a>';
      }
    ?>
  </body>
</html>