[PHP] Astuce pour faire des formulaires et gagner du temps
- Le Jeu 20 nov 2008
- Dans Développement web
Il n'y a rien de plus long et de plus fastidieux dans le cadre d'un développement que faire ces indispensables pages de formulaires. Ces pages permettent d'ajouter/de modifier du contenu dans la base de données. Ce n'est pas du dev brut puisque c'est ni plus ni moins que du HTML, mais cela peut se réveler assez long et il est facile de faire des erreurs (id qui ne correspond pas au label, etc.).
Je propose donc une solution en PHP qui vous fera gagner énormément de temps. L'astuce est toute bête : faire des fonctions php avec les différents types de champs formulaire (input text, file, textarea, select, ...).
Voici un exemple pour un champ input text :
<?php
function InputText($id,$label,$r,$aide="",$onkeyup="")
{
$b="<p>
<label for=\"$id\">$label : ";
if($aide!='') { $b.= aide($aide); }
$b.="</label>
<input type=\"text\" id=\"$id\" name=\"$id\" ";
if($onkeyup!='') $b.="onkeyup=\"$onkeyup\" onblur=\"$onkeyup\"";
if($r[$id]!='') { $b.="value=\"".$r[$id]."\" "; }
$b.="class=\"textfield\" />
</p>";
return($b);
}
?>
Voici comment l'utiliser :
- $id : ID et NAME du champ (qui sont identiques)
- $label : intitulé du champ
- $r : tableau sql (ou autre) de données permettant de placer une valeur par défaut si on se trouve dans le cas d'une modification
- $aide (facultatif) : permet d'afficher une bulle d'aide liée au champ (fait appel à une fonction aide() et à un style css
- $onkeyup (facultatif) : permet d'attribuer une ou plusieurs fonctions javascript lors de la saisie et la sortie du champ
Et voici un exemple :
<?php
echo InputText("titre","Titre du message",$requete,"saisissez le titre du message","fonctionJavascript(this.value);");
?>
Je vous donne d'autres exemples dans la suite de ce billet.
Il n'y a rien de plus long et de plus fastidieux dans le cadre d'un développement que faire ces indispensables pages de formulaires. Ces pages permettent d'ajouter/de modifier du contenu dans la base de données. Ce n'est pas du dev brut puisque c'est ni plus ni moins que du HTML, mais cela peut se réveler assez long et il est facile de faire des erreurs (id qui ne correspond pas au label, etc.).
Je propose donc une solution en PHP qui vous fera gagner énormément de temps. L'astuce est toute bête : faire des fonctions php avec les différents types de champs formulaire (input text, file, textarea, select, ...).
Voici un exemple pour un champ input text :
<?php
function InputText($id,$label,$r,$aide="",$onkeyup="")
{
$b="<p>
<label for=\"$id\">$label : ";
if($aide!='') { $b.= aide($aide); }
$b.="</label>
<input type=\"text\" id=\"$id\" name=\"$id\" ";
if($onkeyup!='') $b.="onkeyup=\"$onkeyup\" onblur=\"$onkeyup\"";
if($r[$id]!='') { $b.="value=\"".$r[$id]."\" "; }
$b.="class=\"textfield\" />
</p>";
return($b);
}
?>
Voici comment l'utiliser :
- $id : ID et NAME du champ (qui sont identiques)
- $label : intitulé du champ
- $r : tableau sql (ou autre) de données permettant de placer une valeur par défaut si on se trouve dans le cas d'une modification
- $aide (facultatif) : permet d'afficher une bulle d'aide liée au champ (fait appel à une fonction aide() et à un style css
- $onkeyup (facultatif) : permet d'attribuer une ou plusieurs fonctions javascript lors de la saisie et la sortie du champ
Et voici un exemple :
<?php
echo InputText("titre","Titre du message",$requete,"saisissez le titre du message","fonctionJavascript(this.value);");
?>
Pour info, voici ma fonction aide() :
<?php
function aide($texte) {
return "<a href=\"#null\" class=\"aider\"><img src=\"im/layout/help.png\" alt=\"aide\" width=\"16\" height=\"18\" border=\"0\" align=\"absmiddle\" /><span>".$texte."</span></a>";
}
?>
Et le CSS qui l'accompagne :
/*bulle aide*/
a.aider{
position: relative;
text-decoration: none;
cursor: help;
}
a.aider span{
display: none;
}
a.aider:hover{
background: none;
z-index: 500;
}
a.aider:hover span{
display: inline;
position: absolute;
top: 2em;
left: 1em;
padding: 5px;
width: 300px;
border: 1px solid #ccc;
background: #f9f4ec;
text-align: left;
font-weight:normal;
font-size: .8em;
line-height: 1.2em;
color: #000;
}
Voici un autre exemple pour des boutons radio :
<?php
function Radio($name,$label,$r,$liste,$aide="",$onclick="")
{
$b="<p class=\"label\">$label : ";
if($aide!='') { $b.= aide($aide); }
$b.="</p>";
$i=1;
$b.="<p>";
foreach($liste as $k=>$v)
{
if($i!='1') $b.=" ";
$b.="<input type=\"radio\" name=\"".$name."\" id=\"".$name."_$i\" value=\"$k\"";
if($onclick!='') $b.="onclick=\"$onclick\"";
if($r[$name]==$k OR ($r[$name]=='' && $i==1)) { $b.=" checked=\"checked\""; }
$b.=" />
<label for=\"".$name."_$i\" class=\"radioLabel\">$v</label>";
$i++;
}
$b.="</p>";
return($b);
}
?>php
L'utilisation de cette fonction est très simple :
<?
echo Radio("genre","Choisissez votre civilité",$requete,array("M"=>"Monsieur","MME"=>"Madame","MELLE"=>"Mademoiselle"))
?>
Un autre exemple avec un SELECT issu d'un tableau :
<?php
function SelectArray($id,$label,$r,$liste,$aide="",$onchange="")
{
$b="<p>
<label for=\"$id\">$label : ";
if($aide!='') { $b.= aide($aide); }
$b.="</label>
<select id=\"$id\" name=\"$id\"";
if($onchange!='') $b.=" onchange=\"$onchange\"";
$b.=">";
foreach($liste as $k=>$v)
{
$b.="<option value=\"$k\"";
if($r[$id]==$k) { $b.=" selected=\"selected\""; }
$b.=" />$v</option>";
$i++;
}
$b.="</select></p>";
return($b);
}
?>
Un dernier exemple, ce champ select est couplé à une table SQL et a pour but d'afficher les valeurs de la colonne $champ :
<?
<
function Select($id,$label,$r,$table,$champ,$aide="",$vide="non",$onchange="")
{
$b="<p>
<label for=\"$id\">$label : ";
if($aide!='') { $b.= aide($aide); }
$b.="</label>
<select id=\"$id\" name=\"$id\"";
if($onchange!='') $b.=" onchange=\"$onchange\"";
$b.=">";
if($vide=='oui') $b.="<option value=\"\">---</option>";
if($table=='typevente') $ordre="ordre"; else $ordre="id";
$p=query_sql($table,"id,$champ","","","$ordre ASC");
while($r2 = boucle_sql($p))
{
$b.="<option value=\"$r2[id]\"";
if($r2[id]==$r[$id]) { $b.=" selected=\"selected\" "; }
$b.=">$r2[$champ]</option>"."\n";
}
$b.="</select>
</p>";
return($b);
}
?>
Ces petites fonctions rapides à coder permettent un gain de temps énorme dans un développement. Ainsi, pour faire un formulaire de 10 champs, cela prend uniquement 10 lignes. De ce fait, votre code est plus propre et plus lisible et vous vous y retrouverez mieux.
Bien sur, je vous conseille de coder vos propres fonctions car les miennes utilisent des fonctions php et des styles css particuliers.