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 :

Mise à jour avec case à cocher [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 26
    Par défaut Mise à jour avec case à cocher
    Bonjour a tous,

    Ayant deja ete sauve sur ce forum je renouvelle l'experience...

    Cela fait mtnt quelques temps que je bloque sur une partie de code et j'avoue que je commence a serieusement m'embrouiller. Je m'explique...

    J'ai un formulaire avec des checkbox qui lisent une information sur ma base de donnees mysql et qui doivent etre mises a jour via un bouton valider.

    Pour ce qui est de la lecture, pas de probleme. En revanche, je n'arrive pas a faire la mise a jour sur la base.

    Voici le code que j'utilise pour lire dans la base et afficher une de mes checkbox cochée ou non en fonction du resultat de la requete :

    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
     
    // la requete
    $sql = 'SELECT Coher_offre_epci, Coher_gares_epci, Coher_poles_epci FROM epci WHERE (ID_epci="'.$_SESSION['ID_epci'].'")';  
     
    // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)  
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());   
    // on va scanner tous les tuples un par un  
    while ($data = mysql_fetch_array($req)) {
     
          echo '<form method="post" action="irrigcoh.php"><table class="checkbox">
                  <tr class="titreform1">
                    <td height="30" valign="middle">';
    if($data['Coher_offre_epci'] == "-1") 
    { 
          echo '    <input type="checkbox" checked="checked" id="Coher_offre_epci" name="Coher_offre_epci" value="OUI"> offre difficilement lisible';    
    } 
    else 
    { 
          echo '    <input type="checkbox" id="Coher_offre_epci" name="Coher_offre_epci" value="NON"> offre difficilement lisible';   
    }
    Et voici le code que j'utilise pour mettre a jour la base de donnée avec un bouton valider (valide_coherence_x fait reference a un input de type image):

    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
     
    if ($_POST['valide_coherence_x']) {
     
    if ($_POST['Coher_offre_epci']==OUI) {
     
    		$offreoui = 'UPDATE epci SET Coher_offre_epci="-1" WHERE ID_epci="'.$_SESSION['ID_epci'].'"';
    		// on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die)
    		mysql_query($offreoui) or die('Erreur SQL !'.$offreoui.'<br />'.mysql_error());
    }
     
    else{
     
    		$offrenon = 'UPDATE epci SET Coher_offre_epci="0" WHERE ID_epci="'.$_SESSION['ID_epci'].'"';
    		// on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die)
    		mysql_query($offrenon) or die('Erreur SQL !'.$offrenon.'<br />'.mysql_error());
    }
    Ce que je ne comprends pas c'est que cette logique fonctionne parfaitement lorsque j'utilise des input radio en choix oui/non. Mais dans ce cas la, il ne lis pas ma conditionnelle et me update toujours 0 comme si la condition n'etait jamais respectee...

    Avez-vous une idee car la j'avoue que je seche...

    Je debute en web donc merci d'etre indulgent pour les enormites...
    N'hesitez pas a me donner le code entier si necessaire

    Merci d'avance

  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
    Je vois déjà qu'il te manque les guillemets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($_POST['Coher_offre_epci']=="OUI") {
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 26
    Par défaut
    Merci pour cette reponse rapide!

    L'ajout de " " ou ' ' ne change rien. J'avais deja essayé cette option et de toute facon cela fonctionne pour les radio sans rien.

    Je pense que cela vient d'une betise de ma part dans l'utilisation des checkbox (peut etre avec les id ou le name)...

  4. #4
    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
    Tes deux checkbox ont le meme nom, donc tu ne recois que le resultat de la deuxieme.

    Pour le point précedent, les guillemets sont nécessaires : PHP qui est très gentil rectifie la syntaxe pour toi mais c'est une erreur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 26
    Par défaut
    Ah ok merci pour l'info pour les " " je vais les corriger sur les autres pages aussi. Pour ce qui est des checkbox, j'ai mis le meme nom car il s'agit bien de la meme checkbox. Dans le cas ou ma condition est respectée j'ai ajouté le checked="true" et je lui mets value="oui". Dans l'autre cas je ne lui demande pas de cocher la case et je lui mets value="non". C'est ces valeurs que je recupere dans ma feuille de traitement php du formulaire.

    Voici l'ensemble du formulaire pour etre sur que je me suis bien fait comprendre

    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
     
          echo '<form method="post" action="irrigcoh.php"><table class="checkbox">
                  <tr class="titreform1">
                    <td height="30" valign="middle">';
    if($data['Coher_offre_epci'] == "-1") 
    { 
          echo '    <input type="checkbox" checked="checked" id="Coher_offre_epci" name="Coher_offre_epci" value="OUI"> offre difficilement lisible';    
    } 
    else 
    { 
          echo '    <input type="checkbox" id="Coher_offre_epci" name="Coher_offre_epci" value="NON"> offre difficilement lisible';   
    }                
          echo '    </td>
                  </tr>
                  <tr class="titreform1">
                    <td height="30" valign="middle">';
    if($data['Coher_gares_epci'] == "-1") 
    { 
          echo '    <input type="checkbox" checked="checked" id="Coher_gares_epci" name="Coher_gares_epci" value="OUI"> réseau seulement organisé depuis/vers les gares';    
    } 
    else 
    { 
          echo '    <input type="checkbox" id="Coher_gares_epci" name="Coher_gares_epci" value="NON"> réseau seulement organisé depuis/vers les gares';   
    }                
          echo '    </td>
                  </tr>
                  <tr class="titreform1">
                    <td height="30" valign="middle">';
    if($data['Coher_poles_epci'] == "-1")
    { 
          echo '    <input type="checkbox" checked="checked" id="Coher_poles_epci" name="Coher_poles_epci" value="OUI"> réseau qui dépend de plusieurs pôles extérieurs sans réelle prise en compte de la desserte locale';    
    } 
    else 
    { 
          echo '    <input type="checkbox" id="Coher_poles_epci" name="Coher_poles_epci" value="NON"> réseau qui dépend de plusieurs pôles extérieurs sans réelle prise en compte de la desserte locale';   
    }                
     
          echo '    </td>
                  </tr>
                </table></form>';
    Cette logique n'est pas bonne?

  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
    Pardon je n'avais pas vu que tu affichais soit "oui" soit "non".

    Par contre ici pour ta valeur numériques, il ne faut pas de guillemets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($data['Coher_offre_epci'] == -1)
    Je pense qu'il y un problème de logique entre ta construction de formulaire et ce que contiens ta base de donnée.
    En reprenant les codes que tu as donné, j'obtiens bien un requete differente si je cocho ou non ; la seule difference est que je donne pas la "value" en fonction de la base de données.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 26
    Par défaut
    Pas de pb c'est quand meme toi qui m'aide! En tout cas c'est vrai que j'ai un peu de mal avec cette syntaxe. C'est pas facile de se mettre a l'informatique!

    Donc pour repondre a ma question le fait de travailler sur les values="oui" ou "non" est la solution a deployer? Et si cette solution est mauvaise et est la cause de mon pb que pourrais-je faire?

    Je te balance la totalite de mon script de traitement php du formulaire :

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    <?php
    // On démarre la session
    session_start ();
     
    //CONNECTION BASE MYSQL
    require("connecter.php");
     
    if ($_POST['valide_coherence_x']) {
     
    if ($_POST['Coher_offre_epci']=="OUI") {
     
    		$offreoui = 'UPDATE epci SET Coher_offre_epci="-1" WHERE ID_epci="'.$_SESSION['ID_epci'].'"';
    		// on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die)
    		mysql_query($offreoui) or die('Erreur SQL !'.$offreoui.'<br />'.mysql_error());
    }
     
    else{
     
    		$offrenon = 'UPDATE epci SET Coher_offre_epci="0" WHERE ID_epci="'.$_SESSION['ID_epci'].'"';
    		// on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die)
    		mysql_query($offrenon) or die('Erreur SQL !'.$offrenon.'<br />'.mysql_error());
    }
     
    if ($_POST['Coher_gares_epci']=="OUI") {
     
    		$gareoui = 'UPDATE epci SET Coher_gares_epci="-1" WHERE ID_epci="'.$_SESSION['ID_epci'].'"';
    		// on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die)
    		mysql_query($gareoui) or die('Erreur SQL !'.$gareoui.'<br />'.mysql_error());
    }
     
    else{
     
    		$garenon = 'UPDATE epci SET Coher_gares_epci="0" WHERE ID_epci="'.$_SESSION['ID_epci'].'"';
    		// on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die)
    		mysql_query($garenon) or die('Erreur SQL !'.$garenon.'<br />'.mysql_error());
    }
     
    if ($_POST['Coher_poles_epci']=="OUI") {
     
    		$poleoui = 'UPDATE epci SET Coher_poles_epci="-1" WHERE ID_epci="'.$_SESSION['ID_epci'].'"';
    		// on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die)
    		mysql_query($poleoui) or die('Erreur SQL !'.$poleoui.'<br />'.mysql_error());
    }
     
    else{
     
    		$polenon = 'UPDATE epci SET Coher_poles_epci="0" WHERE ID_epci="'.$_SESSION['ID_epci'].'"';
    		// on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die)
    		mysql_query($polenon) or die('Erreur SQL !'.$polenon.'<br />'.mysql_error());
    }
     
    }
    // on ferme la connexion à la base  
    mysql_close();
    header("location: question_5_bis.php");
    ?>

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 26
    Par défaut
    desole j'avais pas vu la suite du message. Je regarde ca

  9. #9
    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
    En fait je ne vois pas bien pourquoi ta case change de valeur entre "oui" et "non".

    La logique serait plutot d'avoir une checkbox qui est soit cochée, soit decochée par defaut selon la valeur dans la base.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 26
    Par défaut
    Je ne comprends pas trop ce que tu veu dire. Pour resumer :

    - la lecture sur la base de donnees par le formulaire se fait bien. C'est a dire que si je rentre manuellement les donnees dans mysql, il affichera bien une case cochée si j'ai rentré -1 et non cochée si j'ai rentré 0.
    - la mise a jour ne se fait pas quand je lance le script de traitement du formulaire. Je pensais que cela venait du :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ($_POST['Coher_offre_epci']=="OUI") {
    sachant que le "OUI" correspond a la value de la checkbox lorsque l'on est dans le cas d'une case cochée.

    Si le probleme venait de la base et n'etait pas un pb de traitement liee a la syntaxe a utiliser pour les checkbox (comme par exemple la non prise en compte de value contrairement a des type comme radio) alors je devrais egalement avoir des problemes pour la lecture dans la base (ce qui n'est pas le cas puisque l'information s'&affcihe correctement) et cela ne devrait pas fonctionner avec les type radio (alors que ca fonctionne) non?

  11. #11
    Membre expérimenté

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Par défaut
    le plus simple c'est soit davoir un débugguer soit d'afficher le retour de la variable au moins ca permet de savoir ce qu'on retroune vraiment

    ligne pratique pour afficher une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function debug($var){
    print_r('<pre>'.$var.'</pre>');
    }
     
    .....
     
    debug($_POST);

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 26
    Par défaut
    Ca y est j'ai trouvé. Je me sens un peu bete du coup. J'ai simplement mal compris la syntaxe des checkbox.

    A l'inverse des radio, on utilise pas le value. Il suffit simplement de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ($_POST['Coher_offre_epci']) {
    et il considere cette condition comme une case cochée (renvoi true).

    Merci a vous pour le temps passé sur mon pb!

  13. #13
    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
    Ce n'est pas exact : une checkbox cochée renvoit sa "value".
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. [MySQL] Mise à jour et case à cocher
    Par pasbonte dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 05/03/2009, 19h51
  2. Mise à jour avec des cases à cocher
    Par jiojio dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/02/2009, 11h53
  3. Requête mise à jour sur case à cocher
    Par Marcopololo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/08/2008, 08h32
  4. TreeView avec case à cocher
    Par da_latifa dans le forum Delphi
    Réponses: 9
    Dernier message: 07/10/2006, 01h01
  5. Mise à jour avec jointure
    Par taupain dans le forum Bases de données
    Réponses: 5
    Dernier message: 09/07/2004, 11h27

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