Page 1 sur 5

Problème d'enregistrement dans mes tables de liaison

Posté : 17 juil. 2005, 23:22
par elminio
Bonsoir,
je n'arrive pas à enregistrer d'informations dans mes tables de liaison.
Voici mon fichier.php :
$nom = $_POST['nom'];
$mois = $_POST['mois'];
$dmois = $_POST['dmois'];
$bande = $_POST['bande'];
$mode = $_POST['mode'];
$report = $_POST['report'];
$lien = $_POST['lien'];
$info = $_POST['info'];
$id_concours = mysql_insert_id();
$id_bandes = mysql_insert_id();
$id_modes = mysql_insert_id();

// Table bande
for ($i=0; $i < count ($bande); $i++)
{
$chainebande .= $separateur . $bande[$i];
$separateur = ",";
}
// Table mode
for ($i=0; $i < count ($mode); $i++)
{
$chainemode .= $separateur . $mode[$i];
$separateur = ",";
}


// Connexion à la base

mysql_connect("localhost","root","") or die ("Impossible de se connecter à MySQL");
mysql_select_db("bconcours") or die("Impossible de sélectionner la base de données");

$query_string="INSERT INTO concours (nom, mois, dmois, report, lien, info) VALUES ('$nom', '$mois', '$dmois', '$report', '$lien', '$info')";
$query=mysql_query($query_string);
$query_string="INSERT INTO bandes (bande) VALUES ('$chainebande')";
$query=mysql_query($query_string);
$query_string="INSERT INTO modes (mode) VALUES ('$chainemode')";
$query=mysql_query($query_string);

$requete = "INSERT INTO concours_bande ('".$id_concours."', '".$id_bande."')";
$exec = mysql_query($requete);
$requete = "INSERT INTO concours_mode ('".$id_concours."', '".$id_mode."')";
$exec = mysql_query($requete);

// Afficher résultat
echo "nom = $nom<br>";
echo "mois = $mois<br>";
echo "dmois = $dmois<br>";
echo "bande = $chainebande<br>";
echo "mode = $chainemode<br>";
echo "report = $report<br>";
echo "lien = $lien<br>";
echo "infos = $info<br>";

Posté : 18 juil. 2005, 08:32
par pjl
POurquoi fais tu une insertion dans les tables bandes et modes ?
Normalemnet, ces tables sont déjà remplies et n'ont pas besoin d'être mises à jour chaque fois que tu rentres un noiuveau concours.

Ensuite, ces 3 lignes :
$id_concours = mysql_insert_id();
$id_bandes = mysql_insert_id();
$id_modes = mysql_insert_id(); 
A quoi servent-elles pour toi ?

Relis la doc de la fonction mysql_insert_id.

Posté : 18 juil. 2005, 09:40
par elminio
Salut pjl,
je ne comprend pas mes deux tables deux liaisons ne contienne aucune donnée se n'est pas normal.
1 : insertion de concours
-> récupération de l'id attribué
PHP:
$idConcours = mysql_insert_id();
$idMode = mysql_insert_id();
2 : insertion dans concours_mode
PHP:
$requete = "INSERT INTO concours_mode ('".$idConcours."', '".$idMode."')";
$exec = mysql_query($requete);

Posté : 18 juil. 2005, 09:43
par ouckileou
c'est normal, tu insères $id_concours, $id_bande et $id_mode

et où récupèrent-elles une valeur ? tout au début du script, avec mysql_insert_id()

donc fait ce qu'il t'a dit regarde la doc et tu verras que ça ne marche pas

je te rappelle la procédure :

1 - insertion du concours
2 - récupération de l'id attribué au concours
3 - insertion de cet id dans les tables de liaison avec modes et bandes

Posté : 18 juil. 2005, 10:03
par elminio
$query_string="INSERT INTO concours (nom, mois, dmois, report, lien, info) VALUES ('$nom', '$mois', '$dmois', '$report', '$lien', '$info')";
$query=mysql_query($query_string); 
$id_concours = mysql_insert_id();
J'ai replacé la commande mysql_insert_id() au bonne endroit et j'ai fais celà pour bande et mode pourquoi je n'est pas d'enregistrement dans mes tables de liaison.

le problème dois venir d'ici :
$requete = "INSERT INTO concours_bande ('".$id_concours."', '".$id_bande."')";
$exec = mysql_query($requete);

Posté : 18 juil. 2005, 10:04
par ouckileou
mode débuggage :

- afficher le code des requêtes
- afficher les erreurs MySQL avec mysql_error()

Posté : 18 juil. 2005, 10:09
par elminio
je n'est pas d'erreur ...

Posté : 18 juil. 2005, 10:23
par elminio
Bon maintenant ça à l'air de fonctionner :
$requete = "INSERT INTO concours_bande (id_concours, id_bande) VALUES ('$id_concours', '$id_bande')";
$exec = mysql_query($requete);
Y a t'il un moyen pour vérifié les correspondances entre les tables pour chaque enregistrement ?

