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 de la BDD avec coches [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Par défaut Mise à jour de la BDD avec coches
    Bonjour, je voudrais afficher sur une page le contenue d'une table avec champs : id, prenom, nom, adresse (adresse mail), envoie.

    donc j'affiche le contenue de la table sous forme de tableau avec nom prenom et adresse, sur chaque ligne est précédé d'une coche de type checkbox.

    Je coche (ou pas) et j'envoie grace à un bouton de type "submit" . et je veux que sur la page de réception je mette cette table à jour dans le champs "envoie"

    A "1" si j'avais coché la case, et à "0" si j'avais pas coché la case.

    Evidement la difficulté est que se soit mis à jour sur la bonne entrée.

    voila mon code

    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
     <?php
    mysql_connect("*****", "*****", "*****");mysql_select_db("*****");
    $retour = mysql_query('SELECT * FROM newslettermembre ORDER BY id DESC');
    while( $donnees = mysql_fetch_array($retour) )
    {
    $checked = $donnees['envoie'] == 1 ? ' checked="checked"' : '';
    echo '<tr>
    <td><input type="checkbox" name="envoie" /></td>
    <td>' . htmlspecialchars(stripslashes($donnees['nom'])) . '</td>
    <td>' . htmlspecialchars(stripslashes($donnees['prenom'])) . '</td>
    <td>' . htmlspecialchars(stripslashes($donnees['adresse'])) . '</td>
    </tr>';
    }
     
    ?>
    ceci été la page d'envoie, mais la page de reception j'attend vos idée pacque je sais faire une UPDATE en boucle, mais je ne sais pas comment faire correspondre les bonnes entrée :

    Par exemple:

    [] DUPOND jean ***********
    [] HERMANN jean pierre *********
    [] FOGER maxime **************
    .....

    |envoyer|

    je coche par exemple HERMANN Jean pierre et les 2 autre je laisse décoché, et j'envoie: je veux donc que dans ma bdd, le champs "envoie" de jean pierre passe à "1" et les autre passent à "0" . mais je lutte

    Pouvez vous m'aider?

  2. #2
    Membre éprouvé Avatar de Aliosha
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 124
    Par défaut
    Alors, ça ne s'appelle pas « coche de type checkbox » mais « checkbox » tout court (je te charrie un peu).

    Une information importante à savoir, dans la récupération des données : si une checkbox est cochée, $_POST['nom_de_la_checkbox'] est égal à 'on' et si elle n'est pas cochée, $_POST['nom_de_la_checkbox'] est égal à... rien du tout ! Il n'y a pas de 'off', il n'y a rien, c'est tout...

    Donc, déjà, dans l'affichage de tes données, une manière de faire : :

    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
     
    $i=1;
    while( $donnees = mysql_fetch_array($retour) )
    {
    echo '<tr>
    <td><input type="checkbox" name="envoi$i" ';
    if ($donnees['envoi$1'] == 'on') {
    echo 'checked';
    }
    echo ' /></td>
    <td>' . htmlspecialchars(stripslashes($donnees['nom'])) . '</td>
    <td>' . htmlspecialchars(stripslashes($donnees['prenom'])) . '</td>
    <td>' . htmlspecialchars(stripslashes($donnees['adresse'])) . '</td>
    </tr>';
    $i++;
    }
    Ensuite (tu ne l'as pas spécifié, donc je le rappelle), il faut amorcer avant un formulaire <FORM type='' etc> (mais je me doute bien que tu as fait ça ! ).

    Dans la récupération des données, tes checkbox seront de type : $_POST['envoi1'], $_POST['envoi2'], etc.

    Voilà, donc tu as une suite de $_POST['envoi*'];... Comment faire autant d'update avec une boucle ?
    C'est très simple. Tu as $i, qui, à la fin de ton while, correspond au nombre de checkbox affichées plus 1 !

    (Là je suppose que ton script d'envoi de données est sur une page différente de ton formulaire)
    Pour « passer » ta valeur $i d'une page à l'autre, il suffit d'ajouter un input de type HIDDEN (une valeur cachée) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input TYPE HIDDEN name='nombredi' value='$i'>;
    Dans ton script de mise à jour, tu feras ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     for($j=1 ; $j< $_POST['nombredi'] ; $j++) {
         if ($_POST['envoi$j'] == 'on') { //(Si la checkbox est cochée)
            $requete = "UPDATE ou INSERT...";
         }
    }
    Pour « lier » tes données (nom, prénom et autre) d'une page à l'autre, tu fais de la même manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="HIDDEN" name="nomcache$1" VALUE="'.$donnees['nom'].'">
    Etc.
    A l'intérieur de ton WHILE (que tu as donné).

    Donc en gros, ça te donne un code de type :

    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
     
    $i=1;
    while( $donnees = mysql_fetch_array($retour) )
    {
    echo '<tr>
    <td><input type="checkbox" name="envoi$i" ';
    if ($donnees['envoi$1'] == 'on') {
    echo 'checked';
    }
    echo ' /></td>
    <td>' . htmlspecialchars(stripslashes($donnees['nom'])) . '
    <input type="HIDDEN" name="nomcache$1" VALUE="'.$donnees['nom'].'"></td>
    <td>' . htmlspecialchars(stripslashes($donnees['prenom'])) . '
    <input type="HIDDEN" name="prenomcache$1" VALUE="'.$donnees['prenom'].'"></td>
    <td>' . htmlspecialchars(stripslashes($donnees['adresse'])) . '
    <input type="HIDDEN" name="adressecache$1" VALUE="'.$donnees['adresse'].'"></td>
    </tr>';
    $i++;
    echo "<input TYPE HIDDEN name='nombredi' value='$i'>";
    }
    Le code précédent n'est pas du tout corrigé (notamment les guillements et les simple quotes... donc ne prends pas ça au pied de la lettre !).
    Bon, je t'ai un peu tout expliqué en vrac... J'espère que tu m'auras compris !

  3. #3
    Membre à l'essai
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Par défaut
    Sur tout les forum ou j'ai poster ce probleme, tu es le premier à m'avoir donner une répose concrete. je t'en remercie.

    Autre soucis, un ga que j'avais coché passe à "on" mais si le coup d'apres je décide de le décoché, il faut qui passe à .... 'vide' . comment faire pour effacer une valeur d'une champs sur une entrée précise?

    autre soucis : $i ne correspond pas forcément à l'id du ga.
    si je supprime 5 entrée, le numéroe 8 par exemple va se trouvé en 3 eme place, et si $i=3 il va croire que je veux mettre à jour l'entrée avec l'id 3 mais en réalité c'est l'emplacement n3 dans le tableau qui m'interesse

    vois-tu ou je veux en venir?

  4. #4
    Membre éprouvé Avatar de Aliosha
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 124
    Par défaut
    Citation Envoyé par cyril6789
    Autre soucis, un ga que j'avais coché passe à "on" mais si le coup d'apres je décide de le décoché, il faut qui passe à .... 'vide' . comment faire pour effacer une valeur d'une champs sur une entrée précise?
    En fait, il faut modifier un peu la boucle que je t'ai donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for($j=1 ; $j< $_POST['nombredi'] ; $j++) { 
          if ($_POST['envoi$j'] == 'on') { //(Si la checkbox est cochée) 
                $requete = "UPDATE table SET (ton_champ='$ta_valeur')";
          }
          else {
                $requete = "UPDATE table SET (ton_champ='')"; // La requête n'est pas complète, c'est pour te montrer
          }
    }
    Citation Envoyé par cyril6789
    autre soucis : $i ne correspond pas forcément à l'id du ga.
    si je supprime 5 entrée, le numéroe 8 par exemple va se trouvé en 3 eme place, et si $i=3 il va croire que je veux mettre à jour l'entrée avec l'id 3 mais en réalité c'est l'emplacement n3 dans le tableau qui m'interesse

    vois-tu ou je veux en venir?
    Oui !
    Mais en fait, il faut que tu ajoutes (j'avais oublié de te le dire) un champ caché dans ton formulaire (dans le while !) de type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<input type="HIDDEN" name="id$1" VALUE="'.$donnees['id'].'">';
    Ainsi, le résultat de $_POST['id3'] pourra être 8, et non pas 3, par exemple. :o)

  5. #5
    Membre à l'essai
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Par défaut
    merci je vais essayer cela, en attendant j'ai un probleme avec ton HIDDEN , il ne me cache rien du tout, il me mais un cadre de type text avec a valeur de $i ....

  6. #6
    Membre éprouvé Avatar de Aliosha
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 124
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    < INPUT TYPE=HIDDEN NAME=nom_variable VALUE=valeur_variable >
    (A une de mes réponses j'avais mis TYPE HIDDEN sans le =...)

    Désolé

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

Discussions similaires

  1. Mise a jour d'un BDD avec un flux XML
    Par pmejob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 04/12/2013, 17h54
  2. [AC-2003] Peut-on faire une mise à jour d'une BDD avec les données
    Par Xtine dans le forum Access
    Réponses: 10
    Dernier message: 29/03/2009, 18h26
  3. Mise à jour d'une BDD avec un champ accentué
    Par gyome314 dans le forum Ruby on Rails
    Réponses: 0
    Dernier message: 13/09/2007, 09h14
  4. Mise à jour dans un formulaire avec condition
    Par Bourni dans le forum Access
    Réponses: 4
    Dernier message: 06/03/2006, 22h13
  5. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46

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