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 :

récupérer valeurs de mes checkbox créé dynamiquement [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut récupérer valeurs de mes checkbox créé dynamiquement
    Bonjour a tous.

    J'ai listé un tableau avec pour chaque valeur une checkbox a coté.
    Bien entendu mon tableau est dynamique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $numero=0;
    			while ($donnees = $req->fetch())
    			{
    			$numero++;	
    			echo '<td><input type="checkbox" name="Chk_'.$donnees['Id_status'].'"></td>';
    j'aurais voulu savoir comment faire pour récupérer les valeurs de mes checkbox.... si elles sont cochées ou non

  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

    Il me semble plus pratique de procéder ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo '<td><input type="checkbox" name="Id_status[]" value='.$donnees['Id_status'].'></td>';
    Qui au bout permet de les récupérer en boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (isset($_POST['Id_status']) && !empty($_POST['Id_status'])) {
        foreach ($_POST['Id_status'] as $Id_status) {
            echo $Id_status.'<br />'; // Correspond aux valeurs des Id_status cochés
        }
    }
    else {
        // Aucun statut de coché
    }
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    je te remercie beaucoup... j'ai su recuperer mes checkbox cochée

    cependant j'aurais encore 2 petites questions...

    - comment faire pour recuperer les checkbox qui ne sont pas cochées ?
    ( cela me sert pour editer un champ dans ma bdd soit 1 si coché soit 0 si pas coché )

    - aussi j'aimerai recuperer mes valeurs de mes checkbox quand je charge la page ... j'ai lu avec l'argument checked c'etait possible ?

    Merci d'avance

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur LAMP
    Inscrit en
    Janvier 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur LAMP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2010
    Messages : 48
    Points : 72
    Points
    72
    Par défaut
    si $_POST['Ma_checkbox'] existe c'est qu'elle a était coché.

    Si elle n'existe pas, elle n'est pas coché.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Pour que la case soit coché 
    <input type="checkbox" name="nom" checked="checked" />

  5. #5
    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
    - comment faire pour recuperer les checkbox qui ne sont pas cochées ?
    Une fois validé le formulaire, seul les valeurs des checkbox cochés sont retournés, donc ici il n'y aura pas moyen de le savoir directement.
    Il faudra alors procéder par déduction, du coup, pas d'autre moyen que de récupérer les tous les statuts, et faire une comparaison avec ceux reçus en POST.
    Donc à chaque itération, faire une comparaison/condition.
    Il y a la fonction array_search() ou alors in_array() qui pourra t'aider, tout dépend comment tu le feras.

    - aussi j'aimerai recuperer mes valeurs de mes checkbox quand je charge la page ... j'ai lu avec l'argument checked c'etait possible ?
    Ici le principe est le même que ci-dessus, faire une comparaison sur l'existence ou non des checkbox cochés à chaque itération, ce qui permettra de rajouter (ou pas) un checked="checked" (voir post précédent).
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    Merci pour votre aide j'y arrive presque mais je ne comprends pas pourquoi mon code ne marche pas....

    J'ai appliqué votre principe:

    donc je recupere tout mes status

    et pour chaque status je les compare avec les $_post_chkbox_status

    si le status = egale a la checkbox il doit m'updater le champ etat =1
    si le status est different a la checkbox il doit m'updater le champ etat =0

    et je ne comprends pas pourquoi tt mes champs ETAT sont a 0 sauf le dernier chekbox checked...

    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
    $reponse = mysql_query("SELECT Name_status,Id_status FROM status WHERE Id_step LIKE '$id_step' ORDER BY Name_status"); 
    $nb_entrees = mysql_num_rows($reponse);	
     
    	for ($i = 0; $i<$nb_entrees; $i++)
    	{
    		$liste_status = mysql_fetch_array($reponse);
    		$Id_status=$liste_status[1];
     
       		foreach ($_POST['ChkBox'] as $Valuechk)
       	  {
     
       	  		if ($Valuechk == $Id_status) // il est coché
       	  		{
       	  				// on test si le champ existe deja
       	  				$Resultat=mysql_query("SELECT * FROM `model_code` WHERE (`Name_model_code` LIKE '$modelcode' AND `Id_status` LIKE '$Id_status')");
      						if (mysql_numrows($Resultat)==0) // Le modelcode n'est pas encore utilisé => on enregistre	
      						{
          				$sql=mysql_query("INSERT INTO `model_code`(Name_model_code, Id_status, Etat) VALUES('$modelcode','$Id_status', '1')");
          				}
         		  		else // il existe deja
         		  		{
         		  		$sql=mysql_query("UPDATE `model_code` SET Etat='1' WHERE (Name_model_code LIKE '$modelcode' AND Id_status LIKE '$Id_status')");	   
         		  		}
       	  		}
       	  		if ($Valuechk != $Id_status) // il est coché
       	  		{
       	  				// on test si le champ existe deja
       	  				$Resultat=mysql_query("SELECT * FROM `model_code` WHERE (`Name_model_code` LIKE '$modelcode' AND `Id_status` LIKE '$Id_status')");
      						if (mysql_numrows($Resultat)==0) // Le modelcode n'est pas encore utilisé => on enregistre	
      						{
          				$sql=mysql_query("INSERT INTO `model_code`(Name_model_code, Id_status, Etat) VALUES('$modelcode','$Id_status', '0')");
          				}
         		  		else // il existe deja
         		  		{
         		  		$sql=mysql_query("UPDATE `model_code` SET Etat='0' WHERE (Name_model_code LIKE '$modelcode' AND Id_status LIKE '$Id_status')");	   
         		  		}
       	  		}
     
       	  }

  7. #7
    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'en sais rien de quoi tout ceci retourne ou se cache derrière, mais mon sentiment c'est que la manière de faire ne serait pas au top.
    En faite, j'ai du mal à voir l'intérêt d'enregistrer tous les différents statuts pour chaque model_code (dans cette table model_code) pour préciser cocher ou pas.
    Je trouve plus judicieux d'enregistrer uniquement ceux qui seront cochés.
    (par la même occasion, ici la Bdd serait moins lourde car moins de lignes car tous les statuts ne seront pas obligatoirement enregistrés)

    En somme :
    -> soit on supprime celui non-coché car il l'était auparavant
    -> soit on l'insère car il n'était pas enregistré auparavant.

    Pour ce faciliter la tâche, on stock tous les éléments utiles dans de simples tableaux.
    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
    44
    45
     
    // Partie traitement / Insertion OU suppression
     
    // On récupère d'abord tous les divers statuts dans un simple tableau
    // Requête -> SELECT Id_status ... etc etc ...
    $rs_status = mysql_query($requete_status);
    while ($status = mysql_fectch_array()) {
        $liste_status[] = $status['Id_status'];
    }
     
    // On récupère tous les statuts présents dans la Bdd (donc cochés auparavant) pour le model_code en question dans un simple tableau
    $rs_status_mc = mysql_query("SELECT Id_status FROM model_code WHERE  model_code = '".$model_code."'");
    while ($status = mysql_fetch_array($rs_status_mc)) {
        $liste_status_mc[] = $status['Id_status'];
    }
     
    // On récupère les statuts cochés reçu en POST dans un simple tableau
    if (isset($_POST['Id_status']) && !empty($_POST['Id_status'])) {
        foreach ($_POST['Id_status'] as $Id_status) {
            $status_coches[] = $Id_status;
        }
    }
     
    // On stock tous les statuts non-cochés dans un simple tableau
    foreach ($liste_status as $Id_status) {
        // SI le statut n'y est pas (pas coché) alors il faudra le supprimer
        if (!in_array($Id_status, $status_coches)) $status_non_coches[] = $Id_status;
    }
     
    // On supprime tous les statuts non_cochés (au cas où ils seraient présent)
    if (isset($status_non_coches) && !empty($status_non_coches)) {
        mysql_query("DELETE FROM model_code WHERE model_code IN (".implode(',' $status_non_coches).") AND model_code = '".$model_code."'");
    }
     
     
    // On boucle à nouveau sur tous les statuts pour insérer :
    // SI le statut est coché
    // ET SI le statut n'existe pas dans la Bdd
    foreach ($liste_status as $Id_status) {
        // 
        if (in_array($Id_status, $status_coches) && in_array(!$Id_status, $liste_status_mc)) {
            // Requête d'insertion
            mysql_query("INSERT INTO model_code ... etc etc ...");
        }
    }
    Ca fait tout de même pas mal de patacaisse, mais il me semble que ça reste relativement simple
    Il y a peut être plus court/simple comme principe, mais là comme ça, je ne vois pas.




    Ceci dit, admettons qu'il soit obligé de tout enregistrer, tous les statuts pour tous les model_code
    Et bien dans ce cas là, il faudrait tous les enregistrer, et pour tous les différents model_code, sans exception, (ce qui fait des doublon, triplon, quadruplon, etc ... à chaque fois d'ailleurs), ceci pour éviter des décalages entre les models_code (table model_code) et les statuts (table status), donc les enregistrer dès la création d'un nouveau statut.
    En résumer, ils devrait tous être enregistrés bien avant, quitte à mettre un état par défaut (sinon, c'est un peu prise de tête à contrôler si tel statut existe ou pas pour tel model_code).
    Mais inversement aussi, faudra les supprimer de la table model_code dès la suppression d'un statut, sinon ça ne va pas l'faire.
    Resterait donc uniquement à se pré-occuper de mettre à jour leur état (0 ou 1) par rapport aux cases à cocher.
    Le principe serait grosso modo le même que les codes plus haut.


    /!\ Attention à ne pas systématiquement mettre des LIKE au lieu de = (égal), ce qui n'est pas pareil.
    En espérant avoir bien saisi le truc aussi
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Points : 146
    Points
    146
    Par défaut
    Je vais essayer ca

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

Discussions similaires

  1. Récupérer les valeurs de mes checkbox créées dynamiquement
    Par new_dreams dans le forum Composants
    Réponses: 2
    Dernier message: 28/03/2013, 23h41
  2. Réponses: 3
    Dernier message: 04/11/2009, 10h51
  3. récupérer valeurs d'un CHECKBOX avec name=nom[]
    Par Mickael Scofild dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 28/08/2007, 08h16
  4. Réponses: 2
    Dernier message: 24/08/2007, 14h25
  5. Réponses: 2
    Dernier message: 02/06/2007, 12h06

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