Requete update ne s'execute pas

Fermé
Dix - 16 mai 2022 à 17:12
 Dix - 17 mai 2022 à 15:23
Salut Les gars j'ai besoin de votre aide, je travaille sur une application, je n'arrive pas a modifier les informaions du profil des eleves dans la liste. ça ne m'envoie aucune erreur pourtant rien ne se passe dans la table. Voila mon code
 <?php
error_reporting(E_ALL ^ E_NOTICE);
// Initialize the session
session_start();
 
// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
    header("location: login.php");
    exit;
}  
$servname = "localhost"; $dbname = "biblio"; $user = "root"; $pass = "";
      
            try{
                $connexion = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
                $connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
              
	// Récupèration de l'id passer en argument dans l'URL
 $id_eleve = (int) htmlentities(trim($_GET['id_eleve']));
  
if(!is_int($id_eleve) || $id_eleve == 0 || $id_eleve == $_SESSION['id_eleve']){
	  header('location: lister-eleves.php');
	  exit;
  } 
   //On récupère les informations de l'utilisateur grâce à son ID
  $lister = $connexion->query("SELECT * FROM eleves WHERE id_eleve = $id_eleve");
   $executeIsOk = $lister-> execute();
  $eleves = $lister->fetch(); 
   
   if (isset($_GET['modifier']) & !empty($_GET['modifier'])){
	 $nom = $_GET["nom"];
	 $prenom = $_GET["prenom"];
	 $date_nais = $_GET["date_nais"];
	 $addresse = $_GET["addresse"];
	 $classe = $_GET["classe"];
	 $telephone = $_GET["telephone"];
	 $groupe = $_GET["groupe"];
	 
 $modifier = $connexion -> query("UPDATE eleves SET nom='$nom', prenom='$prenom', date_nais='$date_nais', addresse='$addresse', classe='$classe', telephone='$telephone', groupe='$groupe' WHERE id_eleve=$id_eleve");
$eleves = $modifier -> execute();
    if ($eleves) {
      header("location: lister-eleves.php");
    }else{
      $erreur = "la mise à jour a échoué.";
    } 
  } 
			}catch(PDOException $e){
                echo "Erreur : " . $e->getMessage();
            }
?>
A voir également:

5 réponses

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
16 mai 2022 à 17:41
Bonjour,

Alors, déjà, mets le code de connexion dans un bloc try/catch pour lui tout seul...

Ensuite, place le code de ta requête, lui aussi dans un bloc try/catch rien que pour lui..

