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 de case à cocher [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 80
    Par défaut UPDATE de case à cocher
    Mon problème est simple à exprimer mais me semble difficile à résoudre...enfin de mon point de vue !

    J'ai un formulaire dans lequel je coche des cases que j'arrive à insérer dans ma BDD et que j'arrive ensuite à restituer dans ce même formulaire...

    Le problème : quid de la case cochée que je décoche et faire la mise à jour dans la BDD ???

    J'ai bien tenté de trouver la solution dans divers forums, mais je ne trouve pas...quelqu'un peut m'aider SVP ?

    Merci d'avance pour les diverses pistes proposées,
    @+
    Jérôme

    Voilà un bout de code pour illustrer mon problème :

    Pour un INSERT pas de problèmes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(!empty($_POST['matiere'])){ // si des cases sont cochées
    	for ($i=1; $i < 9 ; $i++){ // pour chaque matiere
    		if(!empty($_POST['matiere'][$i])){ // si des cases sont cochées pour cette matiere
    		echo 'Les élèves suivants ont coché la matiere '.$i.' : ';
    			foreach($_POST['matiere'][$i] as $numeleve){
    				echo $numeleve.', ';
     
    				$req = $bdd->prepare('INSERT INTO...etc
    mais le problème c'est que les cases non cochées ne renvoient rien
    donc comment traiter un UPDATE ?

    Merci pour le temps que vous passez à éclairer ma lanterne...
    Jérôme

    Est-ce que ceci serait un bon pas vers la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    if (isset($_POST['check']))
    {
            // la case a bien été cochée
    }
    else
    {
            // case non cochée
    }
    ?>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    La solution la plus simple est de supprimer toutes les données avant de faire l'INSERT des données cochées.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 80
    Par défaut
    Oui ça je sais faire et c'est sûr que c'est la solution la plus simple.

    MAIS : j'ai des données dans d'autres colonnes de la même table que je ne peux pas supprimer sinon je perds tout...

    d'où mon questionnement : comment faire un UPDATE ?

    HumHum, pas si simple...

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 343
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 343
    Billets dans le blog
    17
    Par défaut
    Lors du traitement du formulaire :
    Tu récupères toutes les valeurs cochées en bdd
    Tu compares à celles soumises par le formulaire
    Tu fais un DELETE de celles n'étant pas dans le formulaire
    Tu fais un INSERT de celles n'étant pas en bdd
    Si besoin tu fais un UPDATE de celles ayant été modifiées

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 80
    Par défaut
    Ok...donc :

    1) je fais un SELECT de ma table des enregistrements concernés (jusque là pas de soucis...)

    2) je compare : comment ?

    3) ensuite je fais des if else pour INSERT DELETE UPDATE... non ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    j'ai des données dans d'autres colonnes de la même table que je ne peux pas supprimer sinon je perds tout...
    Quand tu decoches un case tu dois garder des données en reference avec cette case ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 80
    Par défaut
    Non si je décoche la case je peux supprimer la ligne...

  8. #8
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 343
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 343
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par jeje_974 Voir le message
    Non si je décoche la case je peux supprimer la ligne...
    Ce n'est pas exactement ce que tu as dit tout à l'heure :
    MAIS : j'ai des données dans d'autres colonnes de la même table (<= j'ai compris ligne/enregistrement) que je ne peux pas supprimer sinon je perds tout...
    Dans ce cas la solution de Sabotage est la bonne : "La solution la plus simple est de supprimer toutes les données avant de faire l'INSERT des données cochées."

  9. #9
    Membre Expert Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Par défaut Ajax
    Bonjour,

    Pour ce type de problème, tu mets en session le tableau des cases cochées, avant affichage, lors de la mise à jour tu compares, fais ton update, et met à jour ta session.

    Souvent j'utilise Ajax, pour ce type de pb.

    Olivier

  10. #10
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 80
    Par défaut
    Oui c'est exact je me suis un peu emmêlé les pinceaux...

    Si je décoche la case, je peux faire un DELETE de cette ligne...
    Mais comment je sais que la case a été décoché ?

    De plus j'ai plusieurs ELEVES de cette CLASSE, donc lorsque je coche / décoche les cases des MATIERES concernées je traite le tableau en bloc...
    Je ne peux pas faire de DELETE combiné avec mon INSERT n'est-ce pas ?

    Merci pour votre aide

  11. #11
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 80
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Ce n'est pas exactement ce que tu as dit tout à l'heure :

    Dans ce cas la solution de Sabotage est la bonne : "La solution la plus simple est de supprimer toutes les données avant de faire l'INSERT des données cochées."

    Oui mais comment je connais que telle ou telle case a été décoché ?

  12. #12
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 343
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 343
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par jeje_974 Voir le message
    Oui mais comment je connais que telle ou telle case a été décoché ?
    Peu importe puisque tu supprimes de la bdd toutes les cases précédemment cochées puis tu insères celles qui ont été cochées dernièrement.

  13. #13
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 80
    Par défaut
    Et bien non je ne peux pas faire un DELETE de toutes mes lignes mais uniquement de la case qui aura été décoché sinon je perds de l'information :

    Voilà la structure de ma table :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE IF NOT EXISTS `lo_travailler` (
      `NUMETAB` varchar(32) NOT NULL,
      `NUMDIVISION` varchar(32) NOT NULL,
      `NUMELEVE` int(4) NOT NULL,
      `NUMPERIODE` varchar(32) NOT NULL,
      `NUMMATIERE` varchar(32) NOT NULL,
      `NUMAFFECTATION` int(6) NOT NULL,
      `DATETRAVAILLER` date DEFAULT NULL,
      `HEUREDEBUT` time DEFAULT NULL,
      `HEUREFIN` time DEFAULT NULL,
      `NUMINTER` int(4) DEFAULT NULL,
      PRIMARY KEY (`NUMETAB`,`NUMDIVISION`,`NUMELEVE`,`NUMPERIODE`,`NUMMATIERE`,`NUMAFFECTATION`)

    Si ma case est décochée, je peux supprimer la ligne correspondante dans la table...cela correspond à un établissement, une division, un élève précis, sur la période une par exemple, la matière 7 et ensuite peu importe le reste des infos puisque je veux détruire cette clé...mais pas les autres lignes pour lesquelles l'information doit être conservée. En fait il faut connaitre la case décochée pour supprimer l'entrée dans la BD...mais je ne sais pas comment faire

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ma proposition ne fonctionne evidemment que si la table ne contient que l'information de la case cochée.

    Sinon, presque aussi simplement, tu supprimes tous les ids qui n'ont pas été cochées.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 80
    Par défaut
    Ah là tu commences à m'intéresser sérieusement Sabotage

    Effectivement supprimer les id non cochés conviendrait...comment t'y prendrais-tu ? Je suis impatient de te lire

  16. #16
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql = 'DELETE FROM tatable WHERE NUMELEVE = ' . $id_eleve;
    if(!empty($_POST['matiere'])) {
       $sql .= ' AND NUMMATIERE NOT IN (' . implode(',' , $_POST['matiere']) . ')';
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  17. #17
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 80
    Par défaut
    A quoi sert le implode ?

  18. #18
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 80
    Par défaut
    Citation Envoyé par nathieb Voir le message
    Bonjour,

    Pour ce type de problème, tu mets en session le tableau des cases cochées, avant affichage, lors de la mise à jour tu compares, fais ton update, et met à jour ta session.

    Souvent j'utilise Ajax, pour ce type de pb.

    Olivier
    Bonjour Olivier,
    Est-ce qu'en mettant mon tableau des cases à cocher (c'est-à-dire les cases cochées et non cochées) en session je pourrais arriver à mettre à jour ma table ? Si oui, comment fais-tu le UPDATE ?
    Merci d'avance,
    Jérôme

  19. #19
    Membre Expert Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Par défaut session
    BOnjour,

    En session tu gardes le tableau des cases cochées, tu le compares à ton POST, et tu fais une différence des deux tableaux. en PHP il existe des méthodes pour trouver la différence.

    http://php.net/manual/fr/function.array-diff-uassoc.php

    Regardes le premier exemple

    Olivier

  20. #20
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 80
    Par défaut
    Le problème reste entier : mon POST ne contiendra que les cases cochées (puisque les cases non cochées ne renvoient rien), et mon tableau en session ne contiendra que les cases cochées.

    J'obtiendrais donc deux tableaux identiques donc inutile à comparer...enfin je crois !

    Qu'en pensez-vous ?
    Jérôme

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [MySQL] requete update et case à cocher
    Par totot dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 28/08/2013, 17h40
  2. [MySQL] update de cases à cocher multiples qui ne fonctionne pas
    Par mimosa21 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 09/12/2012, 11h28
  3. [VBA UPDATE] Problème UPDATE et cases à cocher
    Par rungis78-76 dans le forum VBA Access
    Réponses: 6
    Dernier message: 08/10/2009, 08h39
  4. [MySQL] Update avec case à cocher
    Par Vetchostar dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 01/11/2008, 14h28
  5. update champs de type "case à cocher"
    Par manu971 dans le forum VBA Access
    Réponses: 5
    Dernier message: 21/11/2007, 12h38

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