Récupérer dernier ID

Résolu/Fermé
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 25 mai 2018 à 22:57
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 26 mai 2018 à 07:38
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

yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
25 mai 2018 à 23:07
bonsoir, que vaut $bdd?
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
25 mai 2018 à 23:28
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
25 mai 2018 à 23:48
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
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
26 mai 2018 à 07:38
Bonjour,
Je te remercie c'est nickel.
Cordialement.
0