Enregistrement table liée

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 : Enregistrement table liée

Re: Enregistrement table liée

par TRUNCKS » 16 oct. 2011, 08:19

Merci encore !

Re: Enregistrement table liée

par Ryle » 15 oct. 2011, 12:14

C'est bien cela... le select html permet d'afficher un libellé et gérer une valeur qui sera transparente pour l'utilisateur. Le meilleur exemple étant la gestion d'un id (invisible pour l'utilisateur mais utile pour toi) et d'un libellé (visible par l'utilisateur et dont tu n'as pas besoin pour ton traitement)

Re: Enregistrement table liée

par TRUNCKS » 13 oct. 2011, 19:48

Oui, mes variables sont un gros bordel :(

C'est un autre forumeur qui m'a donné cette astuce, mais ne m'a pas répondu sur sa fonction exacte :)
En gros, cela veut dire que l'on récupère l'ID mais que l'on se sert du nom pour l'affichage ?

Merci encore infiniment à tous :)

Re: Enregistrement table liée

par Ryle » 13 oct. 2011, 18:31

C'est cela... Ton premier problème provient du nom de tes variables qui ne reflètent pas leur contenu... le select s'appelle "nom_categorie", cependant ce n'est pas le nom qui est envoyé à php mais l'id qui se trouve dans l'attribut value ($result['ID_categorie']).

De la même manière, si rayon et catégorie désignent la même chose, un seul nom dans ton code sera plus clair et plus facile à maintenir :)

Re: Enregistrement table liée

par TRUNCKS » 13 oct. 2011, 17:32

Désolé pour le double post, je viens de trouver j'ai fait un erreur stupide:

$separateur = ';';
$lesNoms = explode($separateur, mysql_real_escape_string($_POST['nom_produit']));
foreach ($lesNoms as $nom_categorie)

C'était nom_produit à la fin, pour mon séparateur, je suis naze....

Par contre, j'ai un petite question pour moi, dans cette ligne:

$sq="insert into produits values('',\"$nom_produit\",\"$nom_categorie\")";

C'est cette ligne qui fait que dans la base, cela inscrit l'ID au lieu du nom ?

echo '<option value="'.$result['ID_categorie'].'">'.$result['nom_categorie'].'</option>';

Re: Enregistrement table liée

par TRUNCKS » 13 oct. 2011, 17:14

J'ai un peu regardé, mais je ne vois pas comment je peux donner la structure de ma table, je l'ai fait directement sur l'interface de phpmyadmin :(

Re: Enregistrement table liée

par TRUNCKS » 13 oct. 2011, 14:34

C'est un chiffre pour la clé primaire, mais là j'ai l'impression que je demande un nom non ?

Re: Enregistrement table liée

par moogli » 13 oct. 2011, 14:28

tu peux nous monter les create tables (ou desc) des deux tables) une jeux de donnée minimal, parce que la je ne comprend pas trop le truc.

La clef primaire c'est un chiffre ou un chaine de caractère ?

@+

Re: Enregistrement table liée

par TRUNCKS » 13 oct. 2011, 14:16

Voilà ce que j'obtient:

insert into produits values('',"coucou","coucou")erreur sq: Cannot add or update a child row: a foreign key constraint fails (`table1`.`produits`, CONSTRAINT `produits_ibfk_1` FOREIGN KEY (`id_categorie`) REFERENCES `categories` (`ID_categorie`) ON DELETE NO ACTION ON UPDATE CASCADE)

Il me met deux fois coucou alors que je l'ai rentré une seule fois, dans le champ formulaire.
Il devrait y avoir librairie dans le troisième. (l'ID tout du moins )

Re: Enregistrement table liée

par moogli » 13 oct. 2011, 13:57

bon alors bon heu comment dire,
la clef primaire de la table catégorie c'est un entier ?
si tu analyse ta requête fournis une chaine de caractère, moi j'y vois une erreur de conception !

ensuite as tu fait un echo $sq; avant le mysql_query histoire de voir a quoi ressemble la requete et pourquoi pas la tester via phpmyadmin (ou la console mysql ou tout autre chose qui te permetterais de la tester ;) )


@+

Re: Enregistrement table liée

par TRUNCKS » 13 oct. 2011, 13:45

Voilà ma requête:

$sq="insert into produits values('',\"$nom_produit\",\"$nom_rayon\")";
$quer=mysql_query($sq ) or die('erreur sq: '.mysql_error());

En fait, avant de valider le post, je selectionne la catégorie où va aller s'inscrire mon produit.
Théoriquement, si je sélectionne "papeterie" dans ma liste déroulante, et que j'écris "livre" dans le formulaire, cela devait inscrire dans ma table:

ID_produit:"1" ( auto-increm )
nom-produit:"livre"
id_rayon ( c'est ma clé étrangère, reliée à l'ID_rayon de ma table rayon ): "1" ( qui correspond à l'ID papeterie de ma table rayon )

Oula, c'est dur à décrire lol

Re: Enregistrement table liée

par moogli » 13 oct. 2011, 13:30

qu'elle est la la requête SQL ? (affiche la completement avec le message d'erreur ça peux aider).

ta requete c'est un alter table ou un insert c'est pas clair la ?

a priori tu viole la contrainte sur la clef étrangère mais je ne peux en dire plus avec si peu ;)


@+

Re: Enregistrement table liée

par TRUNCKS » 13 oct. 2011, 09:32

Oui c'est bien la même chose, j'ai juste changé le nom entre temps.

Re: Enregistrement table liée

par xTG » 13 oct. 2011, 09:30

L'id_categorie est-il l'id du rayon ou bien un autre champ ?

Re: Enregistrement table liée

par TRUNCKS » 13 oct. 2011, 08:57

Voici le message d'erreur que j'obtiens :)

erreur sq: Cannot add or update a child row: a foreign key constraint fails (`table1`.`produits`, CONSTRAINT `produits_ibfk_1` FOREIGN KEY (`id_categorie`) REFERENCES `categories` (`ID_categorie`) ON DELETE NO ACTION ON UPDATE CASCADE)