Mise a jour tableau php

Mikasmox -  
 Mikasmox -
Bonjour,
Voila, j'ai un probleme, j'ai un tableau dans lequel je récupère des données de ma BDD, mais sachant qu'il y a plusieurs enregistrement que j'affiche avec while ($data= mysql_fetch_array) je ne sais pas comment mettre a jour ma base de donnée lorsque je modifie certaines informations des enregistrements.
Voici mon code :



while($dataAffTar = mysql_fetch_array($resultAffTar))
{
$cat_tarif=$dataAffTar['cat_tarif'];
$tarif_adh = $dataAffTar['tarif_adh'];
$tarif_patr = $dataAffTar['tarif_patr'];
$Subv_Admin = $dataAffTar['Subv_Admin'];
$Subv_Equil = $dataAffTar['Subv_Equil'];
echo "
<tr>
<td>
<input type ='text' name='coutRepas' value='$coutRepas'>
</td>
<td>
<input type ='text' name='cat_tarif' value='$cat_tarif'>
</td>
<td>
<input type ='text' name='tarif_adh' value='$tarif_adh'>
</td>
<td>
<input type ='text' name='tarif_patr' value='$tarif_patr'>
</td>
<td>
<input type ='text' name='Subv_Admin' value='$Subv_Admin'>
</td>
<td>
<input type ='text' name='Subv_Equil' value='$Subv_Equil' size='5'>
</td>
</tr>";

}
A voir également:

9 réponses

Utilisateur anonyme
 
Bonjour

Ici on ne voit que la création du formulaire, pas son traitement.
Déjà, il te faut des balises <form> et </form>
Mais tu as un gros problème : tu donnes les même nom (par exemple coutRepas) sur toutes les lignes de ton formulaire. Donc tu n'en récupèreras qu'un seul de chaque type, quel que soit le nombre de lignes affichées. Et tu ne sauras même pas à quel enregistrement il correspond.
Il faut que tu crées des noms de champs différents à chaque ligne. Sers-toi de l'id de chaque enregistrement. Et pour les récupérer plus facilement, appelle tous tes champs champ[$id]['coutRepas'], champ[$id]['cat_tarif'],

...
$id = $dataAffTar['id']; 
echo "
<tr>
<td>
<input type ='text' name='champ[$id]['coutRepas']' value='$coutRepas'>
</td>... 

