Forum Clubic

Récupérer la valeur du dernier identifiant

Bonjour à tous ceux qui voudront bien lire ce message,

J’ai lu la plupart des sujets concernant ce type de problème, mais sans jamais trouver une solution qui me convienne.

J’ai une table “panne” dans ma BdD dans laquelle il y a entre autre l’identifiant de la panne, le nom de la personne etc …
Sur ma page internet, j’ai crée un formulaire dans lequel je récupère le constat de la panne qu’un utilisateur à rencontré …

Mon soucis est le suivant : pour pouvoir insérer cette panne dans la table “panne”, il me faut le numéro de la dernière panne, et donc ajouter 1 à ce dernier numéro pour pouvoir l’insérer dans la table et ainsi avoir des numéro d’enregistrements dans l’ordre dans ma table. (j’espère être assez clair :slight_smile: )

Voici ce que j’ai donc crée pour pouvoir récupérer mon “IdPanne”:

$requeteNumeroPanne=“SELECT MAX(IdPanne) FROM panne”;
$rsNP=mysql_query($requeteNumeroPanne);
$rowNP=mysql_fetch_array($rsNP);
echo($rowNP);

Quand je fais :

echo($rsNP);

J’obtiens :

ressources id # 11

et quand je fais :

echo($rowNP);

j’obtiens :

array

PS: Il y a 10 enregistrements dans ma table panne et quand je test ma requête sous mysql, elle fonctionne au poil.

Je suis bien ennuyé là. Vous avez une petite idée par hasard ?

N’utilise pas select MAX(…) mais mysql_insert_id fr3.php.net… qui est fait pour.

J’ai oublié de préciser que je suis ultra débutant. Et qu’après avoir lu l’explication ( qu’il me semble avoir déjà lu en cherchant avant de poster), cela ne me semble pas bien plus clair.

-Dois-je passer quelque chose en paramètre dans les parenthèses =>mysql_insert_id()?
-J’ai cru comprendre que cette instruction se plaçait juste après une requête d’insertion, mais si j’ai crée manuellement ma table (sans faire de requête d’insertion) , je n’ai pas crée de requête d’insertion dans le code juste avant donc comment récupérer l’id en question?

Je semble peut-être être long à la détente, mais comme je l’ai dit, je débute :confused:

Tu as fais un insert avant? Si oui, utilise cette fonction.

Sinon essaye ça dans ce cas :

$requeteNumeroPanne="SELECT MAX(IdPanne) FROM panne";
$rsNP=mysql_query($requeteNumeroPanne);
$rowNP=mysql_fetch_array($rsNP, MYSQL_NUM);
echo($rowNP[0]);

Au passage, et pour ton information ou pour te former, comme tu veux, normalement on est passé à l’extension mysqli censée être plus performante.

Petit conseil vu qu’apparemment tu débutes : quand tu test le contenu d’une variable, utilises plutôt :

var_dump($var_a_test);

Ainsi, dans le cas de tableaux par exemple (array) ça renverra une structure “visuelle” du tableau que contient la variable. Je rappelle au passage qu’un tableau c’est une association de clés et de valeurs, une seule variable peut contenir un tableau et l’on accède à ses divers éléments de la manière suivante :

$Table=array('clé1' => "valeur1", 'clé2' => "valeur2"); // Création du tableau
echo $Table['clé1']; // Affiche valeur1

Ainsi dans ton cas, tu récupères un tableau de la fonction mysql_fetch_array() que tu stockes dans ta variable $rowNP. Pour voir sa structure, quand tu ne la connait pas, utilise :

var_dump($rowNP);

Tu verras ainsi que la clé de ce que tu cherches à sélectionner dans ta requête (à savoir le MAX) est 0. Tu accèderas donc à ta valeur de la manière indiquée précédemment par Sans-Nom, à savoir $rowNP[0].
Pour ta gouverne, ça vient du fait que la fonction mysql_fetch_array indexe ses tableaux par des clés entières en partant de 0 et en incrémentant de +1 à chaque nouvelle association clé => valeur.

Voilà, j’ai essayé de démystifier un peu la chose, c’est surement pas très clair, mais si tu as des questions je reste disponible!

Sinon, pour une question d’optimisation, je ne sais pas s’il est plus rapide d’utiliser la fonction MAX ou plutôt ORDER BY avec un LIMIT 1 sur une clé primaire… Question posée aux connaisseurs.