Récupérer dernier ID

Résolu
LaChaux78 Messages postés 585 Date d'inscription   Statut Membre Dernière intervention   -  
LaChaux78 Messages postés 585 Date d'inscription   Statut Membre Dernière intervention   -
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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonsoir, que vaut $bdd?
    0
  2. LaChaux78 Messages postés 585 Date d'inscription   Statut Membre Dernière intervention   32
     
    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
  3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    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
  4. LaChaux78 Messages postés 585 Date d'inscription   Statut Membre Dernière intervention   32
     
    Bonjour,
    Je te remercie c'est nickel.
    Cordialement.
    0