Problème d'enregistrement dans mes tables de liaison

Eléphant du PHP | 174 Messages

17 juil. 2005, 23:22

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>";

ViPHP
pjl
ViPHP | 2119 Messages

18 juil. 2005, 08:32

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.

Eléphant du PHP | 174 Messages

18 juil. 2005, 09:40

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);
Modifié en dernier par elminio le 18 juil. 2005, 09:44, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 juil. 2005, 09:43

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

Eléphant du PHP | 174 Messages

18 juil. 2005, 10:03

$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);

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 juil. 2005, 10:04

mode débuggage :

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

Eléphant du PHP | 174 Messages

18 juil. 2005, 10:09

je n'est pas d'erreur ...

Eléphant du PHP | 174 Messages

18 juil. 2005, 10:23

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 ?

Eléphant du PHP | 174 Messages

18 juil. 2005, 11:01

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
Modifié en dernier par elminio le 18 juil. 2005, 11:09, modifié 1 fois.

Eléphant du PHP | 174 Messages

18 juil. 2005, 11:03

bon j'ai trouvé l'erreur ...

rectificatif tjrs le même pb.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 juil. 2005, 11:23

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

Eléphant du PHP | 174 Messages

18 juil. 2005, 11:37

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:
Modifié en dernier par elminio le 18 juil. 2005, 11:44, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 juil. 2005, 11:43

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 ;)

Eléphant du PHP | 174 Messages

18 juil. 2005, 11:48

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:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 juil. 2005, 11:53

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
Modifié en dernier par ouckileou le 18 juil. 2005, 11:53, modifié 1 fois.