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 :

PDO Liste déroulante : mise à jour valeur sélectionnée affichée


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    chomeur
    Inscrit en
    Janvier 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chomeur
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2014
    Messages : 3
    Par défaut PDO Liste déroulante : mise à jour valeur sélectionnée affichée
    Bonjour et tout d’abord MERCI à tous les bénévole du net qui m’ont permis de progresser de façon autodidacte.
    Depuis un mois, je recherche une solution dans tous les sens, en vain pendant des heures. C’est pourquoi, je sollicite votre aide précieuse pour trouver une solution et comprendre la raison de la non mise à jour des données.
    Mon problème :
    J’ai constitué une base SQL dbbase avec la table « trbp : id_rbp – rbp - id_programme »
    Cherchant à constituer une liste déroulante permettant d’afficher une valeur « rbp : 'Try 1', 'Try 2', 'Try 3', 'Try 4'), j’ai réussi à afficher la liste déroulante avec les valeurs et les données à modifier, mais, je ne les mettre à jour.

    1/ Base SQL
    Structure de la table `trbp`
    CREATE TABLE `trbp` (
    `id_rbp` INT (2) auto_increment,
    `rbp` varchar(255) default '',
    `id_programme` varchar (2) default '',
    PRIMARY KEY (`id_rbp`)
    );
    --
    Contenu de la table `trbp`

    INSERT INTO `trbp` VALUES ('1', 'Try 1', '4');
    INSERT INTO `trbp` VALUES ('2', 'Try 2', '2');
    INSERT INTO `trbp` VALUES ('3', 'Try 3', '7');
    INSERT INTO `trbp` VALUES ('4', 'Try 4', '3');
    -- --------------------------------------------------------

    2/ index.php
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    <!DOCTYPE html>
    <html>
    <meta charset="utf-8" />
    <head>
    <title>RBP Affiche et Modifie sur liste déroulante</title>
    </head>
    <body>
     
    <h2>Modification de la liste RBP</h2>
    <p>Sélectionner intitulé RBP</p>
    <p>=>Formulaire 1 :</p>
    <form name="affiche" action="" method="POST">
    <?php
    // pour faire un menu déroulant présenter les différentes rubriques
    echo "<select name='rbp' onChange='FocusObjet()'>";
    try
    {
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false; //important sur les configs récentes
    	$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8"; //pour l'utf-8
    	$pdo_options[PDO::MYSQL_ATTR_USE_BUFFERED_QUERY] = true;
    	$bdd = new PDO('mysql:host=localhost;dbname=dbbase', 'root', '', $pdo_options);
    }
    catch (Exception $e)
    {
    	die('Erreur : ' . $e->getMessage());
    }
    $reponse = $bdd->query('SELECT DISTINCT rbp FROM trbp');
    echo "<OPTION SELECTED VALUE='RBP à sélectionner'>RBP</OPTION>";
    while ($donnees = $reponse->fetch())
    {
    	$rbp = (string)$donnees['rbp'];
    	echo "<OPTION VALUE='$rbp'> $rbp </OPTION>\n";
    }
    echo "</select>";
    ?>
    <table width="300" border="0">
      <tr>
        <td><input type="reset" value="Effacer" style="position:relative;left:10"></td>
        <td><input type="submit" value="Afficher les données RBP" style="position:relative;left:10"></td>
      </tr>
    </table>
    </form>
    <?php
    /* Connexion à la base de données */
    include("connexion.inc.php");
    // On récupère tout le contenu de la table trbp (de dbbase où l'on s'est connecté)
    // Les valeurs utilisées dans la requête sont marqués avec le ? espace réservé
    $reponse = $dbh->prepare('SELECT * FROM trbp WHERE  rbp = ?'); 
    // Exécuter la requête. Passez à l'un tableau énumérant les valeurs à utiliser dans la requête
    $reponse->execute(array($_POST['rbp']));  
    // Obtenir les résultats
    $results = $reponse->fetchAll(); 
    foreach ($results as $row) {
        print '<p><b>Voici l\'enregistrement à modifier :</b><br/>RBP : '.$row['rbp'].' <br />Id RBP :'.$row ['id_rbp'].'<br />Programme : '.$row['id_programme'].'</p>';
    }
    ?>
     
    <p>=>Formulaire 2 :</p>
    <form name="update" action="" method="POST">
    <?php
    $message = ''; // fonctionne si supprimé
    $id_rbp = ''; // fonctionne si supprimé
    $rbp = ''; // fonctionne si supprimé
    $id_programme = ''; // fonctionne si supprimé
     
    // La page d'insertion 
    if ( isset( $_POST['rbp'])) {
     
    /* Connexion à la base de données avec PDO */
    include("connexion.inc.php"); // fonctionne si supprimé
    $rbp = $_POST['rbp'];
     
    /* "SELECT" étoile => On sélectionne tous les champs "FROM" de la table rbp */
    $sql = "SELECT * FROM trbp";
    $resultat = $dbh->query($sql);
    /* echo : Liste des enregistrements*/
    while ($row = $resultat->fetch(PDO::FETCH_ASSOC)) {
    If ($row['rbp'] == $rbp) /* Si vrai on exécute ce qui se trouve entre les crochets */
    {
    $id_rbp = $row['id_rbp'];
    $rbp = $row['rbp'];
    $id_programme = $row['id_programme'];
    }}
    /* echo $id_programme and UPDATE */
    if ( isset( $_POST['id_programme'] )) {
    if ( $_POST['id_programme'] != '') {
    $id_programme = $_POST['id_programme'];
    // Avec une requête préparée
    $req = $dbh->prepare('UPDATE trbp SET id_programme = :id_programme WHERE rbp = :rbp');
    $req->execute(array('rbp' => $rbp,'id_programme' => $id_programme));
    }}
    // Fermeture de la connexion
    $dbh = NULL;
    }else{
    $message = '<span style="color: red"> => Sélectionner un RBP</span>';
    }
    if ( $rbp != '' ) {
    $message = '<span style="color: red"> Intitulé RBP sélectionné :</span>';
    }
    ?>
    <p>=>Repère 3 :</p>
    <p><?php echo '<span style="color: red">'.$message.'</span>' ?><br><?php print $rbp; ?></p>
    <p><b>Entrez les nouvelles données ci-dessous, puis cliquez sur 'Modifier' :</b></p>
    <p>Modifiez id_programme : <input type="text" name="id_programme" row="3" size="3" maxlength="3" value="<?php print $id_programme; ?>"> puis cliquez sur 'Modifier'</p>
    <table width="300" border="0">
      <tr>
        <td><input type="reset" value="Annuler" style="position:relative;left:10"name="Lien_index" onclick="self.location.href='../after/index.php'"></td>
        <td><input type="submit" value="Modifier les données du RBP" style="position:relative;left:10"></td>
      </tr>
    </table>
    </form>
    </body>
    </html>
    Si je remplace le début du repère 3 en supprimant tout le début, jusqu’au formulaire, cela fonctionne, mais je n’ai plus de liste déroulante. Comment faire fonctionner UDAPTE avec une liste déroulante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form method="post" action=""> Entrez RBP ici puis 'Envoyer' (on modifierea après) : <br>
    RBP  : <input type="text" name="rbp" value="<?php print $rbp; ?>"> 
    <?php echo '<span style="color: red">'.$message.'</span>' ?><br>
    <input type="submit" name="submit" value="Envoyer ><br><br>
    Merci pour votre aide très précieuse !

  2. #2
    Membre chevronné
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2012
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2012
    Messages : 416
    Par défaut
    Bonsoir,

    Tu travailles avec 2 objets PDO ? 2 connexions distinctes ? Bases de données différentes ?

  3. #3
    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
    Cette partie la est à supprimer, elle fait n'importe quoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* "SELECT" étoile => On sélectionne tous les champs "FROM" de la table rbp */
    $sql = "SELECT * FROM trbp";
    $resultat = $dbh->query($sql);
    /* echo : Liste des enregistrements*/
    while ($row = $resultat->fetch(PDO::FETCH_ASSOC)) {
    If ($row['rbp'] == $rbp) /* Si vrai on exécute ce qui se trouve entre les crochets */
    {
    $id_rbp = $row['id_rbp'];
    $rbp = $row['rbp'];
    $id_programme = $row['id_programme'];
    }}
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Candidat au Club
    Homme Profil pro
    chomeur
    Inscrit en
    Janvier 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chomeur
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2014
    Messages : 3
    Par défaut
    Merci pour les conseils. Je ne travaille qu'avec une seule base de données. Les mêmes connexions me servaient de repères. Je vais nettoyer le code.
    En revanche, si je supprime la partie indiquée l'id_programme ne s'affiche plus dans la case à modifier...
    Je vais faire une pause ce week-end avant de reprendre la semaine prochaine.
    Surtout, je n'arrive pas à comprendre pourquoi la requête préparée ne fonctionne pas dans le présent cas de figure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Avec une requête préparée
    $req = $dbh->prepare('UPDATE trbp SET id_programme = :id_programme WHERE rbp = :rbp');
    $req->execute(array('rbp' => $rbp,'id_programme' => $id_programme));
    }}
    Merci pour vote aide.

  5. #5
    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
    Parce que $rbp et $id_programme sont mal définis.


    La raison est que ton code est un sac de noeuds.
    Tu devrais déjà commencer par le presenter proprement avec toutes les indentations nécessaires.

    Donc supprime le code que je t'ai indiqué, presente proprement et revise le tout
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Candidat au Club
    Homme Profil pro
    chomeur
    Inscrit en
    Janvier 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chomeur
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2014
    Messages : 3
    Par défaut
    Bonjour et merci pour vos réponse.
    Voici mon code initial qui fonctionne à merveille :
    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
    $message = '';
    $id_rbp = '';
    $rbp = '';
    $id_programme = '';
    // La page d'insertion 
    if ( isset( $_POST['rbp'])) {
    /* Connexion à la base de données avec PDO */
    include("connexion.inc.php");
    $rbp = $_POST['rbp'];
    /* "SELECT" étoile => On sélectionne tous les champs "FROM" la table trbp */
    $sql = "SELECT * FROM trbp";
    $resultat = $dbh->query($sql);
    /* On affiche chaque entrée une à une */
    while ($row = $resultat->fetch(PDO::FETCH_ASSOC)) {
    /*print_r($row);
    echo $row['id_rbp'].' - '.$row['rbp'].' - '.$row['id_programme'].' <br>';*/
    If ($row['rbp'] == $rbp) /* Si vrai on exécute ce qui se trouve entre les crochets */
    {
    $id_rbp = $row['id_rbp'];
    $rbp = $row['rbp'];
    $id_programme = $row['id_programme'];
    }}
    /* echo $id_programme */
    if ( isset( $_POST['id_programme'] )) {
    if ( $_POST['id_programme'] != '') {
    $id_programme = $_POST['id_programme'];
    // Avec une requête préparée
    $req = $dbh->prepare('UPDATE trbp SET id_programme = :id_programme WHERE rbp = :rbp');
    $req->execute(array('rbp' => $rbp,'id_programme' => $id_programme));
    }}
    // Fermeture de la connexion
    $dbh = NULL;
    }else{
    $message = '<span style="color: red"> <= entrez votre rbp ici</span>';
    }
    if ( $rbp != '' ) {
    $message = '<span style="color: red"> <= entrez votre rbp ici</span>';
    }
    ?>
    <html>
    <head>
    <title>Modification de l’ID Programme</title>
    </head>
    <body>
    <form method="post" action=" ">
    Entrez d'abord le rbp ici puis 'Envoyer' (vous modifierez après) :<br>
    Rbp : <input type="text" name="rbp" value="<?php print $rbp; ?>"><?php echo '<span style="color: red">'.$message.'</span>' ?><br>
    <input type="submit" name="submit" value="Envoyer"><br><br>
    Modifiez Id_programme puis cliquez sur 'Modifier' :<br>
    Id_programme : <input type="text" name="id_programme" value="<?php print $id_programme; ?>"><br>
    <input type="submit" name="submit" value="Modifier"><br>
    <br><input type="button" value="Retour à la page d'administration" name="LeLien1" onclick="self.location.href='index.php' " 
    style="background-color:#ececec" style="color:white; font-weight:bold"onclick><br>
    </form>
    </body>
    </html>
    Mais quand je faire un liste déroulante à la place du code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Entrez d'abord le rbp ici puis 'Envoyer' (vous modifierez après) :<br>
    Rbp : <input type="text" name="rbp" value="<?php print $rbp; ?>"><?php echo '<span style="color: red">'.$message.'</span>' ?><br>
    <input type="submit" name="submit" value="Envoyer"><br><br>
    Cela ne fonctionne pas. Donc comment faire une liste déroulante à la place de ce dernier code pour j'obtienne le même résultat ?
    Merci pour votre aide.

Discussions similaires

  1. UserForm liste déroulante - mise à jour
    Par Olivierporcinet dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/05/2013, 16h52
  2. Réponses: 0
    Dernier message: 13/08/2011, 23h16
  3. Réponses: 5
    Dernier message: 27/03/2008, 11h45
  4. Réponses: 5
    Dernier message: 23/09/2007, 18h47
  5. liste déroulante mise a jour
    Par D.Mounir dans le forum Excel
    Réponses: 17
    Dernier message: 18/06/2007, 11h34

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