Cannot add or update a child row: a foreign key constraint f

Questions about the MySQL, PostgreSQL, and most other databases, as well as using it with PHP can be asked here.

Moderator: General Moderators

Post Reply
ummhasan
Forum Commoner
Posts: 31
Joined: Sun Jun 13, 2010 7:24 pm
Location: USA

Cannot add or update a child row: a foreign key constraint f

Post by ummhasan »

Hi All,

I've created a form that will be used for a competition registration. I have also created a php processing page and a mySQL database to store the info. I keep getting an error and I have tried many many different things but to no avail.

Here is the PHP code

Code: Select all

$pid=mysql_insert_id();

//insert to mySQL
$sql="INSERT INTO Registration2011 (Level, LastName, FirstName, Grade, DOB, eMail, Phone, Address, City, State, Zip, ParentsFirstName, ParentsLastName, Location, Date)
VALUES
('$level','$lname','$fname','$grade','$dob','$email','$ph','$addy','$city','$st','$zip','$ptFname','$ptLname','$location',now())";
mysql_query($sql);

$sql="INSERT INTO Partners2011 (ID, pLevel, PartnerLastName, PartnerFirstName, PartnerGrade, PartnerDOB, PartnerEmail, PartnerPhone, PartnerAddress, PartnerCity, PartnerState, PartnerZip, PartnerParentFirstName, PartnerParentLastName, Date)
VALUES
('$pid','$level','$pLname','$pFname','$pGrade','$pDob','$pEmail','$pPh','$pAddy','$pCity','$pSt','$pZip','$ppFname','$ppLname',now())";
mysql_query($sql);

/************END INSERT TO MYS!L*****************/
and here is the CREATE Table for both tables:
CREATE TABLE `Registration2011` (
`ID` int(10) NOT NULL auto_increment,
`Level` char(50) NOT NULL,
`LastName` char(50) NOT NULL,
`FirstName` char(50) NOT NULL,
`Grade` char(2) NOT NULL,
`DOB` char(10) NOT NULL,
`eMail` char(50) NOT NULL,
`Phone` char(15) NOT NULL,
`Address` char(100) NOT NULL,
`City` char(50) NOT NULL,
`State` char(10) NOT NULL,
`Zip` int(5) NOT NULL,
`ParentsFirstName` char(50) NOT NULL,
`ParentsLastName` char(50) NOT NULL,
`Location` char(20) NOT NULL,
`Date` datetime NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8

CREATE TABLE `Partners2011` (
`ID` int(10) NOT NULL,
`pLevel` char(50) NOT NULL,
`PartnerLastName` char(50) NOT NULL,
`PartnerFirstName` char(50) NOT NULL,
`PartnerGrade` char(2) NOT NULL,
`PartnerDOB` char(20) NOT NULL,
`PartnerEmail` char(50) NOT NULL,
`PartnerPhone` char(15) NOT NULL,
`PartnerAddress` char(100) NOT NULL,
`PartnerCity` char(20) NOT NULL,
`PartnerState` char(10) NOT NULL,
`PartnerZip` int(5) NOT NULL,
`PartnerParentFirstName` char(50) NOT NULL,
`PartnerParentLastName` char(50) NOT NULL,
`Date` datetime NOT NULL,
PRIMARY KEY (`ID`),
CONSTRAINT `Partners2011_ibfk_1` FOREIGN KEY (`ID`) REFERENCES `Registration2011` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8

I am also in need of some advise on how to properly run the following switch to build competition LEVEL tables. Here's what I have so far:

Code: Select all

switch ($level) {
	case null;
	break;
	case PKG:
$sql="INSERT INTO PK_KG (rFname, rLname)
  SELECT FirstName, LastName
  FROM Registration2011 WHERE Level = 'PKG'";
mysql_query($sql);
$sql="INSERT INTO PK_KG (pFname, pLname)
  SELECT PartnerFirstName, PartnerLastName
  FROM Partners2011 WHERE pLevel = PKG";
mysql_query($sql);
	break;
	case "1to3":
//build 1to3 table
$sql="INSERT INTO 1to3 (rFname, rLname)
  SELECT FirstName, LastName
  FROM Registration2011 WHERE Level = 1to3";
mysql_query($sql);
$sql="INSERT INTO 1to3 (pFname, pLname)
  SELECT PartnerFirstName, PartnerLastName
  FROM Partners2011 WHERE pLevel = 1to3";
mysql_query($sql);
	break;
	case "4to6":
//build 4to6 table
$sql="INSERT INTO 4to6 (rFname, rLname)
  SELECT FirstName, LastName
  FROM Registration2011 WHERE Level = 4to6";
mysql_query($sql);
$sql="INSERT INTO 4to6 (pFname, pLname)
  SELECT PartnerFirstName, PartnerLastName
  FROM Partners2011 WHERE pLevel = 4to6";
mysql_query($sql);
	break;
	case "7to9":
//build 7to9 table
$sql="INSERT INTO 7to9 (rFname, rLname)
  SELECT FirstName, LastName
  FROM Registration2011 WHERE Level = 7to9";
mysql_query($sql);
$sql="INSERT INTO 7to9 (pFname, pLname)
  SELECT PartnerFirstName, PartnerLastName
  FROM Partners2011 WHERE pLevel = 7to9";
mysql_query($sql);
	break;
	case "10to12":
//build 10to12 table
$sql="INSERT INTO 10to12 (rFname, rLname)
  SELECT FirstName, LastName
  FROM Registration2011 WHERE Level = 10to12";
mysql_query($sql);
$sql="INSERT INTO 10to12 (pFname, pLname)
  SELECT PartnerFirstName, PartnerLastName
  FROM Partners2011 WHERE pLevel = 10to12";
mysql_query($sql);
	break;
	default:
		echo"You did not select a level.  Selecting the level you intend to participate in is REQUIRED.  Please go back and complete the form again.  Jazak Allah Khair.";
	break;
	}
User avatar
Darhazer
DevNet Resident
Posts: 1011
Joined: Thu May 14, 2009 3:00 pm
Location: HellCity, Bulgaria

Re: Cannot add or update a child row: a foreign key constrai

Post by Darhazer »

The call to mysql_insert_id() have to be after the insert:

Code: Select all

//insert to mySQL
$sql="INSERT INTO Registration2011 (Level, LastName, FirstName, Grade, DOB, eMail, Phone, Address, City, State, Zip, ParentsFirstName, ParentsLastName, Location, Date)
VALUES
('$level','$lname','$fname','$grade','$dob','$email','$ph','$addy','$city','$st','$zip','$ptFname','$ptLname','$location',now())";
mysql_query($sql);

$pid=mysql_insert_id();

$sql="INSERT INTO Partners2011 (ID, pLevel, PartnerLastName, PartnerFirstName, PartnerGrade, PartnerDOB, PartnerEmail, PartnerPhone, PartnerAddress, PartnerCity, PartnerState, PartnerZip, PartnerParentFirstName, PartnerParentLastName, Date)
VALUES
('$pid','$level','$pLname','$pFname','$pGrade','$pDob','$pEmail','$pPh','$pAddy','$pCity','$pSt','$pZip','$ppFname','$ppLname',now())";
mysql_query($sql);

/************END INSERT TO MYS!L*****************/
Post Reply