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

Messages postés
6
Date d'inscription
lundi 19 mai 2014
Statut
Membre
Dernière intervention
8 août 2015
- - Dernière réponse : PARMGG
Messages postés
6
Date d'inscription
lundi 19 mai 2014
Statut
Membre
Dernière intervention
8 août 2015
- 8 août 2015 à 18:06
Bonjour et tout d'abord MERCI à tous les bénévoles du net et à jordane45 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.
Le 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.

Voici mon code :

1/ Base SQL
-- --------------------------------------------------------
--
-- Structure de la table `trbp2`
--
CREATE TABLE `trbp2` (
`id_rbp` INT (2) auto_increment,
`rbp` varchar(255) default '',
`id_programme` varchar (2) default '',
PRIMARY KEY (`id_rbp`)
);
--
-- Contenu de la table `trbp2`
--
INSERT INTO `trbp2` VALUES ('1', 'Try 1', '4');
INSERT INTO `trbp2` VALUES ('2', 'Try 2', '2');
INSERT INTO `trbp2` VALUES ('3', 'Try 3', '7');
INSERT INTO `trbp2` VALUES ('4', 'Try 4', '3');
-- --------------------------------------------------------

2/ index.php


<!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
<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 §
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
26749
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 novembre 2019
317
1
Merci
Et puis .. ce bout de code :
/* 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));
}}

peut être réécrit plus proprement comme ceci :
(tu noteras que je récupères AVANT de les utiliser... les variables provenant de $_POST )
// Récupération 'propre' de la variable AVANT de l'utiliser
$rbp = !empty($_POST['rbp']) ? $_POST['rbp'] : NULL;
$id_programme = !empty($_POST['id_programme']) ? $_POST['id_programme'] : NULL;

if( $rbp && $id_programme) {

  // Avec une requête préparée
  $sql = "UPDATE trbp 
             SET id_programme = :id_programme 
          WHERE rbp = :rbp";
  $params = array(  ':rbp' => $rbp
                   ,':id_programme' => $id_programme
     );
  try{
    $req = $dbh->prepare($sql);
    $req->execute($params);
  }catch (Exception $e){
     echo "<br>Erreur : " . $e->getMessage());
     echo "<br> Requete :".$sql;
     echo "<br> Params :<br>";
     print_r($params);
   }
}

>>> Et tu peux le placer à la suite du code PHP que je t'ai donné précédemment.. avant ton html.
==>> Dis toi que dans la partie "html" de ton code... tu ne dois y mettre que de l'affichage ... tout ce qui est du "traitement" comme les INSERT/ UPDATE... doivent se faire (surtout pour des raisons de clarté du code....) tout en haut de ta page... (comme je l'ai fait dans le code que je t'ai donné tout à l'heure).





Cordialement,
Jordane

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 215 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jordane45
Messages postés
26749
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 novembre 2019
317
0
Merci
Bonjour,

Avant de t'aider .. il va falloir que tu fasses un peu de ménage dans ton code....
Déjà .. pourquoi as tu x fois la connexion à ta BDD ?
Une seule en début de page suffit !
Et pour se faire .. le code
include("connexion.inc.php");

est là pour ça .... pas besoin de remettre un bloc de connexion en plus !
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());
}

..... ce code fait doublons avec le contenu de ton fichier connexion.inc.php je pense.


Ensuite... essayes de nous reposter un code avec de l'indentation... là ... ce n'est pas lisible.




jordane45
Messages postés
26749
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 novembre 2019
317 -
Voici par exemple .. à quoi pourrait ressembler le début de ton code

<?php
//-----------------------------------------------------------------------------------//
//Connexion à la BDD :
//-----------------------------------------------------------------------------------//
/* Connexion à la base de données */
require_once("connexion.inc.php");

//-----------------------------------------------------------------------------------//

//Récupération des éléments de la liste :
try{
  $sql = "SELECT DISTINCT rbp FROM trbp";
  $prepare = $bdd->prepare($sql);
  $prepare->execute();
  //on stocke le résultat de la requête dans un array
  $arrListe = $prepare->fetchall(); 
} catch (Exception $e){
 die('Erreur : ' . $e->getMessage());
}

?>
<!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()'>";
    echo "<OPTION SELECTED VALUE='RBP à sélectionner'>RBP</OPTION>";
    foreach($arrListe as $L) {
       $rbp = $L['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>
PARMGG
Messages postés
6
Date d'inscription
lundi 19 mai 2014
Statut
Membre
Dernière intervention
8 août 2015
> jordane45
Messages postés
26749
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 novembre 2019
-
Merci Jordane pour ta réponse rapide.
Le code marche parfaitement comme tu le dis alors qu'auparavant la liste déroulante ne fonctionnait pas avec "connexion.inc.php" (que j'ai supprimé tant tout le reste du texte : cela me servait de repère, car il était indiqué ("connexion OK à l'endroit concerné). Félicitations !!!!
En revanche, je n'arrive pas à comprendre pourquoi UPDATE ne fonctionne pas :
$req = $dbh->prepare('UPDATE trbp SET id_programme = :id_programme WHERE rbp = :rbp');
$req->execute(array('rbp' => $rbp,'id_programme' => $id_programme));
}}$id_programme));

