Page 1 sur 1

Récupérer une valeur auto incrémenter

Posté : 24 sept. 2008, 10:53
par ce_l
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

Posté : 24 sept. 2008, 10:59
par guilt92
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....

Posté : 24 sept. 2008, 11:41
par ce_l
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

Posté : 24 sept. 2008, 12:03
par guilt92
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() ;)

Posté : 24 sept. 2008, 12:22
par sadeq
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

Posté : 24 sept. 2008, 13:16
par ce_l
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