Petit probléme avec mysql_insert_id()...

Eléphant du PHP | 96 Messages

22 août 2006, 11:59

Bonjour à tous,
J'insére des données par le biais d'un formulaire qui utilise une fonction
"insere_element"...je voudrais récuperer au final l'ID du dernier enregistrement dans mon bandeau d'information du type :
Vous avez ajouté l'année "2007" dans la base.
Le champ id_millesime de ma table millesime est en autoincrémentement,
C'est la 1ére fois que j'utilise mysql_insert_id() Je cherche depuis ce matin et je ne trouve pas mon erreur. :cry:

Code : Tout sélectionner

Le fichier fonctions_ventes.php
<?php
//insère un nouvel élément (commercial, modéle, millesime etc) dans la base de donnée, après avoir vérifié si celui-ci existe déjà.
//$table = table dans laquelle insérer la donnée.
//$champ = champ dans lequel insérer la donnée.
//$element_insere = nouvel élément à insérer (commercial, modéle, millesime etc).
			function insere_element($table,$champ,$element_insere)
			{
			global $info;
			$texte_query="select * from $table where $champ='".$element_insere."'";
			$req=mysql_query($texte_query);
			$result=mysql_fetch_array($req);//on cherche si l'élément (origine, commercial, millésime...) est déjà dans la base
			if ($result=="")//si non, on l'insère
			{
			$text_query="insert into $table ($champ) values ('".$element_insere."')";			
			mysql_query($text_query) or die (mysql_error());
//id de la nouvelle insertion
			$dernier_id=mysql_insert_id();	
			$info=$table."_cree";	
				$return=($info);	
			}
			else { 
			$info="existe";
			return ($info);
			}
			}
?>

Code : Tout sélectionner

Le fichier ajouter_elements.php
<?php  
//Onglet pour ajouter une nouvelle année
		 	$lien="index.php?liste=ajouter_elements&elements=millesime";?>	
			<strong><?php echo ('<a href="'.$lien.'" target="_top" title=" Insérer une nouvelle année "><span class="trait"> | </span><span class="menu_recherche">Insérer une nouvelle année<span></a><span class="trait"> | </span>');?></strong> 
<?php
//code simplifié
switch($elements) //teste sur quel lien on a cliqué dans le menu
{
//Formulaire pour ajouter une nouvelle année 
			case'millesime':?>
<fieldset>
			<legend><strong>Ajouter une nouvelle année</strong></legend>
			<table> 
			<tr>
<?php		
			form_un_champ("index.php?liste=ajouter_elements&elements=millesime","<strong><span class=\"menu_liste\">Ajouter une année : </span></strong>","mil","formulaire","millesime","Ajouter");	?>
			</tr>		  	
			</table>
			<br />
</fieldset>	 		
<?php
break;
}
?>

Code : Tout sélectionner

Le fichier index.php
<?php  
switch($formulaire) 
	{
case 'millesime':
				insere_element("millesime","millesime",$mil);
	
			break;

default:
			    $info="Oops ! erreur";
}
			    if ($formulaire!="")
/*après passage dans un formulaire et mise à jour des bases de données 
on relance la page index avec le message $info*/
{
				rediriger("index.php?message=$info");
}

switch($message)
{
case 'millesime_cree':
			$dernier_id=(isset($_GET['dernier_id'])) ? $_GET['dernier_id'] : "";						
			$req_nouvel_millesime=mysql_query("select * from millesime where millesime ='".$dernier_id."'") or die(mysql_error());
//C'est ici que je voudrais récuperer le dernier_id			
			echo "<br /><br /><center><span class=\"menu_liste\">Vous avez ajouté l'année ".$dernier_id." dans la base</span></center>";			
			break;
}?>
Une idée :idea: d'avance merci. :D
Kimble

Eléphant du PHP | 332 Messages

22 août 2006, 12:27

Le champ id_millesime de ma table millesime est en autoincrémentement, ...
function insere_element($table,$champ,$element_insere)
...
insere_element("millesime","millesime",$mil);
Ca ne serait pas plutôt ?
insere_element("millesime","id_millesime",$mil);

Eléphant du PHP | 96 Messages

22 août 2006, 13:07

Ca ne serait pas plutôt ?
insere_element("millesime","id_millesime",$mil);
Salut, ben non...la donnée envoyée dans le champ millesime est de type : 2006, 2007, etc...
et le champ id_millesime est incrémenté automatiquement.
Et c'est id de ce champ que j'aimerais récuperer.

Eléphant du PHP | 177 Messages

22 août 2006, 13:23

