Problème d'enregistrement dans mes tables de liaison

ViPHP
pjl
ViPHP | 2119 Messages

19 juil. 2005, 09:53

est-ce que tu nommes correctement tes colonnes dans la requête ?
Oui
Concours_modes (relation)
--------------------
id_concours ---> clé étrangère vers concours.id_concours
id_mode -------> clé étrangère vers modes.id_mode
$query_string="INSERT INTO concours_mode (id_concours, mode) VALUES ('$id_concours', '$mode')";
$query=mysql_query($query_string);
Pas de commentaire. :roll:

ViPHP
pjl
ViPHP | 2119 Messages

19 juil. 2005, 09:55

de pjl :
Ben, j'ai posé une question dans le fil cité au dessus et je n'ai pas de réponse. A quoi servent-elles pour toi ?
Réponse de ouckileou :
mysql_insert_id() ne doit te servir que pour obtenir $id_concours
Je parlais du fil, pas du post.
Donc de ce fil là : http://www.phpfrance.com/forums/voir_su ... texte-.php

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 juil. 2005, 10:15

et donc suivant le schéma que tu as donné à pjl, la réponse à la question "nommes-tu correctement tes noms de colonnes" (sous-entendu : dans les requête d'insertion) est NON

et ces deux requêtes sont fausses et doivent te renvoyer une erreur :
$query_string="INSERT INTO concours_bande (id_concours, bande) VALUES ('$id_concours', '$bande')";

$query_string="INSERT INTO concours_mode (id_concours, mode) VALUES ('$id_concours', '$mode')";
courage, on y est presque ;)
Modifié en dernier par ouckileou le 19 juil. 2005, 10:16, modifié 1 fois.

Eléphant du PHP | 174 Messages

19 juil. 2005, 10:15

Pour pjl la structure de la base actuelle:
http://www.phpfrance.com/forums/voir_re ... .php#41950

Eléphant du PHP | 174 Messages

19 juil. 2005, 20:42

bon j'ai corrigé mes requêtes en fonction de vos indications par contre quand je séléctionne 2 mode dans mon formulaire un seul est enregistré.
$query_string="INSERT INTO concours_mode (id_concours, id_mode) VALUES ('$id_concours', '$mode')";
$query=mysql_query($query_string) or die(mysql_error());
$mode contient les informations suivante 1,2
1 = 160m
2 = 80m

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 juil. 2005, 21:16

je le répète : pour chaque concours, 1 ligne dans concours_mode pour chaque mode

si ton concours n°X a deux modes
1 = 160m
2 = 80m

tu auras deux lignes dans concours_mode
X | 1
X | 2
donc 2 requêtes INSERT

et regarde dans la FAQ j'ai posté un petit exemple pour traiter la saisie de cases à cocher ça devrait t'aider pour le principe

Eléphant du PHP | 174 Messages

19 juil. 2005, 21:25

si ton concours n°X a deux modes
1 = 160m
2 = 80m

tu auras deux lignes dans concours_mode
X | 1
X | 2
donc 2 requêtes INSERT
De mon cote j'ai celà dans concours_mode
id_concours | id_mode
1 | 0
2 | 0

Moi j'ai utilisé ceci au départ pour regroupé mes choix mode :
// Table mode
for ($i=0; $i < count ($mode); $i++)
{
$chainemode .= $separateur . $mode[$i];
$separateur = ",";
}

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 juil. 2005, 22:45

justement, si tu as compris le principe et mon exemple : pourquoi regrouper ?

une ligne de liaison par mode, donc une donnée à la fois

as-tu regardé l'exemple de la FAQ ? si oui montre nous ton formulaire et la partie qui récupère les cases à cocher modes (on commence par mode, bande sera sur le même principe)

Eléphant du PHP | 174 Messages

19 juil. 2005, 23:51

oui je l'ai testé pas mal je vais l'essayé de l'appliqué à mon système.
:ordi: j'espère trouver [-o< mais dodo maintenant :sleeping: sinon le cerveau va fumer :afraid:

Eléphant du PHP | 174 Messages

20 juil. 2005, 11:35

<input type="checkbox" name="mode[]" value="1" >
<span class="Style10">Phonie</span><br/>
<input type="checkbox" name="mode[]" value="2" >
<span class="Style10">Télégraphie</span><br/>
<input type="checkbox" name="mode[]" value="3" >
<span class="Style10">Mode digitaux</span><br/>

Code : Tout sélectionner

// vérifions que la variable a été transmise $tabmode = (isset($_POST['mode']))?$_POST['mode']:null; echo "Voici les modes que vous avez choisi :<br>"; // bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées if (!empty($tabmode)) { foreach($tabmode as $cle => $mode) { echo $cle.' : '.$mode.'<br>'; } }
par contre après ceci je ne suis plus du tout

$cle correspondra à quoi ?
Modifié en dernier par elminio le 20 juil. 2005, 11:38, modifié 1 fois.

Mammouth du PHP | 19672 Messages

20 juil. 2005, 11:38

si $tabmode est un tableau indexé, $cle est l'index et $mode la valeur correspondant à cet index.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

20 juil. 2005, 11:39

à la transmission du formulaire, chaque case cochée va créer une cellule du tableau

si je coche les 3 : tu récupèreras ce tableau, indexé numériquement et automatiquement

mode[0] = "1"
mode[1] = "2"
mode[2] = "3"

avec cette boucle
oreach($tabmode as $cle => $mode) { 

}
$cle est l'indice (0,1,2)
$mode la valeur contenue (1,2,3)

ici tu n'as pas besoin de la $cle, c'était juste pour l'exemple, pour montrer que le tableau est indexé tout seul

Eléphant du PHP | 174 Messages

20 juil. 2005, 12:13

Code : Tout sélectionner

// Table mode for ($i=0; $i < count ($mode); $i++) { $chainemode .= $separateur . $mode[$i]; $separateur = ","; }
moi j'avais celui là au début :lol:,si tu regarde mes anciens sujet et post.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

20 juil. 2005, 12:16

heu oui et alors ?

c'est effectivement une autre solution pour parcouri un tableau on est d'accord

seulement dans ton cas tu concaténais (collais) les identifiants de modes
or maintenant tu dois créer et exécuter une requête INSERT pour chacun

donc tu peux jeter ta boucle :lol:

Eléphant du PHP | 174 Messages

20 juil. 2005, 22:32

$nom = $_POST['nom'];
$mois = $_POST['mois'];
$dmois = $_POST['dmois'];
$bande = $_POST['bande'];
$mode = $_POST['mode'];
$report = $_POST['report'];
$lien = $_POST['lien'];
$info = $_POST['info'];


// vérifions que la variable a été transmise
$tabmode = (isset($_POST['mode']))?$_POST['mode']:null;

echo "Voici les modes que vous avez choisi :<br>";
// bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées
if (!empty($tabmode)) {
    foreach($tabmode as $cle => $mode) {
        echo $cle.' : '.$mode.'<br>';
    }
}

mysql_connect("localhost","root","") or die ("Impossible de se connecter à MySQL");
mysql_select_db("cconcours") 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 concours_mode (id_concours, id_mode) VALUES ('$id_concours', '$mode')";
$query=mysql_query($query_string) or die(mysql_error());
Bon j'ai toujours un problème de concordance entre $mode de ma boucle
et $mode de INSERT INTO car il y a $mode = $_POST['mode']

echo $cle.' : '.$mode.'<br>'

je pense qu'il faut que $cle.' : '.$mode. ou : '.$mode. soit égale = à une variable pour la transmettre à INSER INTO