1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
| <?php
if (isset($_POST['enfant']))
{
$tab_enfants = array();
$champs = array_keys($_POST['enfant']);
//On remet le tableau sous une forme conventionnelle et on supprime les espaces vides
foreach ($_POST['enfant'] as $key => $value)
{
foreach($value as $k => $v)
{
$tab_enfants[$k][$key] = trim($v);
}
}
// Pour supprimer les lignes dont tous les champs n'ont pas été remplis on peut faire :
/*
// Supprime les champs vides
$tab_enfants = array_map('array_filter',$tab_enfants);
$nb_champs = count($champs);
foreach ($tab_enfants as $key => $value)
{
if(count($value) < $nb_champs) unset($tab_enfants[$key]);
}
*/
// Fin du traitement de suppression des lignes dont tous les champs n'ont pas été remplis
// Supprime les lignes dont certains champs n'ont pas été remplis
/*
$champs_obligatoires = array('nom','prenom');
// Supprime les champs vides
$tab_enfants = array_map('array_filter',$tab_enfants);
// Crée un tableau ayant comme index les valeurs de "champs" et des valeurs vides ''
$champ_defaut = array_fill_keys($champs, '');
foreach ($tab_enfants as $key => $value)
{
foreach ($champs_obligatoires as $index)
{
if(!array_key_exists($index, $value)) unset($tab_enfants[$key]);
}
//Rétabli le nombre de champs nécessaires pour une insertion automatique en bdd
if(isset($tab_enfants[$key])) $tab_enfants[$key] = array_replace($champ_defaut, $value);
}
*/
// Fin du traitement de suppression des lignes dont certains champs n'ont pas été remplis
// Ou plus simplement
// Supprime les lignes dont certains champs n'ont pas été remplis
$champs_obligatoires = array('nom','prenom');
foreach ($tab_enfants as $key => $value)
{
foreach ($value as $k => $v)
if(in_array($k,$champs_obligatoires) && $v == '') unset($tab_enfants[$key]);
}
// Fin du traitement de suppression des lignes dont certains champs n'ont pas été remplis
// Si les champs sont nommés avec le même nom que les champs en bdd on peut automatiser la création de la requete
// Id = clé étrangère de la table principale. Pour l'exemple $ID = 12
$ID = 12;
array_unshift($champs,'Id');
$champs_bdd = '('.implode(',',$champs).')';
//On crée la syntaxe pour insérer les champs en bdd :
$tab_value = array();
foreach ($tab_enfants as $value)
{
$valeurs = array();
foreach($value as $v)
{
$valeurs[] = "'".mysql_real_escape_string($v)."'";
}
array_unshift($valeurs,$ID);
$valeurs = '('.implode(',',$valeurs).')';
$tab_value[] = $valeurs;
}
$tab_value = implode(",",$tab_value);
// Ecriture de la requête
$sql = "INSERT INTO enfants ".$champs_bdd." VALUES ".$tab_value."";
// Contrôle pour vérifications
echo $sql;
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<title>Document sans titre</title>
<style type="text/css">
#post_enfant {
display:none;
}
</style>
<script type="text/JavaScript">
<!--
function Add_Input(id_content,id_destination) // Ajoute un champ de tlchargement
{
var content = document.getElementById(id_content);
// Je cherche le tag <p> dans content
var tab_content = content ? content.getElementsByTagName('p') : new Array();
var destination = document.getElementById(id_destination);
if(tab_content.length > 0 && destination)
{
destination.appendChild(tab_content[0].cloneNode(true));
}
}
-->
</script>
</head>
<body>
<div id = "post_enfant">
<p>
<label>nom<input type="text" name="enfant[nom][]" class="enfant" /></label>
<label>prénom<input type="text" name="enfant[prenom][]" class="enfant" /></label>
<label>age<input type="text" name="enfant[age][]" class="enfant" /></label>
</p>
</div>
<form method = "post" action="#">
<div id = "enfants"></div>
<div>
<input type = "button" value="Ajouter un enfant" onClick="Add_Input('post_enfant','enfants')" />
<input type = "submit" value="ok" />
</div>
</form>
</body>
</html> |
Partager