Requete update ne s'execute pas

Dix -  
 Dix -
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();
            }
?>

5 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    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
  2. Dix
     
    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
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      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
  3. Dix
     
    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
  4. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Dix
     
    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