Erreur en PHP

Eléphanteau du PHP | 12 Messages

31 mai 2011, 10:44

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.

ViPHP
xTG
ViPHP | 7331 Messages

31 mai 2011, 11:07

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.

Eléphanteau du PHP | 12 Messages

31 mai 2011, 11:31

pourtant, tout parait bon. =(

ViPHP
xTG
ViPHP | 7331 Messages

31 mai 2011, 11:54

Tu tenterais d'insérer dans une table une valeur en clé étrangère qui n'existe pas ?

Eléphanteau du PHP | 12 Messages

31 mai 2011, 12:02

en verifiant, non! c'est pour mon bac et je suis en alerte la ^^.

Eléphant du PHP | 80 Messages

31 mai 2011, 12:04

Qu'est ce que tu as fait pour avoir cette erreur ?
En informatique, lorsqu'il y a un bug, le souci est toujours entre la chaise et le clavier.

Eléphanteau du PHP | 12 Messages

31 mai 2011, 12:05

je n'en sais rien. Tout le reste est bon. Vous avez un bon niveau en PHP ?

Mammouth du PHP | 672 Messages

31 mai 2011, 12:07

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.

Eléphanteau du PHP | 12 Messages

31 mai 2011, 12:11

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');

Mammouth du PHP | 672 Messages

31 mai 2011, 12:53

Et on pourrait avoir le code PHP (juste le passage concernant ta requête) ?
Ou la requête ?

Eléphanteau du PHP | 12 Messages

31 mai 2011, 13:01

<?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;
}


?>

Mammouth du PHP | 672 Messages

31 mai 2011, 13:08

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";
}

Eléphanteau du PHP | 12 Messages

31 mai 2011, 13:17

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)

Mammouth du PHP | 672 Messages

31 mai 2011, 13:22

Si, il y a une erreur.

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

Eléphanteau du PHP | 12 Messages

31 mai 2011, 13:26

<?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.