Eléphant du PHP |
312 Messages
23 mars 2006, 18:47
Je viens justement d'être confronté à la même problématique dans le cadre d'un projet, voici grosso-modo mon code.
<?php
session_start();
// On commence par regarder si notre "faux" bouton de submit a été utilisé, autrement dit s'il existe une valeur "fake_submit" dans $_POST
if (isset($_POST['fake_submit'])) {
// L'utilisateur a cliqué sur notre faux bouton, ça veut dire qu'il veut ajouter un "bloc" de plus à son formulaire.
// On regarde donc la variable "num_bloc" sauvée en session pour savoir combien de bloc ça nous fait à afficher. On incrémente cette valeur si elle existe, sinon on la met à 2 (par défaut on affiche donc un seul bloc).
if (isset($_SESSION['num_bloc'])) {
$_SESSION['num_bloc'] += 1;
} else {
$_SESSION['num_bloc'] = 2;
}
}
?>
<form action='post'>
Nom #1 : <input type='text' name='nom1'
<?php
// S'il existe une valeur $_POST['nom1'] (ou $_POST['prenom1']), cela signifie que l'utilisateur a déjà rechargé la page pour ajouter un bloc, donc on remet les valeurs qu'il avait entré avant de recharger la page.
if (isset($_POST['nom1'])) {
echo " value='".$_POST['nom1']."'";
}
echo "/><br/>";
?>
Prénom #1 : <input type='text' name='prenom1'
<?php
if (isset($_POST['prenom1'])) {
echo " value='".$_POST['prenom1']."'";
}
echo "/><br/>";
// On a fini notre premier bloc (obligatoire), maintenant on va afficher autant de bloc qu'il en faudra. En fait, il en faut soit 1 seul parce que l'utilisateur n'a pas cliqué sur "Ajouter utilisateur", soit il en faut plusieurs et pour savoir combien il nous suffit de regarder la variable de session "num_bloc", que nous incrementons à chaque fois que l'utilisateur click sur "Ajouter utilisateur".
if (isset($_SESSION['num_bloc'])) {
for ($i = 2; $i <= $_SESSION['num_bloc']; $i++) {
?>
Nom #<?php echo $i; ?> : <input type='text' name='nom<?php echo $i; ?>'
<?php
if (isset($_POST['nom'.$i])) {
echo " value='".$_POST['nom'.$i]."'";
}
echo "/><br/>";
?>
Prénom #<?php echo $i; ?> : <input type='text' name='prenom<?php echo $i; ?>'
<?php
if (isset($_POST['prenom'.$i])) {
echo " value='".$_POST['prenom'.$i]."'";
}
echo "/><br/>";
}
}
?>
<input type='submit' name='submit' value='Sauver'/><br/>
<input type='submit' name='fake_submit' value='Ajouter utilisateur'/><br/>
</form>
Enfin, voici le bloc se trouvant normalement en tête de fichier (je le met ici pour éviter d'embrouiller les esprits).
Ce bloc est chargé de faire l'insertion des données en base.
if (isset($_POST['submit'])) {
// On vérifie que num_bloc existe, sinon ça signifie qu'il n'y a qu'un seul bloc à insérer
if (isset($_SESSION['num_bloc'])) {
$max = $_SESSION['num_bloc'];
} else {
$max = 1;
}
for ($i = 1; $i <= $max; $i++) {
$requete = "INSERT INTO Utilisateurs ('nom', 'prenom') VALUES (";
$requete .= $_POST['nom'.$i];
$requete .= ", ";
$requete .= $_POST['prenom'.$i];
$requete .= ")";
mysql_query($requete);
}
} else {
// tout le code du premier pavé
}
Et voila !
Note : je n'ai pas testé ce code, le mien est différent (j'utilise QuickForm, DB_Table et ModeliXe, ce qui ne facilitait pas grand chose pour la compréhension du code, donc j'ai faire un équivalent en php "light").