Bonjour, Voici l'explication :
1. D'abord je vais remplacer le nom "array" que t'as choisi par un nom plus lisible comme "tab_mois".
2. Du coup, ton formulaire doit envoyer par POST des champs sous forme de tableau comme :
tab_mois['2014-JAN'][1], tab_mois['2014-JAN'][2], tab_mois['2014-JAN'][3], tab_mois['2014-FEV'][1], tab_mois['2014-FEV'][2], tab_mois['2014-FEV'][3], ...
C'est pour cela qu'on doit coder le tableau comme ça dans HTML :
$mois = $donnees->mois;
echo '<tr><input type=hidden name="id" value="\''.$donnees->ID_detail,'\'"/>
<td> '.$mois.'</td>
<td> <input type="text" name="tab_mois['.$mois.'][1]"/> </td>
<td> <input type="text" name="tab_mois['.$mois.'][2]"/> </td>
<td> <input type="text" name="tab_mois['.$mois.'][3]"> </td> </tr>';
3. En PHP, on va donc recevoir un tableau via $_POST nommé : $_POST["tab_mois"] qui contient un premier niveau listant les mois : ['2014-JAN'], ['2014-FEV'], ...
et dans chaque nœud/mois on retrouve 3 cases de valeurs : [1], [2] et [3] (correspondant aux champs input du formulaire)
La structure est donc comme ceci:
$_POST["tab_mois"] = array ( ['2014-JAN'] => array ( [1]=>'blabla' , [2]=>'blabla' , [3]=>'blabla' ) , ['2014-FEV'] => array ( [1]=>'blabla' , [2]=>'blabla' , [3]=>'blabla' ), ...
)
4. On peut donc récupérer les 3 données de chaque mois en parcourant le tableau $_POST["tab_mois"] par un foreach. Comme ça:
$tab_mois = isset($_POST['tab_mois']) ? $_POST['tab_mois'] : null;
foreach( $tab_mois as $mois=>$donnees ){ //ici: $donnees contient les 3 valeurs [1],[2] et [3] de l'index $mois
$update = $bdd->prepare('UPDATE `detail_affaire` SET `Etude_p`=:etude,`Chantier_p`=:chantier,`Mes_p`= :mes WHERE `ID_detail` =:id');
$update->execute(array('etude'=>$donnees[1],
'chantier'=>$donnees[2],
'mes'=>$donnees[3],
'id'=>$_POST[id]));
}
Voici donc le correctif :
<?php
include("connection.php");
if(isset($_GET['id']) && $_GET['id'] != "0")
{
?>
<html>
<link rel="stylesheet" type="text/css" href="css.css" />
<div class="datagrid"><form method="post" action="ajoutdetail.php"><table> <thead><tr><th>Mois</th><th>Etude Prévisionelle (en %)</th><th>Chantier Prévisionelle (en %)</th><th>Mise en Service Prévisionelle (en %)</th></tr></thead>
<tbody>
<?php
$format = "%y-%b";
$i=0;
$nb_detail = $bdd->query('SELECT `ID_detail`,DATE_FORMAT(`Mois`,\''.$format.'\') as mois FROM `detail_affaire` WHERE `ID_affaire` = \''.$_GET['id'].'\'');
while($donnees = $nb_detail->fetch(PDO::FETCH_OBJ)){
$mois = $donnees->mois;
echo '<tr><input type=hidden name="id" value="\''.$donnees->ID_detail,'\'"/>
<td> '.$mois.'</td>
<td> <input type="text" name="tab_mois['.$mois.'][1]"/> </td>
<td> <input type="text" name="tab_mois['.$mois.'][2]"/> </td>
<td> <input type="text" name="tab_mois['.$mois.'][3]"> </td> </tr>';
$i = $i+1;
}
?>
<tr><center><input type='submit' name='savedetail' value='Enregistrer'/></center></tr>
</tbody><table></form></div></html>
<?php
}
//---------------------------------------------------------------------//
// debug : affichage du postage (à désactiver si tout est ok)
//--------------------------------------------------------------------//
echo "<pre>"; print_r($_POST); echo "</pre>";
//--------------------------------------------------------------------//
//Mise à jour de la BD
$tab_mois = isset($_POST['tab_mois']) ? $_POST['tab_mois'] : null;
if(isset($_POST['savedetail']) && $_POST['savedetail'] != "0" && $tab_mois != null){
foreach( $tab_mois as $mois=>$donnees){ //ici: $donnees contient les 3 valeurs [1],[2] et [3] de l'index $mois
$update = $bdd->prepare('UPDATE `detail_affaire` SET `Etude_p`=:etude,`Chantier_p`=:chantier,`Mes_p`= :mes WHERE `ID_detail` =:id');
$update->execute(array('etude'=>$donnees[1],
'chantier'=>$donnees[2],
'mes'=>$donnees[3],
'id'=>$_POST[id]));
}
}