IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Update toute une colonne d'un seul coup avec foreach [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 20
    Points : 13
    Points
    13
    Par défaut Update toute une colonne d'un seul coup avec foreach
    Bonjour tout le monde

    Ça ne fait pas très longtemps que je bidouille avec le PHP et MySQL et aujourd'hui j'aurais besoin d'un peut d'aide SVP.

    Je me pause la question suivante :
    Dans un contexte avec un formulaire fait de boutons radios, est-il possible de mettre à jour toute la colonne de la table d'un coup ?

    Première partie du code qui affiche les informations de la colonne (qui fonctionne comme je le souhaite) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <form method="post" action="recruitment.php">
        <table>
            <?php
    	$findall = mysql_query("SELECT * from TWAM_class ORDER BY class") or die(mysql_error());
    	$i = 0;
    	while($fa = mysql_fetch_array($findall))
    		{							
    		   $recrutement = $fa["status"]; 
    		    if($recrutement == "Open") 
    		    { 
    		        $check_open = "checked='checked'";
    		    } 
    			else 
    		    { 
    			$check_open = "";
    		    }
     
    		   $recrutement = $fa["status"]; 
    		    if($recrutement == "Close") 
    		    { 
    			$check_close = "checked='checked'";
    		    } 
    			else 
    		    { 
    			$check_close = "";
    		    }  
    	?>
     
    	<tr>
    	     <td><?php echo $fa["class"]; ?> :</td>
    	     <td><input type="radio" name="<?php echo $fa["class"]; ?>" value="Open" <?php echo $check_open; ?>></td>
    	     <td>Open</td>
    	</tr>
    	<tr>
    	     <td><input type="radio" name="<?php echo $fa["class"]; ?>" value="Close" <?php echo $check_close; ?>></td>
    	     <td>Close</td>
    	<?php } ?>
    	<tr>
    	     <td><input type="submit" name="submit2" value="Envoyer"></td>
    	</tr>
    </table>
    <input type="hidden" name="sent" value="sent">
    </form>
    Vous aurez remarqué la condition qui permet de pré-cocher le bouton radio suivant le contenu de la cellule.

    Voici la seconde partie du code pour "l'update" de toute la colonne (Ne fonctionne pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if($updateit = mysql_query("UPDATE TWAM_class set status = '".$_POST['$fa[class]']."' WHERE class='$fa[class]'"))
             {
    		echo mysql_error();
    Je ne reçois pas de message d'erreur aussi. À mon avis des données sont envoyées mais n'arrivent pas au bon endroit.

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Etant donné que tu as plusieurs groupes de boutons radios, il faudrait faire en sorte d'obtenir un tableau en 2 dimensions en retour ($_POST), et le HTML le prévois.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="radio" name="statut[<?php echo $fa["class"]; ?>]" value="Open" <?php echo $check_open; ?>></td>
    Ce qui va donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_POST['statut']['nom_class']
    Suffit donc de boucler (avec un foreach par exemple) sur $_POST['statut'] pour obtenir les couples "nom class" et leur valeur.

    Ensuite, il sera alors plus simple de faire une requête, qui elle devrait être fait dans la boucle, autant de fois qu'il y aura de groupe de statut (ou de class, peu importe le nom).


    Un autre point m'intrigue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    		   $recrutement = $fa["status"]; 
    		    if($recrutement == "Open") 
    		    { 
    		        $check_open = "checked='checked'";
    		    } 
    			else 
    		    { 
    			$check_open = "";
    		    }
     
    		   $recrutement = $fa["status"]; 
    		    if($recrutement == "Close") 
    		    { 
    			$check_close = "checked='checked'";
    		    } 
    			else 
    		    { 
    			$check_close = "";
    		    }
    Ici, ça sous entend qu'un statut pourrait être "checked" (checker) 2 fois, que la valeur soit Open ou Close.
    Ca ne me semble pas logique, car un groupe de bouton radio c'est pour offrir qu'1 seul et unique choix (parmi une liste).
    A mon sens il faudrait revoir les condition, comme : SI la valeur est Open, alors "checked", sinon rien.

    S'il doit être possible d'avoir plusieurs choix dans un groupe, alors c'est des boutons de type checkbox qu'il faudrait.

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Merci pour cet élément de réponse, j'avance un peut car je vois que lorsque je valide, j'ai trois groupes d'info qui partent, mais je ne sais pas où...

    C'est un tableau qui affiche si le recrutement est "Close" ou "Open" pour les classes de personnages.
    Il y a 11 classes en tout (Je ne comprend donc pas pourquoi il n'y a que trois groupes d'info qui sont envoyés)

    Par rapport à la première partie du code qui t'intrigue RunCodePhp,
    J'essaye de faire en sorte que les boutons radios soient pré-cochés quand on affiche la page.
    Il y a un bouton radio pour "recrutement ouvert" et un autre pour "recrutement fermé" et en faite il y a une condition par bouton radio.
    Le but est aussi de ne pas avoir à re-cocher tous les boutons à chaque fois que l'on veux mettre à jour le statut d'une seule classe.
    C'est de la pure improvisation, doit surement y avoir plus simple effectivement.

    Par rapport à la partie du code qui me pose problème,
    J'ai suivis tes conseils, j'ai mes deux boutons radios (Open / Close) par classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="radio" name="statut[<?php echo $fa["class"]; ?>]" value="Open" <?php echo $check_open; ?>>
    <input type="radio" name="statut[<?php echo $fa["class"]; ?>]" value="Close" <?php echo $check_close; ?>>
    Et la partie du code ou j'ai essayé de mettre en place un Foreach :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $key = $fa["status"];
    $val = $_POST['statut']['nom_class'];
    foreach ($_POST as $key => $val)
     
    if($updateit = mysql_query("UPDATE TWAM_class SET status = '$val' WHERE class='$key'"))
    Mais bon malgré les exemples que j'ai pu trouver on-line sur les Foreach, je n'ai pas réussi a faire mieux sans avoir le serveur qui détecte une erreur dans le code.

    Y a un point qui m'intrigue aussi, seul la cellule Statut est à mettre à jour, et non la classe, comment je renseigne le WHERE dans la Query si les données sont groupées ?

    Si quelqu'un à des éléments de réponses SVP

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    J'essaye de faire en sorte que les boutons radios soient pré-cochés quand on affiche la page.
    J'avais bien compris, mais il ne faudrait pas te faire piéger par le "visuel" de la page Web.
    Ensuite, un groupe de bouton radio c'est une série qui porte le même nom (la valeur de "class" ici), et des valeurs différentes (Open ou close).
    En aucun cas il faudra que les 2 valeurs soient cochées. C'est le principe des boutons radios : 1 seul choix.

    Si (par hasard) les 2 sont cochés, visuellement ça ne se verra pas, mais dans le code il y aura l'instruction : checked="checked".
    Pour le vérifier, il suffit de voir le code HTML généré (click droit : code source de la page).

    A mon avis, tes 2 conditions rajoutent un checked="checked" dans les 2 valeurs (Open et close).
    Je peux me tromper, mais vérifie le, sait on jamais.


    Pour vérifier ce que l'on obtient après validation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (isset($_POST['statut']) && !empty($_POST['statut'])) {
    	$statut = $_POST['statut'];
    	foreach ($statut as $key => $val) {
    		// La requête ici ... etc ...
    	}
    }
    Y a un point qui m'intrigue aussi, seul la cellule Statut est à mettre à jour, et nom la classe, comment je renseigne le WHERE dans la Query si les données sont groupés ?
    Désolé, je n'est pas compris.
    En regardant ta requête, seul le statut est mis à jour.
    Fait en 1er un echo sur la requête avant de mettre à jour pour visualiser ce que contient cette requête, les 2 variable $key/$val.

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup RunCodePhp,

    Le code fonctionne, j'aurais apris un peut sur les "foreach"

    Le code source de la page confirme que aucun des groupes de boutons radios n'est "checked" en même temps.

    Et mettre des ECHO sur les $key et $val, je n'avais jamais pensé à faire ça
    C'est ce qui ma permis de finaliser l'adaptation de ton code dans le ma page.

    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. update d'une colonne entière sous bde
    Par gregcat dans le forum Bases de données
    Réponses: 1
    Dernier message: 23/03/2007, 22h46
  2. concaténer sur toute une colonne
    Par melodyyy dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/12/2006, 15h20
  3. Réponses: 4
    Dernier message: 31/10/2006, 20h03
  4. UPADTE de toute une colonne
    Par jexl dans le forum ASP
    Réponses: 2
    Dernier message: 14/12/2004, 13h11
  5. update d'une colonne texte
    Par todd dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/10/2003, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo