Page 1 sur 1

Petit probléme avec mysql_insert_id()...

Posté : 22 août 2006, 11:59
par Kimble
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

Posté : 22 août 2006, 12:27
par Henri
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);

Posté : 22 août 2006, 13:07
par Kimble
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.

Posté : 22 août 2006, 13:23
par aelurus
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...

Posté : 22 août 2006, 14:09
par Kimble
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:

Posté : 22 août 2006, 14:31
par Rei Itchido
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.

Posté : 22 août 2006, 14:44
par Kimble
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...

Posté : 22 août 2006, 14:49
par aelurus
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.

Posté : 24 août 2006, 15:58
par Kimble
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

Posté : 28 août 2006, 18:44
par Kimble
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.