Page 1 sur 2

Erreur en PHP

Posté : 31 mai 2011, 10:44
par airness37
Bonjour, voici mon message d'erreur :
Les données ont bien été enregistréesCannot add or update a child row: a foreign key constraint fails (`cuisine`.`session`, CONSTRAINT `session_ibfk_1` FOREIGN KEY (`codecourssession`) REFERENCES `cours` (`codecours`))

Qui pourrait m'aider?
Merci d'avance.

Re: Erreur en PHP

Posté : 31 mai 2011, 11:07
par xTG
C'est une erreur issue d'une requête faite à ta base de données.
Tu as une contrainte qui n'est pas respectée sur une clé étrangère.

Re: Erreur en PHP

Posté : 31 mai 2011, 11:31
par airness37
pourtant, tout parait bon. =(

Re: Erreur en PHP

Posté : 31 mai 2011, 11:54
par xTG
Tu tenterais d'insérer dans une table une valeur en clé étrangère qui n'existe pas ?

Re: Erreur en PHP

Posté : 31 mai 2011, 12:02
par airness37
en verifiant, non! c'est pour mon bac et je suis en alerte la ^^.

Re: Erreur en PHP

Posté : 31 mai 2011, 12:04
par Ez3kiel
Qu'est ce que tu as fait pour avoir cette erreur ?

Re: Erreur en PHP

Posté : 31 mai 2011, 12:05
par airness37
je n'en sais rien. Tout le reste est bon. Vous avez un bon niveau en PHP ?

Re: Erreur en PHP

Posté : 31 mai 2011, 12:07
par macgawel
en verifiant, non! c'est pour mon bac et je suis en alerte la ^^.
En lisant l'erreur, si !
a foreign key constraint fails (`cuisine`.`session`, CONSTRAINT `session_ibfk_1` FOREIGN KEY (`codecourssession`) REFERENCES `cours` (`codecours`))
Plantage sur une contrainte de clé etrangère : Contrainte concernée = session_ibfk_1, qui lie la clé etrangère codecourssession à Cours.codecours.

1. Tu devrais afficher la requête, histoire de voir.

2. On ne peut pas dire grand chose de plus sans avoir :
- La constitution de la BDD (au moins ces deux tables), en particulier la contrainte de clé etrangère.
- Le code.

Re: Erreur en PHP

Posté : 31 mai 2011, 12:11
par airness37
mon script est bon sinon PHP my admin m'afficherait une erreur.
Le voici :
create table adherent (
numadh integer not null AUTO_INCREMENT,
nomadh varchar(30),
prenomadh varchar(20),
adradh varchar(50),
cpadh char(5),
villeadh varchar(30),
teladh char(10),
meladh varchar(40),
primary key (numadh))TYPE=INNODB DEFAULT CHARSET=latin1;

create table chef (
numchef integer not null,
nomchef varchar(30),
prenomchef varchar(20),
specialitechef varchar(40),
primary key (numchef))TYPE=INNODB DEFAULT CHARSET=latin1;

create table cours (
codecours char(5) not null,
libellecours varchar(40),
dureecours integer,
numchefcours integer,
primary key (codecours),
foreign key (numchefcours) references chef(numchef))TYPE=INNODB DEFAULT CHARSET=latin1;

create table session (
numsession integer not null AUTO_INCREMENT,
datesession date,
codecourssession char(5),
primary key (numsession),
foreign key (codecourssession) references cours(codecours))TYPE=INNODB DEFAULT CHARSET=latin1;

create table inscription (
numadhins integer not null,
numsessionins integer not null,
dateins date,
primary key (numadhins, numsessionins),
foreign key (numadhins) references adherent(numadh),
foreign key (numsessionins) references session(numsession))TYPE=INNODB DEFAULT CHARSET=latin1;

insert into adherent (nomadh, prenomadh, adradh, cpadh, villeadh) values("Chaprot", "Jules", "120 rue d'Hauteville","75010", "Paris");
insert into adherent (nomadh, prenomadh, adradh, cpadh, villeadh) values("Lagaffe", "Gaston", "140 boulevard Magenta","75010", "Paris");
insert into adherent (nomadh, prenomadh, adradh, cpadh, villeadh) values("Poulin", "Carole", "15 rue des Peupliers","03000", "Moulin");
insert into adherent (nomadh, prenomadh, adradh, cpadh, villeadh) values("Demaret", "Edouard", "10 boulevard de Denain","75010", "Paris");
insert into adherent (nomadh, prenomadh, adradh, cpadh, villeadh) values("Traboli", "Etienne", "345 avenue Jean Jaures","18000", "Bourges");
insert into adherent (nomadh, prenomadh, adradh, cpadh, villeadh) values("Agora", "Sophie", "78 rue des Tilleuls","37000", "Tours");


insert into chef values(1,'Yakamoto', 'Ken', 'cuisine japonaise');
insert into chef values(2,'Pucci', 'Mario', 'cuisine italienne');
insert into chef values(3,'Lam', 'Thieu Phan', 'cuisine vietnamienne');

insert into cours values('sush1','les sushis de thon',3,1);
insert into cours values('sush2','les sushis au concombre',2,1);
insert into cours values('tira1','le tiramisu traditionnel',3,2);
insert into cours values('past1','les pasta alla genovese',2,2);
insert into cours values('nems1','les vrais nems vietnamiens',3,3);

insert into session values ('', '2010-06-15', 'sush1');
insert into session values ('', '2010-06-18', 'sush1');
insert into session values ('', '2010-06-10', 'sush2');
insert into session values ('', '2010-06-12', 'sush2');
insert into session values ('', '2010-07-01', 'tira1');
insert into session values ('', '2010-07-05', 'tira1');
insert into session values ('', '2010-07-02', 'past1');
insert into session values ('', '2010-07-10', 'nems1');
insert into session values ('', '2010-07-12', 'nems1');

Re: Erreur en PHP

Posté : 31 mai 2011, 12:53
par macgawel
Et on pourrait avoir le code PHP (juste le passage concernant ta requête) ?
Ou la requête ?

Re: Erreur en PHP

Posté : 31 mai 2011, 13:01
par airness37
<?php
// Démarrage d'une session
session_start();

require 'connect.inc.php';

echo "<html><head>";
echo "<title>Club de Cuisine du Xème: WORLD'S COOK - Menu du Responsable</title>";
echo "<link rel='stylesheet' type='text/css' href='style.css'>";
echo "</head><body>";

$message=NULL;

if (empty($_POST['datesession']))
$message .= "date de la session";
if (empty($_POST['codecourssession']))
$message .= "code du cours lié à la session";

if (empty($message)) {
echo "Les données ont bien été enregistrées";
mysql_query("insert into session values ('', '".$_POST["datesession"]."',' ".$_POST["codecourssession"]."');") or die(mysql_error());
}
else {
echo "Erreur. Les champs suivants doivent être obligatoirement remplis :<br>";
echo $message;
}


?>

Re: Erreur en PHP

Posté : 31 mai 2011, 13:08
par macgawel
Déjà, je te conseille de respecter la logique :
N'afficher le message de succès qu'après le passage (réussi) de la requête...
Sinon, tu devrais afficher la requête, ça t'aiderait sans doute à cerner le problème (genre un espace là où il ne faut pas :roll: )
if (empty($message)) {
$requete = "insert into session values ('', '".$_POST["datesession"]."',' ".$_POST["codecourssession"]."');"
mysql_query($requete) or die("erreur sur la requete '.$requete.'<br />'.mysql_error());
echo "Les données ont bien été enregistrées";
}

Re: Erreur en PHP

Posté : 31 mai 2011, 13:17
par airness37
n'y a-t-il pas une erreur dans la requête ?
Car il a y une erreur sois disant.
Je suis désolé de ne pas être compétant. Mais sur le reste du PHP sa peut allez mais alors en langage SQL sur php, c'est une autre affaire.( j'ai fait copier/coller)

Re: Erreur en PHP

Posté : 31 mai 2011, 13:22
par macgawel
Si, il y a une erreur.

Il manque un point-virgule à la fin de la ligne $requete=... :oops:

Re: Erreur en PHP

Posté : 31 mai 2011, 13:26
par airness37
<?php
// Démarrage d'une session
session_start();

require 'connect.inc.php';

echo "<html><head>";
echo "<title>Club de Cuisine du Xème: WORLD'S COOK - Menu du Responsable</title>";
echo "<link rel='stylesheet' type='text/css' href='style.css'>";
echo "</head><body>";

$message=NULL;

if (empty($_POST['datesession']))
$message .= "date de la session";
if (empty($_POST['codecourssession']))
$message .= "code du cours lié à la session";


if (empty($message)) {
$requete = "insert into session values ('', '".$_POST["datesession"]."',' ".$_POST["codecourssession"]."');";
mysql_query($requete) or die("erreur sur la requete '.$requete.'<br />'.mysql_error());
echo "Les données ont bien été enregistrées";
}
else {
echo "Erreur. Les champs suivants doivent être obligatoirement remplis :<br>";
echo $message;
}


?>


<form action="index.htm"><INPUT TYPE='submit' VALUE="Retour à l'accueil"></form>
<form action="validation.php"><INPUT TYPE='submit' VALUE="Retour au menu responsable"></form>


ERREUR SUR LA LIGNE SURLIGNE. Mon echo ne s'affiche pas en bleu --'. VIVE LE BAC ! Mais merci de votre aide a tous.