2014-09-26 4 views
0

좋아요. 외래 키가 설정되어 있고 phpmyadmin의 sql 탭을 통해 테이블에 가입 할 수 있지만 허용 할 때 제대로 작동하는 방법을 알 수는 없습니다. 사용자가 양식을 통해 값을 입력 할 수 있습니다. 지금 나는 이름, 성 및 전화 번호를 허용하는 매우 기본적인 형식으로 놀고 있습니다. 성과 이름은 Customer이라는 테이블로 전송되고 전화 번호는 Customer_Number이라는 테이블로 전달됩니다. 문제는 입력 필드에 값을 입력하면 성 및 이름이 DB 테이블에 저장되지만 전화 번호는 저장되지 않고이 오류 메시지가 누출되지 않는다는 것입니다. Cannot add or update a child row: a foreign key constraint fails (``.Customer_Number, CONSTRAINT Customer_Number_ibfk_1 FOREIGN KEY (Customer_ID) REFERENCES Customer (Customer_ID))사용자 입력이있는 2 개의 테이블에 합류

방금 ​​추가 할 수있는 방법이 있습니까? 올바른 고객에 따라이 값과 내 Customer_Number 테이블의 외래 키가 업데이트됩니까? 여기

내 코드입니다 :

<?php 

     $con=mysqli_connect(""); 
      if(mysqli_connect_errno()){ 
       echo "There was a mistake connecting". mysqli_connect_errno(); 
       } 
     $First=mysqli_real_escape_string($con,$_POST["FirstName"]); 
     $Last=mysqli_real_escape_string($con, $_POST["LastName"]); 
      if(!empty($_POST["FirstName"]) && !empty($_POST["LastName"])){ 
       $sql="INSERT INTO Customer(First,Last) 
        VALUE('$First', '$Last')"; 

         if(!mysqli_query($con,$sql)) { 
          die("ERROR". mysqli_error($con)); 
          }else{ 
           echo"record added"; 
           } 
          } 
            mysql_close($con); 
          ?> 
    <?php 

     $con=mysqli_connect(""); 
      if(mysqli_connect_errno()){ 
       echo "There was a mistake connecting". mysqli_connect_errno(); 
       } 
     $Phone=mysqli_real_escape_string($con,$_POST["Number"]); 

      if(!empty($_POST["Number"])){ 
       $sql="INSERT INTO Customer_Number(Number) 
        VALUE('$Phone')"; 

         if(!mysqli_query($con,$sql)) { 
          die("ERROR". mysqli_error($con)); 
          }else{ 
           echo"record added"; 
           } 
          } 
            mysql_close($con); 
          ?> 

그리고 여기 내 테이블 정보이다 : 나는이 작업을 수행 할 수있는 방법이있을 가지고 알고

CREATE TABLE `Customer` (
`Customer_ID` int(11) NOT NULL AUTO_INCREMENT, 
`First` varchar(255) NOT NULL, 
`Last` varchar(255) NOT NULL, 
PRIMARY KEY (`Customer_ID`) 
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 

CREATE TABLE `Customer_Number` (
`Num_ID` int(11) NOT NULL AUTO_INCREMENT, 
`Customer_ID` int(11) NOT NULL, 
`Number` varchar(255) NOT NULL, 
PRIMARY KEY (`Num_ID`), 
KEY `Customer_ID` (`Customer_ID`), 
CONSTRAINT `Customer_Number_ibfk_1` FOREIGN KEY (`Customer_ID`) REFERENCES `Customer`   (`Customer_ID`) 
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 

,하지만 난이 새로운 해요 내 Google 검색은 phpMyAdmin을 통해이를 수행하고 외래 키 값을 수동으로 입력하는 방법을 실제로 다루었습니다. Customer_Number.Customer_ID 이후

+3

당신은'mysql_'과'mysqli_' 함수를 혼합하고 있습니다. –

+0

이 문제인지 아니면 프로그래밍 표준을 충족 할 수 있도록 정리해야한다는 사실을 알려주고 있습니까? – Jcmoney1010

+2

그게 전부는 아니지만 우리가 공격하기 전에 깨끗하고 작동 가능한 코드가 필요합니다. –

답변

0

가 대응 Customer 행 외래 키 가리키는에는 Customer를 삽입 한 후 번호를 삽입 할 때 올바른 값으로 Customer_Number.Customer_ID을 설정할 필요가있다.

동일한 연결 (예 : 쿼리간에 닫기/다시 열기)을 사용하는 경우 LAST_INSERT_ID()을 사용하여 (SQL 부분 만) 방금 삽입 한 고객의 Customer_ID를 가져올 수 있습니다.

INSERT INTO Customer(First,Last) 
    VALUES ('$First', '$Last') 

INSERT INTO Customer_Number(Customer_ID, Number) 
    VALUES (LAST_INSERT_ID(), '$Phone') 
+1

이것은 성공했습니다. 감사합니다. – Jcmoney1010