Et puis.. soit tu utilises query .. soit execute .. ( avec une très très forte préférence pour le exécute.
Il serait bien aussi d'utiliser les requêtes préparées correctement...
exemple:
//préparation de la requête et des variables
 $sql = "INSERT INTO matable (champ1,champ2)   VALUES (:valeur1,:autrevaleur)";

 $datas = array(':valeur1'=>$valeur1, ':autrevaleur'=>$toto);

//Execution de la requete
try{
  $requete = $bdd -> prepare($sql) ;
  $requete->execute($datas) ;
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " Les datas : " ;
  print_r($datas);
}



Et enfin, pour pouvoir voir les éventuelles erreurs, tu dois désactiver les redirections.
0
Merci enormement Jordane45, j'ai fait comme vous venez de me l'indiquer mais malheureusement rien ne se passe:
$servname = "localhost"; $dbname = "biblio"; $user = "root"; $pass = "";
      
            try{
                $connexion = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
                $connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }catch(PDOException $e){
                echo "Erreur : " . $e->getMessage();
            }
              
 // Récupèration de l'id passer en argument dans l'URL
 $id_eleve = (int) htmlentities(trim($_GET['id_eleve']));
  
/*if(!is_int($id_eleve) || $id_eleve == 0 || $id_eleve == $_SESSION['id_eleve']){
   header('location: lister-eleves.php');
   exit;
  } */
   //On récupère les informations de l'utilisateur grâce à son ID
  $lister = $connexion->query("SELECT * FROM eleves WHERE id_eleve = $id_eleve");
   $executeIsOk = $lister-> execute();
  $eleves = $lister->fetch(); 
   
   if (isset($_GET['modifier']) & !empty($_GET['modifier'])){
  $nom = $_GET["nom"];
  $prenom = $_GET["prenom"];
  $date_nais = $_GET["date_nais"];
  $addresse = $_GET["addresse"];
  $classe = $_GET["classe"];
  $telephone = $_GET["telephone"];
  $groupe = $_GET["groupe"];
  
  try{
  
 $modifier = $connexion -> query("UPDATE eleves SET nom='$nom', prenom='$prenom', date_nais='$date_nais', addresse='$addresse', classe='$classe', telephone='$telephone', groupe='$groupe' WHERE id_eleve=$id_eleve");
$eleves = $modifier -> execute();
    
  }catch(PDOException $e){
                echo "Erreur : " . $e->getMessage();
            }
  } 
   
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
16 mai 2022 à 18:30
Des lignes de code 18,19, 20 et 33,34 ne sont toujours pas bonnes....
Regarde bien l'exemple que je t'ai donné
0
J'ai fait exactement comme indiqué. Pour la requete SELECT tout va bien car les informations du profil s'affichent dans le formulaire, le veritable probleme reside dans la requete UPDATE, les informations modifiees sont affichées dans l'url pourtant rien ne se passe dans la table, la requete n'est pas executée.
$servname = "localhost"; $dbname = "biblio"; $user = "root"; $pass = "";
      
            try{
                $connexion = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
                $connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
				}catch(PDOException $e){
                echo "Erreur : " . $e->getMessage();
            }
              
	// Récupèration de l'id passer en argument dans l'URL
 $id_eleve = (int) htmlentities(trim($_GET['id_eleve']));
  
/*if(!is_int($id_eleve) || $id_eleve == 0 || $id_eleve == $_SESSION['id_eleve']){
	  header('location: lister-eleves.php');
	  exit;
  } */
   //On récupère les informations de l'utilisateur grâce à son ID
   try{
  $lister = $connexion->prepare("SELECT * FROM eleves WHERE id_eleve = $id_eleve");
  $datas = array($id_eleve);
   $executeIsOk = $lister-> execute($datas);
  $eleves = $lister->fetch(); 
  }catch(PDOException $e){
                echo "Erreur : " . $e->getMessage();
            }
   
   if (isset($_GET['modifier']) & !empty($_GET['modifier'])){
	 $nom = $_GET["nom"];
	 $prenom = $_GET["prenom"];
	 $date_nais = $_GET["date_nais"];
	 $addresse = $_GET["addresse"];
	 $classe = $_GET["classe"];
	 $telephone = $_GET["telephone"];
	 $groupe = $_GET["groupe"];
	 
	 try{
	 
 $modifier = $connexion -> prepare("UPDATE eleves SET nom='$nom', prenom='$prenom', date_nais='$date_nais', addresse='$addresse', classe='$classe', telephone='$telephone', groupe='$groupe' WHERE id_eleve=$id_eleve");
$datas = array($nom, $prenom, $date_nais, $addresse, $classe, $telephone, $groupe);
 $modifier -> execute($datas);
    
	 }catch(PDOException $e){
                echo "Erreur : " . $e->getMessage();
				print_r($datas);
            }
  } 
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
Modifié le 17 mai 2022 à 15:49
Oulalala... ce n'est pas vraiment ce que je t'ai donné comme exemple...

Bon.. gagnons un peu de temps...
Voici à quoi pourrait ressembler un code "propre".
(je l'ai découpé en "petites" fonctions ( que tu pourras réutiliser ailleurs dans tes pages...)

En gros

<?php 
//démarrage session
session_start();
  
  
//affichage des erreurs PHP dans la page pour être sûr de ne rien laisser trainer...
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('display_startup_errors', true);
  
function getCnx(){ 
  $servname = "localhost"; $dbname = "biblio"; $user = "root"; $pass = "";

  try{
      $connexion = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
      $connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      return $connexion;
  }catch(PDOException $e){
    echo "Erreur : " . $e->getMessage();
  }
}

//connexion à la bdd : 
$connexion = getCnx();


/**
* Code permettant d'éxecuter une requête préparée
*/

function dbQuery($sql,$datas){
  global $connexion; //on se connecte à la bdd
  try{
    $prep = $connexion->prepare($sql);
    return $prep->execute($datas);
  }catch(PDOException $e){
    echo "Erreur : " . $e->getMessage();
  }
   
}

//permet de faire une requête SELECT et de retourner le premier jeu de résultat
function db_One($sql,$datas=NULL){
  $res = dbQuery($sql,$datas);
  return  $res->fetch(); 
}

//permet de faire une requête SELECT et de retourner tous les résultats
function db_All($sql,$datas=NULL){
  $res = dbQuery($sql,$datas);
  return  $res->fetchAll(); 
}

/**
A utiliser pour les UPDATE ou les DELETE
*/
function db_Exec($sql,$datas=NULL){
  $res = dbQuery($sql,$datas);
  return  $res; 
}


function getEleveById($id_eleve){
  $sql = "SELECT * FROM eleves WHERE id_eleve = :id_eleve";
  $datas = [':id_eleve'=>$id_eleve];
   return db_One($sql,$datas);
}

function updateEleve($id_eleve,$nom,$prenom,$date_nais,$addresse,$classe,$telephone="",$groupe=""){
 $sql = "UPDATE eleves 
          SET nom=:nom, prenom=:prenom, date_nais=:date_nais, addresse=:addresse, classe=:classe, telephone=:telephone, groupe=:groupe 
        WHERE id_eleve= :id_eleve";
  $datas = [':nom'=>$nom, ':prenom'=>$prenom, ':date_nais'=>$date_nais, ':addresse'=>$addresse, ':classe'=>$classe, ':telephone'=>$telephone, ':groupe'=>$groupe, ':id_eleve'=>$id_eleve];
  return db_Exec($sql,$datas);
 }
  
// Récupèration de l'id passer en argument dans l'URL
$id_eleve = !empty($_GET['id_eleve']) ? intval(trim($_GET['id_eleve'])) : NULL;
  
if(!is_int($id_eleve)){
  header('location: lister-eleves.php');
  exit;
}
 //On récupère les informations de l'utilisateur grâce à son ID
$eleves = getEleveById($id_eleve); 

 
 if (!empty($_GET['modifier'])){
   $nom = !empty($_GET["nom"]) ? trim($_GET["nom"]) : "";
   $prenom = !empty($_GET["prenom"]) ? trim($_GET["prenom"]) : "";
   $date_nais = !empty($_GET["date_nais"]) ? trim($_GET["date_nais"]) : ""; // Attention.. doit être au format YYYY-MM-DD
   $addresse = !empty($_GET["addresse"]) ? trim($_GET["addresse"]) : "";
   $classe = !empty($_GET["classe"]) ? trim($_GET["classe"]) : "";
   $telephone = !empty($_GET["telephone"]) ? trim($_GET["telephone"]) : "";
   $groupe = !empty($_GET["groupe"]) ? trim($_GET["groupe"]) : "";

   $update = updateEleve($id_eleve,$nom,$prenom,$date_nais,$addresse,$classe,$telephone,$groupe);
   var_dump($update); //juste le temps des tests
} else {
   echo "Le champ modifier n'est pas envoyé dans ton url....";
   var_dump($_GET);
   exit;
}


PS: Pour faire de l'update ou de l'insert, je t'invite plutôt à utiliser un formulaire en $_POST plutôt que d'envoyer les variables dans l'URL. Tu auras moins de soucis.


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Jordane45, merci énormément frère. Merci d'avoir pris le temps de bien détaillé les choses a ma faveur. Vraiment grand merci
0