PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 03-08-2010 19:57:03

arty_pop
Membre
Inscription : 03-08-2010
Messages : 7

Modifier plusieurs champs

Bonjour,
Je cherche un moyen de mettre à jour plusieurs champs de ma base de données en même temps… Je m'explique:
J'affiche le contenu d'une table grâce au code suivant:

    while ($dataAlbum = mysql_fetch_assoc($resAlbum)) {
      $idAlbum  = $dataAlbum[idAlbum];
      $album    = $dataAlbum[album];
     
      $s .= '<input type="text" value="'.$album.'" id="'.$idAlbum.'" /><br />'."\n";
     
    } // fin while ($dataAlbum = mysql_fetch_assoc($resAlbum)) {
 
    echo '<form method="post">'."\n";
    echo $s;
    echo '<input type="submit" name="ok" value="Modifier les noms" />'."\n";
    echo '<input type="hidden" name="v" value="y" />'."\n";
    echo '</form>'."\n";
 

Tout se passe bien, je récupère correctement les données

<form method="post">
<input type="text" value="Les sorties" id="3" />
<input type="text" value="Les ateliers" id="9" />
<input type="text" value="Les fêtes" id="10" />
<input type="submit" name="ok" value="Modifier les noms" />
<input type="hidden" name="v" value="y" />
</form>

Je souhaite, lorsqu'on clique sur le submit, que toutes les values modifiées le soient dans ma base de données.

En d'autres termes, comment écrire "au clic sur le submit, modifie tous les albums correspondants aux idAlbums"?

Merci pour vos réponses ou vos pistes smile

Hors ligne

#2 03-08-2010 20:33:27

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Modifier plusieurs champs

Attention ! L'id est fait pour référencer des classes uniques en CSS !
Ce n'est aucunement une information que tu retrouveras à la réception de ton formulaire.

Tu peux cependant faire un truc comme cela :

<input type="text" name="texte_3" value="Les sorties" />

Et à la réception du formulaire tester toutes les clés du tableau $_POST pour trouver des éléments de la forme "texte_numero".
Ensuite un explode() sur la clé avec le caractère "_" te séparera l'id du reste.

Besoin de plus d'explications ou tu as compris ?

Concernant l'ajout lorsque tu as tes ids le mieux serai de te former un tableau avec l'id de l'album en clé et en valeur le nom de l'album.
Et tu n'as plus qu'à faire une boucle parcourant ton tableau et faisant ta requête UPDATE.

Hors ligne

#3 03-08-2010 20:42:13

arty_pop
Membre
Inscription : 03-08-2010
Messages : 7

Re : Modifier plusieurs champs

Merci pour ta réponse rapide, xTG.
Je crois que j'ai globalement compris, mais pour être sûr, si tu veux/peux prendre le temps de donner un peu plus d'explications, elles seront les bienvenues smile

Notamment sur:

xTG a écrit :

Concernant l'ajout lorsque tu as tes ids le mieux serai de te former un tableau avec l'id de l'album en clé et en valeur le nom de l'album.
Et tu n'as plus qu'à faire une boucle parcourant ton tableau et faisant ta requête UPDATE.

Encore merci.

Hors ligne

#4 03-08-2010 22:58:14

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Modifier plusieurs champs

Prenons une table Animal (id, nom) et les enregistrements suivants :
1 Chien
2 Chat
3 Zèbre

Nous avons posté notre formulaire afin d'obtenir :
1 Formulaire
2 PHPDébutant
3 arty_pop

Donc avec la méthode que je t'ai proposé tu auras dans $_POST :
array( 'texte_1' => "Formulaire", 'texte_2' => "PHPDébutant", 'texte_3' => "arty_pop");

Ensuite pour la clé on peut l'obtenir soit avec la fonction key() (que je n'apprécie pas trop) ou bien dans une boucle foreach($tableau as $clé => $valeur)
Donc on effectue le explode sur chaque clé et tu obtiens un tableau avec : array( "texte", "id" )
Et encore mieux que ce que j'ai proposé (c'était sur le vif sans trop réfléchir) tu as à ta disposition toutes les informations non ? L'id et la nouvelle valeur.
Donc tu effectue ta requête et le tour est joué. smile

Hors ligne

#5 04-08-2010 07:13:41

arty_pop
Membre
Inscription : 03-08-2010
Messages : 7

