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 d'une colonne avec valeur de checkbox


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 133
    Par défaut Update d'une colonne avec valeur de checkbox
    Bonsoir,
    J'ai un souci pour mettre à jour une colonne d'une table avec la valeur d'une checkbox.
    J'arrive bien à changer la valeur de ma checkbox si je coche la case dans mon formulaire, mais j'aimerais aussi pouvoir la changer si je décoche la case.
    (coche = 1, decoche = 0)
    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $result = $db->query('SELECT j.id_match, e1.club, e2.club, j.championnat, j.t_match, j.actif, j.date_reelle, j.resultat, j.score FROM '.$_PRE.'playoff AS j INNER JOIN '.$_PRE.'clubs AS e1 ON e1.id_club = j.id_club_dom INNER JOIN '.$_PRE.'clubs AS e2 ON e2.id_club = j.id_club_ext ORDER BY j.championnat, j.date_reelle') or die ('Erreur SQL !'.$sql.''.mysql_error());
    	while ($row = $result->fetch()) {
    		unset($coche);
    		if($row['5'] == '1') $coche = "checked";
    		echo "\n<tr>\n<td width='200' class='donnees'>".$row['1']."</td>\n<td width='200' class='donnees'>".$row['2']."</td>\n<td width='20' align='center' class='donnees'>".$row['3']."</td>\n<td class='donnees'>".$row['9']."</td>\n<td class='donnees' width='20'><input type='checkbox' name='check[]' id='check[]' value='".$row['0']."' $coche /></td>\n</tr>\n";
    	}
    ?>
    et voici la mise à jour de la valeur dans la table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (isset($_POST['Submit'])) {
    foreach($_POST['check'] as $value) {
         	$result = $db->query('UPDATE '.$_PRE.'playoff SET actif = "1" WHERE id_match = "'.$value.'"') or die ('Erreur SQL !'.$sql.''.mysql_error());
    	}
    }
    Mon pb est donc de remplacer SET actif="1" par SET actif = "0" si la case est décochée.
    Pouvez-vous m'aider svp ?

  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
    Par défaut
    Salut

    Pour la case à cocher, il ne faut pas détruire la variable (pas de unset) sinon elle n'existera pas du coup ça va provoquer une erreur.
    Faut juste initialiser les 2 cas :
    SI $row['5'] à 5 ALORS "checked"
    SINON "" (vide).

    Puis, c'est juste une remarque, mais fais en sorte de faire un code clair, lisible, facile à maintenir/à remanier.
    Tout mettre sur une ligne ça oblige à recherche le bout de code à des Kms.
    De même que le fait d'utiliser des index au niveau des champs ($row[5] cela sera totalement décalé si un jour on intercale une nouvelle colonne, ce qui obligera à remanier le code.


    Personnellement (bien sûr) je trouve ceci bien plus clair
    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
    <?php
    $result = $db->query('SELECT j.id_match, e1.club, e2.club, j.championnat, j.t_match, j.actif, j.date_reelle, j.resultat, j.score
    FROM '.$_PRE.'playoff AS j
    INNER JOIN '.$_PRE.'clubs AS e1 ON e1.id_club = j.id_club_dom
    INNER JOIN '.$_PRE.'clubs AS e2 ON e2.id_club = j.id_club_ext
    ORDER BY j.championnat, j.date_reelle');
    while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
        $coche = ($row['actif'] == '1') ? ' checked' : '';
    ?>
    <tr>
        <td width="200" class="donnees"><?php echo $row['actif']; ?></td>
        <td width="200" class="donnees"><?php echo $row['club']; ?></td>
        <td width='20' align='center' class='donnees'><?php echo $row['championnat']; ?></td>
        <td class="donnees"><?php echo $row['score']; ?></td>
        <td class="donnees" width="20">
            <input type="checkbox" name="check[]" id="check[]" value="<?php echo $row['id_match']; ?>"<?php echo $coche; ?> />
        </td>
    </tr>
    <?php
    }
    ?>

    Concernant la mise à jour des cases à cocher, il faudrait refaire la même requête SQL qui a permis de générer les cases à cocher et boucler.
    Puis dans la boucle rechercher si l'identifiant en cours (id_match) se trouve dans le $_POST['check'] (avec in_array).
    Si la valeur existe, c'est quelle a été cochée ->1
    Si la valeur n'existe pas c'est que cela n'a pas été coché -> 0.
    Puis faire la mise à jour.


    Au passage, si c'est bien PDO qui est utilisé, il ne faut pas utiliser mysql_error() pour afficher une éventuelle erreur, il faut en option activer la gestion des erreurs au niveau de la connexion.

Discussions similaires

  1. Update dans une boucle avec valeur incrémentale
    Par framus.class dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 24/09/2008, 11h19
  2. Réponses: 4
    Dernier message: 30/05/2008, 10h47
  3. Supprimer une colonne avec valeurs par défaut
    Par SlashOwnsU dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 18/09/2006, 10h10
  4. Update d une table avec plusieurs valeurs
    Par Nadaa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/05/2006, 08h58
  5. Trier une colonne avec des valeurs numériques ou textes
    Par jfc dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/02/2006, 11h15

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