Mise a jour tableau php

Fermé
Mikasmox - 8 juin 2012 à 12:20
 Mikasmox - 8 juin 2012 à 17:01
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
8 juin 2012 à 13:51
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
8 juin 2012 à 16:20
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
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
8 juin 2012 à 15:39
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
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
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
8 juin 2012 à 15:48
Est-ce que le print_r t'affiche bien les valeurs que tu avais saisies dans le formulaire ?
0
j'ai bien les resultats de chaques enregistrements, mais seulement pour le dernier champs : "Subv_Equil"
0
Utilisateur anonyme
8 juin 2012 à 15:54
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
<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
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
Array
(
[B] => 1.15
[C] => 1.15
[E] => 0.2
[F] => 0
)
0
Utilisateur anonyme
8 juin 2012 à 16:03
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
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
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
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