Comme ça, tu les récupères facilement :
if (isset($_POST['champ'])) {
  foreach ($_POST['champ'] as $id=>$champ) {
    // là tu retrouves les $champ['coutRepas'],$champ['cat_tarif']... associés à l'enregistrement $id
1
Utilisateur anonyme
 
Je viens de m'apercevoir de deux erreurs :(
Si ton id n'est pas numérique, il vaudrait miex le mettre entre guillemets.
Et surtout (mea culpa) je t'ai fait écrire pour tes input un 'name' incorrect.
En effet, si on a name='qqchose le name s'arrête à l'apostrophe suivante. Or, je t'ai fait mettre des apostrophes autour de cat_tarif, etc... Le nom du champ s'arrête donc avant cat_tarif

->
echo "
<tr>
<td align='center'>
<input type ='text' name='champ[\"$id\"][\"cat_tarif\"]' value='$cat_tarif'>
</td> ...

Ça devrait aller mieux
1
Utilisateur anonyme
 
D'après ton formulaire, on peut modifier la clé primaire aussi, ça complique la chose car si tu la modifies, il faut faire un certain nombre de vérifs. En particulier, imagine que tu essaye de donner à un enregistrement une valeur de clé primaire qui est déjà attribuée à un autre...
Je vais faire semblant de ne pas l'avoir remarqué.

if (isset($_POST['champ'])) { 
  foreach ($_POST['champ'] as $id=>valeurs) { 
    // il faudrait d'abord vérifier que les valeurs $valeur['cat_tarif'],$valeur['coutRepas']... sont acceptables 
    $req="UPDATE categorie SET cat_tarif='".mysql_real_escape_string($valeurs['cat_tarif'])."'," 
"coutRepas='".mysql_real_escape_string($valeurs['coutRepas'])."'," 
   ... 
  WHERE cat_tarif='".mysql_real_escape_string($id)) 
  }// foreach 
} // if (isset

En faisant bien attention aux ' pour encadrer les valeurs (non numériques au moins) et aux virgules pour séparer les variables successives (pas de virgule entre la dernière et le WHERE et sans oublier l'espace avant le where
[Edit : j'ai corrigé des parenthèses qui n'avaient rien à faire autour de $valeurs(['cat_tarif']). J'espère qu'il ne reste pas trop de fautes...
1
Utilisateur anonyme
 
Tu as bien mis ça dans le script qui traite le formulaire ?
Tu devrais retrouver les valeurs qu'il y avait dans le formulaire quand il a été envoyé.

Peux-tu ajouter, au début du script qui traite le formulaire :
echo '<pre>';
var_dump($_POST);
echo '</pre>';

pour voir ce que le formulaire t'envoie vraiment.
0
Mikasmox
 
J'ai mis ça en m'aidant d'autres forum, mais je ne sais pas comment naviguer entre les id :
if (isset($_POST['champ']))
{
$champ=array();
$champ=$_POST['champ'];
echo '<pre>';
print_r($_POST['champ']);
echo '</pre>';
foreach ($_POST['champ'] as $id=>$value)
{

// echo $champ['coutRepas']." ".$champ['tarif_adh']." ". $champ['tarif_patr'];
echo '<pre>';
print_r($value);
echo '</pre>';
}
0
Mikasmox
 
en gros, j'ai bien les resultats de chaques enregistrements, mais seulement pour le dernier champs : "Subv_Equil"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
Est-ce que le print_r t'affiche bien les valeurs que tu avais saisies dans le formulaire ?
0
Mikasmox
 
j'ai bien les resultats de chaques enregistrements, mais seulement pour le dernier champs : "Subv_Equil"
0
Utilisateur anonyme
 
Alors tu as dû te tromper au niveau de la création du formulaire. Peux-tu montrer le code qui crée le formulaire ?
0
Mikasmox
 
<form action="DonneeAppli.php?action=enregistrer" method= "post">

<!--Tableau des informations tarifaires-->
<table border="1">
<tr>
<th colspan="6">
INFORMATIONS TARIFAIRES
</th>
</tr>
<tr>

<th>
Categories tarifaires
</th>
<th>
Cout du repas
</th>
<th>
Tarif usagers/categorie
</th>
<th>
Subvention Employeur/categorie
</th>
<th>
Prix unitaire subvention Admin.
</th>
<th>
Prix unitaire subvention d'equilibre
</th>
</tr>
<?php
$reqAffTar= "SELECT cat_tarif, tarif_adh, tarif_patr, Subv_Admin, Subv_Equil FROM categorie";
$resultAffTar = mysql_query($reqAffTar) or die (mysql_error( ));

while($dataAffTar = mysql_fetch_array($resultAffTar))
{
$id=$dataAffTar['cat_tarif'];
$cat_tarif=$dataAffTar['cat_tarif'];
$tarif_adh = $dataAffTar['tarif_adh'];
$tarif_patr = $dataAffTar['tarif_patr'];
$Subv_Admin = $dataAffTar['Subv_Admin'];
$Subv_Equil = $dataAffTar['Subv_Equil'];
echo "
<tr>
<td align='center'>
<input type ='text' name='champ[$id]['cat_tarif']' value='$cat_tarif'>
</td>
<td>
<input type ='text' name='champ[$id]['coutRepas']' value='$coutRepas'>
</td>
<td>
<input type ='text' name='champ[$id]['tarif_adh']' value='$tarif_adh'>
</td>
<td>
<input type ='text' name='champ[$id]['tarif_patr']' value='$tarif_patr'>
</td>
<td>
<input type ='text' name='champ[$id]['Subv_Admin']' value='$Subv_Admin'>
</td>
<td>
<input type ='text' name='champ[$id]['Subv_Equil']' value='$Subv_Equil' size='5'>
</td>

</tr>";

}

?>
</table>
</form>

if($_GET['action'] == "enregistrer")
{
if (isset($_POST['champ']))
{
$champ=array();
$champ=$_POST['champ'];
echo '<pre>';
print_r($_POST['champ']);
echo '</pre>';
foreach ($_POST['champ'] as $id=>$value)
{

// echo $champ['coutRepas']." ".$champ['tarif_adh']." ". $champ['tarif_patr'];
echo '<pre>';
print_r($value);
echo '</pre>';
}
}
0
Mikasmox
 
Voila, j'ai mis les parties du code en relation avec le sujet
et donc ça ne m'affiche les que les valeurs de la partie :
<td>
<input type ='text' name='champ[$id]['Subv_Equil']' value='$Subv_Equil' size='5'>
</td>
0
Mikasmox
 
Array
(
[B] => 1.15
[C] => 1.15
[E] => 0.2
[F] => 0
)
0
Utilisateur anonyme
 
Je vois que tu as utilisé cat_tarif comme id, j'espère que cat_tarif est bien différent pour chaque ligne de ta base.
Sinon, ça a l'air correct, peux tu recopier ce qu'affiche le print_r($_POST['champ']); (et supprimer le print_($value) pour l'instant)
0
Mikasmox
 
Oui, cat_tarif est clé primaire de la base de donnée.
Voila ce que le print_r($_POST['champ']);
Array
(
[B] => 1.15
[C] => 1.15
[E] => 0.2
[F] => 0
)
Ce sont les valeurs de la derniere colonne du tableau afficher en html, qui porte le nom:
name='champ[$id]['Subv_Equil']'
0
Mikasmox
 
Yes ça marche! :)
Array
(
["B"] => Array
(
["cat_tarif"] => B
["coutRepas"] => 7.73
["tarif_adh"] => 3.15
["tarif_patr"] => 4.58
["Subv_Admin"] => 1.15
["Subv_Equil"] => 1.15
)

["C"] => Array
(
["cat_tarif"] => C
["coutRepas"] => 7.73
["tarif_adh"] => 3.26
["tarif_patr"] => 4.47
["Subv_Admin"] => 1.15
["Subv_Equil"] => 1.15
)

["E"] => Array
(
["cat_tarif"] => E
["coutRepas"] => 7.73
["tarif_adh"] => 4.40
["tarif_patr"] => 3.30
["Subv_Admin"] => 0
["Subv_Equil"] => 45
)

["F"] => Array
(
["cat_tarif"] => F
["coutRepas"] => 7.73
["tarif_adh"] => 5.08
["tarif_patr"] => 2.65
["Subv_Admin"] => 0
["Subv_Equil"] => 1
)

Est-ce que tu pourrais me donnais un exemple pour extraire les informations afin de pouvoir mettre a jour ma base de donnée?
0
Mikasmox
 
Merci pour tout!
Oui dans le formulaire, on peut modifier la clé primaire, je sais c'est très mauvais, mais j'ai fait ça pour pouvoir récupérer un "name" à travers un $_POST pour faciliter la requête where...=$cat_tarif.
Je n'ai pas trouver d'autres alternatives, si je la met juste en texte, je ne sais pas comment la récupérer en $_POST
0