Menu

Ajout d'une clé etrangère

Messages postés
24
Date d'inscription
lundi 21 mai 2018
Dernière intervention
6 novembre 2018
- 4 nov. 2018 à 18:18 - Dernière réponse :
Messages postés
24
Date d'inscription
lundi 21 mai 2018
Dernière intervention
6 novembre 2018
- 6 nov. 2018 à 14:11
Bonjour

Dans mon formulaire, j'ai un champ avec un label qui est la clé etrangère

Comment ajouter celle ci dans la table

Merci
Afficher la suite 

Votre réponse

6 réponses

Messages postés
23254
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 novembre 2018
- 4 nov. 2018 à 19:04
0
Merci
Bonjour,

Je ne suis pas sûr de comprendre ce que tu veux faire....
Normalement... on ne modifie pas les tables par "code". On défini la structure de nos tables une bonne fois pour toutes ... et on n'évite d'y retoucher via les interfaces qu'on code.

Ensuite, tu nous parles de clés étrangères.. mais tu ne nous indiques pas dans quel SGBD..

On peut donc supposer que tu es en mysql... et donc que tu cherches comment, via des requêtes SQL modifier une table existante pour lui ajouter une foreign key.
Si c'est bien ça que tu veux faire (malgré ma remarque du début...) tu peux t'inspirer de ceci
ALTER TABLE users ADD grade_id SMALLINT UNSIGNED NOT NULL DEFAULT 0;
ALTER TABLE users ADD CONSTRAINT fk_grade_id FOREIGN KEY (grade_id) REFERENCES grades(id);

Messages postés
24
Date d'inscription
lundi 21 mai 2018
Dernière intervention
6 novembre 2018
- 6 nov. 2018 à 08:24
Ooooh je m'excuse parce que j'ai pas bien demandé la question

C'est pas la question d'ajout de la clé etrangère dans la table,c'est plutot l'insertion des données(d'une clé etrangère) dans la table via l'interface qu'on code

Je suis en Mysql

Le langage utilisé est le PHP

Merci
Messages postés
23254
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 novembre 2018
- 6 nov. 2018 à 08:39

Insérer des données (d'une clé étrangère)

Ben... comme insérer des données de n'importe quoi d'autre.
Via une requête INSERT...


Je suis en Mysql
Le langage utilisé est le PHP

Et tu te connectes à la bdd en PDO ou mysqli ?

Qu'as tu commencé à faire ?
Sur quoi bloques tu exactement ?

Et puis....Il serait bien de montrer ton code ainsi que de nous indiquer la structure de tes tables....

NB: Pour poster du code sur le forum, merci de le faire en utilisant LES BALISES DE CODE (et en y précisant le langage)
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Commenter la réponse de jordane45
Messages postés
24
Date d'inscription
lundi 21 mai 2018
Dernière intervention
6 novembre 2018
- 6 nov. 2018 à 09:26
0
Merci
Je me connecte à la bdd en PDO

J'ai deux tables wp_professeur et wp_cours

Dans wp_cours,j'ai une clé etrangère idProf(clé primaire dans la table wp_professeur)

Mon code est celui ci:
Dans le fichier Cours.php

<!DOCTYPE html>
<html>
<head>
<title>
</title>
</head>
<body>

    <h3> COURS </h3>

<form method='post' action=''>
	Intitule: <input type='text' name='intitule'><br><br>
	vh: <input type='text' name='vh'><br><br>
  idProf: <input type='text' name='idProf'><br><br>
	 <input type='submit' value='Ajouter' name='Ajouter'>
		   </form>
	 <?php
		
		   include('Connexion.php');
    
     if(isset($_POST['Ajouter']))
{
  $intitule=$_POST['intitule'];
  $vh=$_POST['vh'];
  $idProf=$_POST['idProf'];
  
		  
		   $inserer="INSERT INTO wp_cours(intitule,vh,idProf) VALUES('$intitule','$vh','$idProf')";
		   $inserer=$DB->exec($inserer);
		      if($inserer) echo "<br/>Insertion effectuée ";
		     else {
			  $table_erreurs=$DB->errorInfo();
			 echo"<br/>Erreur : $table_erreurs[2]";
			 }
			};
		   
		?>
		
		
</body>
</html>




Dans le fichier Professeur.php
<!DOCTYPE html>
<html>
  <head>
    <title>
    </title>
</head>
  <body>

   <h3> PROFESSEURS </h3>
<form method='post' action=''>
	Nom: <input type='text' name='Nom'><br><br>
	Prenom: <input type='text' name='Prenom'><br><br>
	Grade: <input type='text' name='Grade'><br><br>
	<input type='submit' value='Ajouter' name='Ajouter'> 

</form>
      
	  <?php
		
		   include('Connexion.php');
		   
		   //Insertion des données dans la BD
		   if(isset($_POST['Ajouter']))
{
  $nom=$_POST['Nom'];
  $prenom=$_POST['Prenom'];
  $grade=$_POST['Grade'];
		   //le stockage dans la BD
		   $inserer="INSERT INTO wp_professeur(Nom,Prenom,Grade) VALUES ('$nom','$prenom','$grade')";
		   $inserer=$DB->exec($inserer);
		      if($inserer) echo "<br/>Insertion effectuée ";
		     else {
			  $table_erreurs=$DB->errorInfo();
			 echo"<br/>Erreur : $table_erreurs[2]";
			 }
			};
			 ?>
</body>
</html>



Voici la Structure de mes Tables :

Structure de la table `wp_cours`

CREATE TABLE IF NOT EXISTS `wp_cours` (
  `idCours` int(50) NOT NULL AUTO_INCREMENT,
  `intitule` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `vh` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `idProf` int(255) NOT NULL,
  PRIMARY KEY (`idCours`),
  KEY `idProf` (`idProf`),
  KEY `idProf_2` (`idProf`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;



Structure de la table `wp_professeur`

CREATE TABLE IF NOT EXISTS `wp_professeur` (
  `idProf` int(255) NOT NULL AUTO_INCREMENT,
  `NOM` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `Prenom` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `Grade` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
  PRIMARY KEY (`idProf`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;




NB:Pour l'insertion des données dans wp_professeur Ca marche

Je suis bloqué dans l'insertion dans wp_cours

Voici l'erreur affiché

Erreur : Cannot add or update a child row: a foreign key constraint fails (`wordpress`.`wp_cours`, CONSTRAINT `fkcp` FOREIGN KEY (`idProf`) REFERENCES `wp_professeur` (`idProf`) ON DELETE CASCADE ON UPDATE CASCADE)
Messages postés
23254
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 novembre 2018
- 6 nov. 2018 à 11:38
Question bête... est ce que la valeur de l"idProf que tu essaies d'insérer existe dans la table wp_professeur ?

Et vu que tu fais du PDO, il serait bien également de gérer correctement les erreurs.
Regarde ce que donne ceci :
http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Et vu que tu débutes dans la programmation php, prends tout de suite de bonnes habitudes : http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Messages postés
24
Date d'inscription
lundi 21 mai 2018
Dernière intervention
6 novembre 2018
- 6 nov. 2018 à 14:11
oui la valeur de l'idProf que j'essaie d'insérer existe dans wp_professeur
Commenter la réponse de didierdizo