Cela me semble bien étrange.
Encore merci !
jordane45
Messages postés
26749
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 novembre 2019
317 -
D'où vient cette variable $dbh ?
Ne serait ce pas plutôt $bdd ?
Commenter la réponse de jordane45
Messages postés
6
Date d'inscription
lundi 19 mai 2014
Statut
Membre
Dernière intervention
8 août 2015
0
Merci
Bonjour et merci Jordanne !
Cela fonctionne à merveille.
Mon seul problème maintenant est que la valeur à modifier ne s'affiche plus dans la case input value="<?php print $id_programme; ?>.
Voici le code modifié :

<?php
//-----------------------------------------------------------------------------------//
//Connexion à la BDD :
//-----------------------------------------------------------------------------------//
/* Connexion à la base de données */
require_once("connexion.inc.php");
//-----------------------------------------------------------------------------------//
//Récupération des éléments de la liste :
try{
//$sql = "SELECT DISTINCT rbp FROM trbp";
$sql = "SELECT * FROM trbp";
$prepare = $dbh->prepare($sql);
$prepare->execute();
//on stocke le résultat de la requête dans un array
$arrListe = $prepare->fetchall();
} catch (Exception $e){
die('Erreur : ' . $e->getMessage());
}
?>
<!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()'>";
echo "<OPTION SELECTED VALUE='Selection RBP'>Sélectionner un RBP</OPTION>";
foreach($arrListe as $L) {
$rbp = $L['rbp'];
echo "<OPTION VALUE='$rbp'> $rbp </OPTION>\n";
}
echo "</select>";
// La valeur utilisée dans la requête est marquée 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>';
}
if ( isset( $_POST['rbp'])) {
$rbp = $_POST['rbp'];

// Récupération de la variable AVANT de l'utiliser
$rbp = !empty($_POST['rbp']) ? $_POST['rbp'] : NULL;
$id_programme = !empty($_POST['id_programme']) ? $_POST['id_programme'] : NULL;
if( $rbp && $id_programme) {

// Avec une requête préparée OK
$sql = "UPDATE trbp SET id_programme = :id_programme WHERE rbp = :rbp";
$params = array( ':rbp' => $rbp ,':id_programme' => $id_programme );
$req = $dbh->prepare($sql);
$req->execute($params);
}

// Fermeture de la connexion
$dbh = NULL;
}
?>
<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='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>


Merci encore pour ton aide précieuse !
Commenter la réponse de PARMGG
Messages postés
26749
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 novembre 2019
317
0
Merci
Essayes ça :
<?php 
// Affichage des erreurs PHP le temps des tests
error_reporting(E_ALL);

//-----------------------------------------------------------------------------------//
//Connexion à la BDD :
//-----------------------------------------------------------------------------------//
/* Connexion à la base de données */
require_once("connexion.inc.php");


//-----------------------------------------------------------------------------------------------------//
// Fonctions (que tu peux placer dans un fichier externe que tu n'auras qu'à inclure au besoin...)
//-----------------------------------------------------------------------------------------------------//

	/**
	*Pour les requêtes de type SELECT
	* --> Retourne le résultat sous forme d'array.
	*/
	function querySelect($sql,$params=NULL){
		global $dbh; // pour la cnx à la BDD
		$result = array();
		try{
			$prepare = $dbh->prepare($sql);
			$prepare->execute($params);
			//on stocke le résultat de la requête dans un array
			$result = $prepare->fetchall(); 
	 }  catch (Exception $e){
			die('Erreur : ' . $e->getMessage());
		}
		return $result;
	}

	/**
	* Pour les requêtes de types DELETE / UPDATE / INSERT
	*/
	function queryExec($sql,$params=NULL){
		global $dbh;
		try{
			$prepare = $dbh->prepare($sql);
			$result = $prepare->execute($params);
		} catch (Exception $e){
			die('Erreur : ' . $e->getMessage());
	 }
	 return $result;
	}




//------------------------------------------------------------------------------------//
// Récupération de la variable AVANT de l'utiliser
//------------------------------------------------------------------------------------//
$rbp = !empty($_POST['rbp']) ? $_POST['rbp'] : NULL;
$id_programme = !empty($_POST['id_programme']) ? $_POST['id_programme'] : NULL;


//------------------------------------------------------------------------------------//
//Récupération des éléments de la liste :
//------------------------------------------------------------------------------------//
  $sql = "SELECT * FROM trbp";
  $arrListe = querySelect($sql);

 // Obtenir les résultats correspondant à $_POST('rbp']
 if($rbp){
	$sql = "SELECT * FROM trbp WHERE  rbp = :rbp";
	$params = array(":rbp"=>$rbp);
  $ListeRbp = querySelect($sql,$params); 
 }


