Récupérer dernier ID

Résolu
Bonjour,
J'arrive presque à la fin de ma partie administration et voilà que je tombe sur un p'tit problème.
Lorsque je veux récupérer le dernier ID voici l'erreur qui m'est retourné.
Fatal error: Call to a member function lastInsertId() on null in

Voici la page concerné pouvez-vous m'aider s'ils vous plait, je vous remercie.
$action 	= 'new';
$a 			= !empty($_GET['a']) ? $_GET['a'] : NULL;
$submit 	= !empty($_POST['submit']) ? $_POST['submit'] : NULL;
$haction 	= !empty($_POST['haction']) ? $_POST['haction'] : NULL;

$idrep 		= !empty($_REQUEST['idrep']) ? $_REQUEST['idrep'] : NULL;
$drepet		= !empty($_POST['drepet']) ? dw2m($_POST['drepet']) : '';
$idpers 	= !empty($_POST['idpers']) ? $_POST['idpers'] : '';
$idloc 		= !empty($_POST['idloc']) ? $_POST['idloc'] : '';

switch($a) {
	case 'new': $action = 'new';  break; 
	default   : $action = 'new';  break;
}

if($submit) {

	switch($haction) {
		case 'new':
			// Construction de la requete d'ajout
			$sql = "INSERT INTO cdc_repetitions (drepet, idloc) VALUES (:drepet, :idloc)";
			$datas = array('drepet' => $drepet, 'idloc' => $idloc);
			$result = executeQuery($sql,$datas);
			$typenr = "enregistré"; 
			$reqaj = $sql;
 
			$idrep 		= $bdd->lastInsertId();
			$presents  	= isset($_POST['presents']) ? $_POST['presents'] : NULL;
			
		if (is_array($presents)) {	
		    foreach($presents as $idpers) {
			
			$sql = "INSERT INTO cdc_assister (idpers, idrep) VALUES (:idpers, :idrep)";
			$datas = array('idpers' => $idpers, 'idrep' => $idrep);
			$result = executeQuery($sql,$datas);
			$typenr = "enregistré"; 
			$reqaj = $sql; 
		    }
		}
			$success = "<span class='success'>Les présences à la répétition - ".trim(stripslashes(" du " . dateFR("$drepet")))." - a été $typenr.</span>";
			break;
	}
}

4 réponses

  1. Contributeur
    bonsoir, que vaut $bdd?
    0
    1. Bonsoir,
      En haut de ma page j'ai
      require("libs/init.php");
      et dans le fichier init.php j'ai les 2 fonctions
      function bdd() {
          $PARAM_hote        	='**********';     	
          $PARAM_nom_bdd     	='*********'; 	
          $PARAM_utilisateur 	='************';          	
          $PARAM_mot_passe   	='******';              	
      
          try {
      	$bdd = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bdd, $PARAM_utilisateur, $PARAM_mot_passe);
      	$bdd->exec("SET CHARACTER SET utf8");
      	$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
      	$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          }
      
          catch(Exception $e) {
      	echo 'Impossible de se connecter à la base de donnée</br>';
      	echo 'Erreur : ' .  $e->getMessage() . '<br />';
      	echo 'N° : ' .      $e->getCode();
          }
          return $bdd;
      }
      // Fonction qui sert à faire les requêtes SQL
      // Contient déjà le try/catch
      function executeQuery($sql,$datas = NULL) {
          $bdd = bdd();
          //exécution de la requête
          try {
              $requete = $bdd->prepare($sql);
              $requete->execute($datas);
          } catch(Exception $e) {
            // en cas d'erreur :
              echo " Erreur ! ".$e->getMessage();
              exit(0); // en cas d'erreur.. arrête le script !
          }
          return $requete;
      }
      
      0
      1. Modérateur
        Il faut ajouter un nouvelle fonction à ton fichier init.php
        //Fonction à utiliser pour faire un INSERT
        // return : l'id auto-incrémenté généré par l'insertion
        function QueryInsert($sql,$datas = NULL) {
            $bdd = bdd();
            //exécution de la requête
            try {
                $requete = $bdd->prepare($sql);
                $requete->execute($datas);
                $newid = $bdd->lastInsertId();
            } catch(Exception $e) {
              // en cas d'erreur :
                echo " Erreur ! ".$e->getMessage();
                exit(0); // en cas d'erreur.. arrête le script !
            }
            return $newid;
        }
        


        et donc dans ton code
        case 'new':
        			// Construction de la requete d'ajout
        			$sql = "INSERT INTO cdc_repetitions (drepet, idloc) VALUES (:drepet, :idloc)";
        			$datas = array('drepet' => $drepet, 'idloc' => $idloc);
        			$idrep = QueryInsert($sql,$datas); // récupère l'id AutoIncrémenté de l'insert
        			$typenr = "enregistré"; 
         			$reqaj = $sql
                              
                          //la suite de ton code ....
        

        0
        1. Bonjour,
          Je te remercie c'est nickel.
          Cordialement.
          0