Re : Modifier plusieurs champs

Merci.
Mmmh… Donc j'avais bien compris, mais j'ai beaucoup de mal avec foreach($tableau as $clé => $valeur); j'ai du mal à intégrer ce fonctionnement.
J'essaie ça ce soir, je reposte pour dire comment ça c'est passé dès que j'ai avancé smile

Hors ligne

#6 04-08-2010 21:05:29

arty_pop
Membre
Inscription : 03-08-2010
Messages : 7

Re : Modifier plusieurs champs

Bon, j'arrive à un début de quelque chose…

Mon formulaire ressemble à ça:

<form method="post">
<input type="text" value="Les sorties" name="3" /><br />
<input type="text" value="Les ateliers" name="9" /><br />
<input type="text" value="Les fêtes" name="10" /><br />
<input type="hidden" name="v" value="y" /><br />
<input type="submit" name="ok" value="Modifier les noms" />
</form>

Je précise que j'ai besoin de l'<input type"hidden">.

un print_r($_POST) me renvoie

Array ( [3] => Les sorties [9] => Les ateliers [10] => Les fêtes [ok] => Modifier les noms [v] => y )

Ce qui me pose problème, c'est la remontée de l'<input type="hidden"> ainsi que le submit…
Je peux éventuellement enlever l'attribut name du submit, mais j'ai besoin de mon champ hidden hmm

Y a-t'il moyen de ne pas prendre ces deux input en compte pour la boucle foreach?

Hors ligne

#7 05-08-2010 07:17:56

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : Modifier plusieurs champs

salut,

oui tu test la valeur fournis pour la clef.
en gros si tu a foreach ($tableau as $clef => $valeur) tu test si $clef différent de v et diffèrent de ok (attention se sont des chaines de caractère).

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#8 05-08-2010 07:40:58

arty_pop
Membre
Inscription : 03-08-2010
Messages : 7

Re : Modifier plusieurs champs

Bonjour,
Alors autant je conçois ce que tu dis, autant je n'arrive pas à le coder yikes

Pourtant, il me semble qu'avec le code suivant ça devrait fonctionner:


foreach($tableau as $idAlbum => $album) {  
  if(($idAlbum != 'y') || ($idAlbum != 'ok')) {
    echo $idAlbum.' - '.$album.'<br />';
  }
}
 

Les valeurs attribuées à v et ok remontent toujours…

Une erreur de syntaxe ou bien?

Hors ligne

#9 05-08-2010 09:36:04

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Modifier plusieurs champs

Essayes un ET à la place du OU et tu verras que ça passera nettement mieux. ^_-

Hors ligne

#10 05-08-2010 11:27:48

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : Modifier plusieurs champs

j'aurais du le mettre en gras smile


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#11 06-08-2010 14:23:15

arty_pop
Membre
Inscription : 03-08-2010
Messages : 7

Re : Modifier plusieurs champs

Bonjour,
J'ai effectivement essayé avec &&, les valeurs non désirées remontaient toujours…

Un print_r($_POST) me renvoyait:

Array ( [3] => Les sorties [9] => Les ateliers [10] => Les fêtes [ok] => Modifier les noms [v] => y )

Pour rappel, mon formulaire:

<form method="post">
<input type="text" value="Les sorties" name="3" /><br />
<input type="text" value="Les ateliers" name="9" /><br />
<input type="text" value="Les fêtes" name="10" /><br />
<br /><input type="submit" name="ok" value="Modifier les noms" />
<input type="hidden" name="v" value="y" />
</form>

…et ma boucle foreach:

foreach($tableau as $idAlbum => $album) {        
    if(($idAlbum != 'ok') && ($idAlbum != 'y')) {
        echo $idAlbum.' - '.$album.'<br />';
    }
}
 

Je ne vois pas ce qui cloche avec le code précédent, peut-être qu'un œil averti…


Quoiqu'il en soit, je viens de faire le test sur $clef autrement:

foreach($tableau as $idAlbum => $album) {        
    if (is_numeric($idAlbum)) {
        echo $idAlbum.' - '.$album.'<br />';
    }
}
 

… Et là ça fonctionne big_smile

Ceci dit, si jamais vous voyait pourquoi le premier test ne fonctionne pas, ça m'intéresse fortement!

Hors ligne

Pied de page des forums