Voici mes premières remarques sur ton code:
Pour la coloration syntaxique de [$i] ce n'est pas grave elle ne sera jamais comme les autres vaiables php vu que le $i est intégré dans une chaine de caractère entre guillemets "" (c'est une concaténation). Mais tu peux faire sortir $i de la chaine pour faire une concaténation normale moins coûteuse en temps d'exécution en utilisant les points, comme :
echo "....... name='T[" . $i . "][client_renseignement1]' ...";
Aussi je te conseille d'utiliser des guillemets au lieu des apostrophes (quotes) pour les valeurs d'attributs HTML pour respecter le standard XHTML et éviter les problèmes avec les valeurs textes ayant des apostrophes comme : "L'arbre de Noël".
Secondo, j'ai remarqué la répétition d'une même requête 2 fois dans ton code, il s'agit de celle-là:
$req_clients=mysql_query("SELECT * FROM utilisateurs LEFT JOIN clients ON clients.cli_util=utilisateurs.util_id JOIN client_service ON clients.cli_id=client_service.client_service_client JOIN services ON client_service.client_service_service=services.servi_id WHERE util_entreprise='".$ent['ent_id']."'");
La première fois elle est exécutée afin de récupérer le nombre d'enregistrements pour tester si le traitement peut être effectué et la seconde fois elle est ré-exécutée et utilisée pour construire les lignes de la table, il s'agit ici de cette requête:
$req_clients=mysql_query("SELECT DISTINCT * FROM utilisateurs LEFT JOIN clients ON clients.cli_util=utilisateurs.util_id JOIN client_service ON clients.cli_id=client_service.client_service_client JOIN services ON client_service.client_service_service=services.serv_id WHERE util_entreprise='".$ent['ent_id']."' ORDER BY util_nom, util_prenom");
En comparant donc les 2 requête on comprend qu'elle sont identiques à quelques différences prés au niveau de l'organisation interne des enregistrements (DISTINCT et ORDER BY) différences qui à mon avis n'ont pas d'effet majeur sur les résultats.
Mais en comparant les champs utilisée, je suis tombé sur 2 champs qui ne sont pas écrit de la même façon :
services.servi_id et
services.serv_id S'agit-il de 2 champs différents ou bien c'est une erreur? Moi je pense que c'est une erreur car tu a l'habitude d'utiliser dans ton programme le terme
servi plutôt que
serv.
Dans le cas où ces 2 requêtes sont effectivement les mêmes, on peut simplifier en enlevant la deuxième et se contentant d'une seule exécution au début du programme.
Par ailleurs, j'ai testé ton programme et ça marche en corrigeant
services.serv_id par
services.servi_id. Et en rajoutant un champ caché (hidden) pour faire passer le n° du client pour réaliser l'enregistrement des renseignement dans la base:
Voici donc le corrigé:
<?php
$req_clients=mysql_query("SELECT DISTINCT * FROM utilisateurs LEFT JOIN clients ON clients.cli_util=utilisateurs.util_id JOIN client_service ON clients.cli_id=client_service.client_service_client JOIN services ON client_service.client_service_service=services.servi_id WHERE util_entreprise='".$ent['ent_id']."' ORDER BY util_nom, util_prenom");
$res_clients = mysql_num_rows ($req_clients);
if($res_clients == 0 )
{
echo "<p class='simple_alerte' align='center' valign='middle'><strong>Attention ! Vous devez d'abord avoir complété les données de votre entreprise avant de pouvoir accéder à cette enquête !</strong></p>";
}
else
{
echo "";
}
?>
<?php
if ($date_jour>=$peri2['peri_debut'])
{
?>
<form action="saisie2.php" method="post">
<table border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td align="center" valign="top">
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td align="center" valign="top">
<!-- Contenu du tableau de GAUCHE-->
<table border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="4" height="4" background="img/cadre/hg.gif"></td>
<td height="4" background="img/cadre/h.gif"></td>
<td width="4" height="4" background="img/cadre/hd.gif"></td>
</tr>
<tr>
<td width="4" background="img/cadre/g.gif"></td>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td colspan="12" class="tabtitre">Enquête n°1</td>
</tr>
<td width="15%" valign="center">client </td>
<td width="8%" valign="center">Service </td>
<td width="15%" valign="center">Nom et Prénom
de la personne
renseignant l'enquête
(si différente du client) </td>
<td width="15%" valign="center">Renseignement1 </td>
<td width="15%" valign="center">Renseignement2 </td>
<td width="15%" valign="center">Renseignement3 </td>
<td width="4%" valign="center">Renseignement4</td>
<td width="4%" valign="center">Renseignement5</td>
<td width="4%" valign="center">Renseignement6</td>
<td width="4%" valign="center">Renseignement7</td>
<td width="4%" valign="center">Renseignement8</td>
<tr>
<td colspan="11" class="ligne"></td>
</tr>
<?php
$k = 0;
$i = 0;
while($row_clients = mysql_fetch_assoc($req_clients))
{
if ($k==0)
{$fond="#EEEEEE";}
else
{$fond="#FFFFFF";}
echo "<tr bgcolor='".$fond."'>";
echo "<td class='simpleg' height='30'><strong><input type='hidden' name='cli_id' value='".$row_clients["cli_id"]."' />".$row_clients["util_prenom"]." ".$row_clients["util_nom"]."</strong></td>";
echo "<td class='simpleg' height='10'>";
$req_services2 = mysql_query ("SELECT * FROM client_service JOIN services ON client_service.client_service_service=services.servi_id WHERE client_service_client='".$row_clients['cli_id']."'");
while($services2 = mysql_fetch_assoc($req_services2))
{
{echo " ".$services2['servi_intitule']." <br/>";}
}
echo "</td>";
echo "<td class='simplec'><input type='text' name='T[$i][client_renseignement1]' size='15' value='".$row_clients['client_renseignement1']."'/></td>";
echo "<td class='simplec'>
<select name='T[$i][client_renseignement2]' size='1' value='".$row_clients['client_renseignement2']."'/>
<option>".$row_clients['client_renseignement2']."</option>
<option>Valeur1</option>
<option>Valeur2</option>
<option>Valeur3</option>
</select></td>";
echo "<td class='simplec'>
<select name='T[$i][client_renseignement3]' size='1' value='".$row_clients['client_renseignement3']."'/>
<option>".$row_clients['client_renseignement3']."</option>
<option>Valeur1</option>
<option>Valeur2</option>
<option>Valeur3</option>
<option>Valeur4</option>
</select></td>";
echo "<td class='simplec'>
<select name='T[$i][client_renseignement4]' size='1' value='".$row_clients['client_renseignement4']."'/>
<option>".$row_clients['client_renseignement4']."</option>
<option>Valeur1</option>
<option>Valeur2</option>
<option>Valeur3</option>
<option>Valeur4</option>
<option>Valeur5</option>
<option>Autres</option>
</select></td>";
echo "<td class='simplec'><input type='text' name='T[$i][client_renseignement5]' style='text-align:center' size='2' value='".$row_clients['client_renseignement5']."'/></td>";
echo "<td class='simplec'><input type='text' name='T[$i][client_renseignement6]' style='text-align:center' size='2' value='".$row_clients['client_renseignement6']."'/></td>";
echo "<td class='simplec'><input type='text' name='T[$i][client_renseignement7]' style='text-align:center' size='2' value='".$row_clients['client_renseignement7']."'/></td>";
echo "<td class='simplec'><input type='text' name='T[$i][client_renseignement8]' style='text-align:center' size='2' value='".$row_clients['client_renseignement8']."'/></td>";
$k = 1 - $k;
$i ++;
}
?>
</table>
</td>
<td width="4" background="img/cadre/d.gif"></td>
</tr>
<tr>
<td width="4" height="4" background="img/cadre/bg.gif"></td>
<td height="4" background="img/cadre/b.gif"></td>
<td width="4" height="4" background="img/cadre/bd.gif"></td>
</tr>
</table>
</td>
<tr>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td align="center"><input name="Valider" type="submit" value="Valider" /></td>
</tr>
</table>
</form>
<?php
}
?>
Et le programme de validation du formulaire "saisie2.php":
<pre>
<?php
//Dump des paramétres POST pour le débogage
print_r($_POST);
// Récupérer le tableau T transmis par le formulaire => une ligne du tableau = données d'un client
$T = isset($_POST["T"]) ? $_POST["T"] : null;
if ($_POST['Valider']){
$connexion = mysql_connect('localhost', 'root');
mysql_select_db('test');
if (is_array($T)) foreach ($T as $index=>$client){
//exécuter la requête Update sur la table clients
$sql = sprintf("UPDATE clients SET client_renseignement1 = '%s', client_renseignement2 = '%s', client_renseignement3 = '%s',
client_renseignement4 = '%s', client_renseignement5 = '%s', client_renseignement6 = '%s', client_renseignement7 = '%s',
client_renseignement8 = '%s' WHERE clients.cli_id = '%s' ", $client['client_renseignement1'], $client['client_renseignement2'],
$client['client_renseignement3'], $client['client_renseignement4'], $client['client_renseignement5'],
$client['client_renseignement6'], $client['client_renseignement7'], $client['client_renseignement8'],
$_POST['cli_id']);
echo "<p>" . $sql . "</p>"; //débug
if (mysql_query($sql)) echo "<p>Enregistrement effectué pour le client ".$_POST['cli_id']."</p>";
else echo "<p>Erreur d'enregistrement pour le client ".$_POST['cli_id']."<br />(Détail de l'erreur: " . mysql_error() .")</p>";
}
mysql_close();
}
?>
</pre>