Salut
Je dirais que soit tu t'arrange pour passer par post ou get d'un script a l'autre
ton millesime, soit si tu as dans ta table un champ date utilise le.
genre
$req_nouvel_millesime=mysql_query("select id_millesime from millesime ORDERBY date ASC LIMIT 1) or die(mysql_error()); 

juste une idée...

Eléphant du PHP | 96 Messages

22 août 2006, 14:09

Je te remercie pour ta réponse mais ce n'est pas ça...
Ce que je veux récupérer c'est la variable $dernier_id générée par la fonction mysql_insert_id(). :roll:

Eléphant du PHP | 396 Messages

22 août 2006, 14:31

Tu insères la nouvelle données dans un fichier puis tu veux utiliser mysql_insert_id() dans un autre pour afficher l'id de la dernière donnée insérée?
Ou tout se passe sur le même fichier?

Si ça se passe sur des fichiers differents tu ne peux pas utiliser, il me semble, la fonction sur le 2ème fichier mais tu dois passer par une requête SELECT MAX.
Il me semble que mysql_insert_id() doit être utilisé "dans la foulée" de l'insertion.

Eléphant du PHP | 96 Messages

22 août 2006, 14:44

L'appel à la fonction mysql_insert_id() se fait dans Le fichier fonctions_ventes.php aprés l'insert into :
<?php
$text_query="insert into $table ($champ) values ('".$element_insere."')";             
            mysql_query($text_query) or die (mysql_error()); 
//id de la nouvelle insertion 
            $dernier_id=mysql_insert_id();     
?>
Et je veux récupérer $dernier_id dans le fichier index.php :
<?php
switch($message) 
{ 
case 'millesime_cree': 
            $dernier_id=(isset($_GET['dernier_id'])) ? $_GET['dernier_id'] : "";                         
            $req_nouvel_millesime=mysql_query("select * from millesime where millesime ='".$dernier_id."'") or die(mysql_error()); 
//C'est ici que je voudrais récuperer le dernier_id             
            echo "<br /><br /><center><span class=\"menu_liste\">Vous avez ajouté l'année ".$dernier_id." dans la base</span></center>";             
            break; 
}?> 
J'ai du louper une marche quelque part...

Eléphant du PHP | 177 Messages

22 août 2006, 14:49

As tu bien lut comment on utilise mysql_insert_id().
Il faut le mettre a suivre ton insertion si je ne m'abuse.
Et c'est le derniere id que tu veux recup ou afficher l'année du dernier millesime ????
Quoique l'année semble correspondre a $dernier_id.
Mais en gros je te conseillais de faire une requette qui selectionnait le dernier millesime entré pour pouvoir l'afficher si tu avais un champ date.
Sinon il faut que tu passe tes variables d'un script à l'autre. Car par default dans php une variable est propre au script ou a la fonction qui l'utilise. OU alors il faut le preciser avec global_var sinon utilise post ou get.

Eléphant du PHP | 96 Messages

24 août 2006, 15:58

Donc, si je comprend bien je ne peux pas récupérer la variable $dernier_id
générée par la fonction mysql_insert_id() ? et la passer à la page index.php ? Bizarre ! non ? :-k

Eléphant du PHP | 96 Messages

28 août 2006, 18:44

Voilà la solution... :D

Le fichier fonctions_ventes.php
<?php //insère un nouvel élément (commercial, modéle, millesime etc) dans la base de donnée, après avoir vérifié si celui-ci existe déjà.
//$table = table dans laquelle insérer la donnée.
//$champ = champ dans lequel insérer la donnée.
//$element_insere = nouvel élément à insérer (commercial, modéle, millesime etc).
			function insere_element($table,$champ,$element_insere)
			{
			global $info;
			$texte_query="select * from $table where $champ='".$element_insere."'";
			$req=mysql_query($texte_query);
			$result=mysql_fetch_array($req);//on cherche si l'élément (origine, commercial, millésime...) est déjà dans la base
			if ($result=="")//si non, on l'insère
			{
			$text_query="insert into $table ($champ) values ('".$element_insere."')";			
			mysql_query($text_query) or die (mysql_error());			
			$dernier_id=mysql_insert_id();
//On crée une session pour conserver le dernier id générée par la fonction mysql_insert_id()
			$_SESSION['dernier_id']=$dernier_id;						
			$info=$table."_cree";			
			$return=($info);	
			}
			else { 
			$info="existe";
			return ($info);
			}
			}
?>
Le fichier index.php
<?php
session_start(); 			  		
		include("connexion.php");
		include("fonctions_ventes.php");

../..


switch($message)
{
case 'millesime_cree':
/*On appelle la session crée dans le fichier fonctions_ventes.php
"function insere_element" */				 
			$dernier_id = isset( $_SESSION[ 'dernier_id' ] ) ? $_SESSION[ 'dernier_id' ] : "";									
			$req_nouvel_millesime = 'SELECT millesime, id_millesime FROM millesime WHERE id_millesime LIKE "'.$dernier_id.'"' or die(mysql_error());
			$identifiant = mysql_query($req_nouvel_millesime);
			$ajout_millesime=mysql_fetch_array($identifiant);
//Affichage du message
			echo "<br /><br /><center><span class=\"menu_liste\">Vous avez ajouté l'année ".$ajout_millesime['millesime']." dans la base</span></center>";
			break;		
?>
Donc résolu et merci à ceux qui se sont penchés sur mon probléme.