Problème d'enregistrement dans mes tables de liaison

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème d'enregistrement dans mes tables de liaison

par ouckileou » 21 juil. 2005, 00:52

ok, ce script est plus simple tu devrais t'en sortir les doigts dans le nez maintenant

alors ce post en [Résolu] et retour sur l'autre sujet ;)

par elminio » 21 juil. 2005, 00:51

A ce niveau là tout fonctionne.
Il me reste à comprendre ce script de l'autre sujet pour afficher les infos :

Code : Tout sélectionner

$concours_courant = null; // boucle sur les résultats de requêtes while () { // SI concours de la ligne de résultat différent de $concours_courant ALORS // affichage des infos du concours $concours_courant = concours de la ligne de résultat //FinSI // Affichage des modes }
Ensuite reprendre la requete finale pour faire le moteur de recherche.

Je close ce sujet.

par ouckileou » 21 juil. 2005, 00:43

je voulais savoir si tu suivais encore :lol: =D>
:lol: oui je suis et je dois bien être l'un des seuls alors ne me teste pas trop :lol:

donc si je suis bien on doit en voir le bout là non ?
j'ai plus qu'analysé tout celà pour comprendre le système
dommage... je pensais que c'était le cas maintenant :roll:

par elminio » 21 juil. 2005, 00:42

je voulais savoir si tu suivais encore :lol: =D>
j'ai plus qu'analysé tout celà pour comprendre le système

par ouckileou » 21 juil. 2005, 00:40

Ouf ! j'ai vraiment eu peur d'entrer dans la 4ième dimension... :pouce:

par elminio » 21 juil. 2005, 00:39

Ok j'ai refais un test est sa fonctionne là
pourtant j'ai refais la même manip fausse alerte :wink: .
:lol: merci ouckileou

par ouckileou » 21 juil. 2005, 00:33

tu ne fais pas de DELETE quelque part ? avec ce code je ne vois pas comme tu pourrais perdre des lignes...
tu es sûr que c'est ce qui se passe ?

par ouckileou » 21 juil. 2005, 00:27

édite ton dernier message et montre nous le code que tu exécutes maintenant

car là, j'ai du mal à imaginer comment avec des INSERT, tu peux effacer la ligne précédente :shock:

par elminio » 21 juil. 2005, 00:24

En fait quand je remplis mon formulaire une 1er fois sa stocke bien mes infos
dans mes tables relationnels par contre si j'entre un nouvelle enregistrement dans mon formulaire mes tables relationnels efface l'ancien contenu et le change par le dernier enregistrement.
$nom = $_POST['nom'];
$mois = $_POST['mois'];
$dmois = $_POST['dmois'];
$report = $_POST['report'];
$lien = $_POST['lien'];
$info = $_POST['info'];

// vérifions que la variable a été transmise --> tu pourrais faire ce test pour les autres variables aussi
$tabBande = (isset($_POST['bande']))?$_POST['bande']:null;
$tabMode = (isset($_POST['mode']))?$_POST['mode']:null;

// connexion
mysql_connect("localhost","root","") or die ("Impossible de se connecter à MySQL");
// sélection de la base
mysql_select_db("cconcours") or die("Impossible de sélectionner la base de données");
// requête d'enregistrement du concours : sépare les variables du reste de la chaine
$query_string="INSERT INTO concours (nom, mois, dmois, report, lien, info) VALUES ('".$nom."', '".$mois."', '".$dmois."', '".$report."', '".$lien."', '".$info."')";
// enregistrement du concours
$query=mysql_query($query_string);
// récupération de l'identifiant attribué à ce nouveau concours
$id_concours = mysql_insert_id();
// on boucle sur le tableau de bande pour récupérer chaque identifiant de bande choisi et insérer une ligne dans concours_bande pour chacun
if (!empty($tabBande)) {
    foreach($tabBande as $cle => $idBande) {
      // création de la requête de liaison  
      $query_string="INSERT INTO concours_bande (id_concours, id_bande) VALUES ('".$id_concours."', '".$idBande."')";
      // insertion de la ligne dans la table concours_bande
      $query=mysql_query($query_string) or die(mysql_error());
    }
}
// on boucle sur le tableau de mode pour récupérer chaque identifiant de mode choisi et insérer une ligne dans concours_mode pour chacun
if (!empty($tabMode)) {
    foreach($tabMode as $cle => $idMode) {
      // création de la requête de liaison  
      $query_string="INSERT INTO concours_mode (id_concours, id_mode) VALUES ('".$id_concours."', '".$idMode."')";
      // insertion de la ligne dans la table concours_mode
      $query=mysql_query($query_string) or die(mysql_error());
    }
}
je vais refere un essais

par ouckileou » 21 juil. 2005, 00:20

Quand j'insere un second enregistrement je perd mon premier enregistrement au niveau de mes deux tables concours_bande et concours_mode.
pardon ? :shock:

par elminio » 21 juil. 2005, 00:19

Quand j'insere un second enregistrement je perd mon premier enregistrement au niveau de mes deux tables concours_bande et concours_mode.
Et je n'est pas de clef unique.

par ouckileou » 21 juil. 2005, 00:10

Cette erreur signifie que dans une de tes requetes d'insertion, tu donnes un identifiant qui existe dèja pour un des enregistrements de la table.
exact, c'est donc au niveau de la structure des relations qu'il faut changer qqchose, car les champs contiennent des clés étrangères ici, tu dois donc pouvoir stocker plusieurs fois la même valeurs
Si tes clés primaires sont en auto increment, ne donne pas d'identifiant lors des insertions. Ca sera fait automatiquement.
ce n'est pas le cas ici

elminio : essaye de différencier aussi les erreurs MySQL des erreurs PHP, tu sauras déjà plus facilement cibler le problème

mais là tu y est presque, c'est le code parfait à 1 ou 2 détails près ;)

par elminio » 21 juil. 2005, 00:06

A oui merde, merci.

par ouckileou » 21 juil. 2005, 00:05

tu fais deux fois la même requête sur "concours_mode"

et les champs des relations ne doivent pas être UNIQUE !

par rami » 21 juil. 2005, 00:05

Cette erreur signifie que dans une de tes requetes d'insertion, tu donnes un identifiant qui existe dèja pour un des enregistrements de la table. Si tes clés primaires sont en auto increment, ne donne pas d'identifiant lors des insertions. Ca sera fait automatiquement.