Récupérer dernier ID [Résolu/Fermé]

Signaler
Messages postés
407
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
6 février 2020
-
Messages postés
407
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
6 février 2020
-
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

Messages postés
16435
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
24 juillet 2021
880
bonsoir, que vaut $bdd?
Messages postés
407
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
6 février 2020
33
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;
}
Messages postés
33126
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 juillet 2021
3 635
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 ....

Messages postés
407
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
6 février 2020
33
Bonjour,
Je te remercie c'est nickel.
Cordialement.