Posté : 18 juil. 2005, 11:01
par elminio
Après quelques test je m'aperçois que j'ai un problème de liaison entre mes tables concours_bande et concours_mode
Voici mon dernier fichier php appelé stock.php :
$nom = $_POST['nom'];
$mois = $_POST['mois'];
$dmois = $_POST['dmois'];
$bande = $_POST['bande'];
$mode = $_POST['mode'];
$report = $_POST['report'];
$lien = $_POST['lien'];
$info = $_POST['info'];


// Table bande
for ($i=0; $i < count ($bande); $i++)
{
$chainebande .= $separateur . $bande[$i];
$separateur = ",";
}
// Table mode
for ($i=0; $i < count ($mode); $i++)
{
$chainemode .= $separateur . $mode[$i];
$separateur = ",";
}


// Connexion à la base

mysql_connect("localhost","root","") or die ("Impossible de se connecter à MySQL");
mysql_select_db("bconcours") or die("Impossible de sélectionner la base de données");

$query_string="INSERT INTO concours (nom, mois, dmois, report, lien, info) VALUES ('$nom', '$mois', '$dmois', '$report', '$lien', '$info')";
$query=mysql_query($query_string); 
$id_concours = mysql_insert_id();
$query_string="INSERT INTO bandes (bande) VALUES ('$chainebande')";
$id_bande = mysql_insert_id();
$query=mysql_query($query_string);
$query_string="INSERT INTO modes (mode) VALUES ('$chainemode')";
$id_mode = mysql_insert_id();
$query=mysql_query($query_string);

$requete = "INSERT INTO concours_bande (id_concours, id_bande) VALUES ('$id_concours', '$id_bande')";
$exec = mysql_query($requete);
$requete = "INSERT INTO concours_mode (id_concours, id_mode) VALUES ('$id_concours', '$id_mode')";
$exec = mysql_query($requete);

// Afficher résultat
echo "nom = $nom<br>";
echo "mois = $mois<br>";
echo "dmois = $dmois<br>";
echo "bande = $chainebande<br>";
echo "mode = $chainemode<br>";
echo "report = $report<br>";
echo "lien = $lien<br>";
echo "infos = $info<br>";

le id_concours de mes tables de liaisons et bien alimenté
mais pas le pas le id_bande et le id_mode :

table de liaison concours_bande

id_concours | id_bande
1 0
2 0
3 0

Posté : 18 juil. 2005, 11:03
par elminio
bon j'ai trouvé l'erreur ...

rectificatif tjrs le même pb.

Posté : 18 juil. 2005, 11:23
par ouckileou
tu n'as pas encore compris le système :)

mysql_insert_id() ne doit te servir que pour obtenir $id_concours, puisque c'est un concours que tu viens d'insérer, donc tu ne connais aps son identifiant

par contre, tu n'insères rien dans modes, ni dans bandes

donc tu dois connaitre par avance l'identifiant de bande et de mode choisi !
ils doivent être récupérés de ton formulaire

Posté : 18 juil. 2005, 11:37
par elminio
je te rappelle la procédure :

1 - insertion du concours
2 - récupération de l'id attribué au concours
3 - insertion de cet id dans les tables de liaison avec modes et bandes
j'ai appliquer celà
par contre, tu n'insères rien dans modes, ni dans bandes
et la tu me dis qu'il ne faut rien mettre.

donc tu dois connaitre par avance l'identifiant de bande et de mode choisi ! ils doivent être récupérés de ton formulaire
:roll: :shock: :wink:

Posté : 18 juil. 2005, 11:43
par ouckileou
tu n'as pas vraiment appliqué

tes tables modes et bandes, contiennent les modes et bandes disponibles, tu n'y touches pas !
par contre, tu te serts de ces données pour les proposer à l'utilisateur dans ton interface : il va sélectionner suivant un libellé, et toi tu récupère l'identifiant correspondant

et c'est cet identifiant que insères dans concours_mode et concours_bande

je ne t'ai JAMAIS dis d'insérer quoi que ce soit dans bandes et modes, mais bien dans les relations ;)

Posté : 18 juil. 2005, 11:48
par elminio
OK donc explique moi pourquoi que les tables de liaison sont vides ?
pas de contenu :roll:
Qu'est ce qui permet d'alimenter celà ? :wink:

Posté : 18 juil. 2005, 11:53
par ouckileou
alors attends je commence à avoir du mal à suivre...

quelles tables sont vides ?
si "bandes" et "modes" sont vides, c'est de ta faute, tu dois au préalable (une fois et une seule) les remplir avec les modes et bandes disponibles (donc remplir modes avec phonie, télégraphie et l'autre dont je ne me rappelle plus, ce qui te feras 3 lignes dans la table modes) ;)

ensuite comment est-ce que ça se passe

tu affiches le contenu de la table "modes" dans ton interface : l'utilisateur choisi pour son concours le mode "phonie", tu récupères donc l'identifiant de mode 1

-> tu insère le concours
-> tu récupères l'identifiant du concours créé : disons 5

-> tu insères dans concours_mode une ligne 5|1
qui va donc relier le concours n°5 au mode n°1
tu sais donc maintenant que le concours numéro 5 est de mode "phonie"

tu as compris ? pitié dis moi que oui [-o< :lol:

il faut juste que tu comprennes que tes tables "bandes" et "modes" sont juste là pour stocker des "possibilités", que tu n'y touches plus par la suite