Récupérer une valeur auto incrémenter

Eléphanteau du PHP | 31 Messages

24 sept. 2008, 10:53

Hello,

Me voici face à une nouvelle problématique. Imaginons deux tables : Film et Acteurs. Dans la table film j'ai une clé étrangère correspondant à la clé primaire de la table Acteurs. Cette clé primaire est auto incrémenter dans MySQL.
Du coup, comment, dans mon formulaire php qui envoit les variables à la base, je peux récupérer ma varable.

Voici mon code php :
$sql = "INSERT INTO acteurs (nom_acteurs, pays_acteurs) 
VALUES ('$nom','$pays')" ;  
$requete = mysql_query($sql, $connect) or die( mysql_error() ) ;

$sql = "INSERT INTO film (nom_film, images, id_acteurs) 
VALUES ('$nom1','C:/Program files/EasyPHP 2.0b1/www/films/$name_file1','?????')"; 

$requete = mysql_query($sql, $connect) or die( mysql_error() ) ; 
Merci
ce_l

Mammouth du PHP | 1353 Messages

24 sept. 2008, 10:59

Bonjour,

Tu as pour ca la fonction mysql_insert_id()

Mais ceci dit je comprend pas trop ton organisation : si tu as 3 acteurs qui jouent dans un film, tu vas créer 3 entrées dans la table film ??

A mon sens il faudrait plutot une organisation de type :

Une table acteur avec les noms prénoms... et un id
Une table film avec titre description... et un id
Une table roles avec un id, id_film et id_acteur

Ainsi si un acteur 5 joue dans le film 34 tu ajoutes simplement une entrée dans la table role qui fera la connection entre l acteur et le film...
Ca sera beaucoup plus facile apres pour rechercher dans quel(s) films joue un acteur ou tous les films dans lequel tel acteur joue....
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphanteau du PHP | 31 Messages

24 sept. 2008, 11:41

Merci de ta réponses. En fait le nom des tables est un exemple est en plus se serait plutôt l'inverse (films acteurs dsl).

Par contre en utilisant mysql_insert_id(), MySQL me retourne la valeur 0.
$sql = "INSERT INTO films (id_film, nom_film, pays_film) 
VALUES ('','$nom','$pays_film')" ;  

$id_film = mysql_insert_id(); 

$requete = mysql_query($sql, $connect) or die( mysql_error() ) ;

$sql = "INSERT INTO acteurs (nom_ac, images, id_film) 
VALUES ('$nom_model1','C:/Program files/EasyPHP 2.0b1/www/test /$name_file1','$id_film')"; 
$requete = mysql_query($sql, $connect) or die( mysql_error() ) ; 
Merci

ce_l

Mammouth du PHP | 1353 Messages

24 sept. 2008, 12:03

Le probleme reste le meme ;)
Si un acteur joue dans plusieurs films ca sera une ligne par film dans la table acteur ?


Sinon pour ton probleme c'est normal, il faut utiliser mysql_insert_id() après le mysql_query() ;)
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

24 sept. 2008, 12:22

Voici pour le problème de conception:
  • 1 acteur peut jouer dans N films
    1 film est interprété par N acteurs
Donc : il y a une association binaire qui se multiplie N fois entre les entités film et acteur. Elle enregistrera les liens entre les acteurs et leurs films.

Supposons que cette association est nommée : filmActeur, elle est définie par : l'id du film et l'id de l'acteur comme deux clés étrangères. Il faut ajouter que ce couple (idFilm, idActeur) constitue assurément un index unique dans la table filmActeur. Ce qui évite d'associer plusieurs fois un acteur au même film.

Cette association fixe une contrainte fonctionnelle qui impose l'ordre de mise à jour suivant:
  • 1. un Film (idFilm) et un Acteur (idActeur) doivent exister au préalable.
    2. un couple (idFilm, idActeur) est sélectionné de l'existant
    3. le couple (idFilm, idActeur) est ajouté ou supprimé dans la table filmActeur
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 31 Messages

24 sept. 2008, 13:16

Hello,

Ok mon problème est résolu je poste donc la réponse pour ceux que ca pourrait intéréssé :
$sql = "INSERT INTO films (id_film, nom_film, pays_film) 
VALUES ('','$nom','$pays_film')" ;  

$requete = mysql_query($sql, $connect) or die( mysql_error() ) ;
$id_film = mysql_insert_id(); 

$sql = "INSERT INTO acteurs (nom_ac, images, id_film) 
VALUES ('$nom_model1','C:/Program files/EasyPHP 2.0b1/www/test /$name_file1','$id_film')"; 
$requete = mysql_query($sql, $connect) or die( mysql_error() ) ;
Merci guilt92

Pour ce qui il de la conception de la base en fait dans mon cas :

1 acteur peut jouer dans 1 seul et unique film
1 film est interprété par N acteurs

Donc a priori ma conception de base devrait être correct non?

Encore merci à tous les deux
ce_l