?>
<!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()'>";
    echo "<OPTION SELECTED VALUE='Selection RBP'>Sélectionner un RBP</OPTION>";
    foreach($arrListe as $L) {
       $rbp = $L['rbp'];
       echo "<OPTION VALUE='$rbp'> $rbp </OPTION>\n";
    }
    echo "</select>";

		
    // Informations sur l'élément à modifier :
    foreach ($ListeRbp 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>';
    }

	  //MISE A JOUR DE TRBP
    if( $rbp && $id_programme) {
      // Avec une requête préparée OK
      $sql = "UPDATE trbp SET id_programme = :id_programme WHERE rbp = :rbp";
      $params = array( ':rbp' => $rbp ,':id_programme' => $id_programme );
      $update = queryExec($sql,$params);
    }
 
  // Fermeture de la connexion
  $dbh = NULL;
  }
  ?>
   <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 echo $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='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>

Commenter la réponse de jordane45
Messages postés
6
Date d'inscription
lundi 19 mai 2014
Statut
Membre
Dernière intervention
8 août 2015
0
Merci
Bonsoir Jordanne,
Merci pour la proposition. Elle s'apparente à un code que j'avais essayé de faire avec des fonctions...
Cependant, je tombe toujours sur la même erreur :
« Undefined" variable: ListeRbp in / [...] index.php on line 81 » c'est à dire la ligne:
// Informations sur l'élément à modifier :
foreach ($ListeRbp as $row) {

Les valeurs ne se modifient plus
et la valeur initiale à modifier ne s'affiche plus...
C'est pourquoi, j'étais revenu à une solution plus "basique" (bien que mal codée) à partir de ce qui fonctionnait sans liste déroulante(mais mon but est de faire le code avec une liste déroulante).
Durant mon mois de vacances, j'ai tout essayé et ne comprends toujours pas l'erreur.
Reprenant mon travail, je ne reviendrai sur le sujet qu'en fin de semaine prochaine.
Merci pour ton aide et bien cordialement.
Commenter la réponse de PARMGG
Messages postés
6
Date d'inscription
lundi 19 mai 2014
Statut
Membre
Dernière intervention
8 août 2015
0
Merci
Bonjour Jordane,
Grâce à ton aide, j'ai avancé sur le sujet.
Le code ci-dessous fonctionne très bien.
Cependant, je suis obligé de cliquer à nouveau sur la liste déroulante pour modifier l'id-programme.
Comment éviter de sélectionner à nouveau la liste déroulante pour le modifier ?
<?php
/* Connexion à la base de données */
require_once("connexion.inc.php");
//Récupération des éléments de la liste :
try{
//$sql = "SELECT DISTINCT rbp FROM trbp";
$sql = "SELECT * FROM trbp";
$prepare = $dbh->prepare($sql);
$prepare->execute();
//on stocke le résultat de la requête dans un array
$arrListe = $prepare->fetchall();
} catch (Exception $e){
die('Erreur : ' . $e->getMessage());
}
?>
<!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>

<form name="update" action="" method="POST">
<?php
// pour faire un menu déroulant présenter les différentes rubriques
echo "<select name='rbp' onChange='FocusObjet()'>";
echo "<OPTION SELECTED VALUE='Selection RBP'>Sélectionner un RBP</OPTION>";
foreach($arrListe as $L) {
$rbp = $L['rbp'];
echo "<OPTION VALUE='$rbp'> $rbp </OPTION>\n";
}
echo "</select>";
// La valeur utilisée dans la requête est marquée 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 : <input type="text" name="id_programme" row="3" size="3" maxlength="3" value="'.$row['id_programme'].'"><br />Sélectionner à nouveau le RBP, puis entrer des nouvelles données dans la case ci-dessus, cliquez enfin sur OK pour valider la modification</p>';
}
if ( isset( $_POST['rbp'])) {
$rbp = $_POST['rbp'];
// Récupération 'propre' de la variable AVANT de l'utiliser A VOIR
$rbp = !empty($_POST['rbp']) ? $_POST['rbp'] : NULL;
$id_programme = !empty($_POST['id_programme']) ? $_POST['id_programme'] : NULL;
if( $rbp && $id_programme) {

// Avec une requête préparée OK
$sql = "UPDATE trbp SET id_programme = :id_programme WHERE rbp = :rbp";
$params = array( ':rbp' => $rbp ,':id_programme' => $id_programme );
try{
$req = $dbh->prepare($sql);
$req->execute($params);
}catch (Exception $e){
//echo "<br>Erreur : " . $e->getMessage());
echo "<br>Erreur : " . $e->getMessage();
echo "<br> Requete :".$sql;
echo "<br> Params :<br>";
print_r($params);
}
}
// Fermeture de la connexion
$dbh = NULL;
}
?>
<table width="300" border="0">
<tr>
<td><input type="reset" value="Annuler" style="position:relative;left:10"name="Lien_index" onclick="self.location.href='index.php'"></td>
<td><input type="submit" value="OK" style="position:relative;left:10"></td>
</tr>
</table>
</form>
</body>
</html>


Merci encore pour ton aide très très précieuse et remarquable !
Bien cordialement,
Commenter la réponse de PARMGG