2016-07-07 6 views
1


나는 체크 박스와 MySQL DB가 포함 된 PHP 폼을 다루고있다. 마침내 배열을 반복하면서 각 선택된 항목에 대해 하나씩 여러 행을 삽입 할 수있었습니다.
하지만 이제는 또 다른 문제에 직면해야합니다. DB에서 하나의 선택 사항 질문을 저장하는 하나의 주 테이블과 확인란의 답을 저장하는 또 다른 테이블이 있습니다.
하나의 선택적인 답을 주 테이블 (양식 당 하나의 행)에 삽입하는 쿼리를 먼저 실행하여 일련 ID를 생성하고 싶습니다.
둘째,이 ID를 가져와이 ID를 통해 두 테이블을 연결하기 위해 체크 박스 테이블에 삽입 된 모든 행에이 ID를 연결합니다.
그게 가능합니까? 어떻게해야합니까? 여기에 PHP 부분
외래 키를 사용하여 PHP 폼의 데이터를 MySQL DB에 삽입하는 방법은 무엇입니까?

<input type="checkbox" name="nature_contact[]" value="1"><label >Phone</label><br/> 
<input type="checkbox" name="nature_contact[]" value="2"><label >Mail</label><br/> 
<input type="checkbox" name="nature_contact[]" value="3"><label >Visit</label><br/> 
<input type="checkbox" name="nature_contact[]" value="4"><label >Unk</label> <br/><br/> 
<input type="text" name="coord"/> 
      <br/> 
<input type="text" name="tel"/> 
      <br/><br/>    
<input type="submit" name="add" value="SEND"/> 

그리고 :

여기에 HTML 코드

try { 
    if(isset($_POST['add'])){ 
     if(isset($_POST['coord'])) { 
      $coord=$_POST['coord']; 
     } 
     else { $coord = ''; 
     } 
     if(isset($_POST['tel'])) { 
      $tel=$_POST['tel']; 
     } 
     else { $tel = ''; 
     }   
    $query="INSERT INTO nmp_mfs.general (coord, tel) VALUES ('".$coord."', '".$tel."')"; 
    $statement_gnl = $pdo->prepare($query); 
    $statement_gnl->execute(); 
    } 
} 
catch(PDOException $e) { 
    $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage(); 
    die($msg); 
} 

try { 
    if(isset($_POST['add'])){ 
     if(isset($_POST['nature_contact'])) { 
      $sql = "INSERT INTO nmp_mfs.t_temporaire (nature_contact) VALUES ".rtrim(str_repeat('(?),', count($_POST["nature_contact"])), ','); 
      $statement = $pdo->prepare($sql); 
      $count = 1; 
      foreach($_POST["nature_contact"] as $nature_contact) { 
       $statement->bindValue($count++, $nature_contact); 
      } 
      $statement->execute(); 
     } 
    } 
} 
catch(PDOException $e) { 
    $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage(); 
    die($msg); 
} 

답변

0

예이 가능합니다. (마지막으로 삽입 된 ID를 가져

$lastInsertedID = $db->lastInsertId(); 

1) 데이터베이스 테이블에서 질문을 삽입 (주)

2) :

당신은 같은 주요 테이블 행의 마지막 삽입 된 ID가 필요 $ lastInsertedID)

3. 답변 테이블에 질문과 관련된 답변을 삽입하고 마지막으로 삽입 한 ID를 제공하십시오.

$query = "INSERT INTO nmp_mfs.t_temporaire (questionID, nature_contact) 
VALUES ($lastInsertedID, $nature_contact)"; // Example 

4. 질문의 ID를 선택하십시오.

5) 취득 상응하는 답변 :

$query = "SELECT awnsers WHERE question_id = questionID"; // Simple example 
+0

감사합니다. 나는 (최대 ID)로 시도했지만 lastInsertId()가 훨씬 더 안정적이다. 그러나,이 값을 함수에 추가해야합니다 : .rtrim (str_repeat ('(?),', count ($ _ POST [ "nature_contact"])), ','), 그리고 이것은 까다 롭습니다. str_repeat ('($ lastID,?)')로 시도했지만 $ lastID의 값 대신 문자열을 반환합니다. 해결할 수 있습니까? – RemiC

+0

! 인용문을 잊어 버렸습니다 : str_repeat ('('. '$ lastID ',?),' – RemiC

0

당신은 불쌍한 내 영어에 대한 mysql.Sorry에서 트랜잭션을 사용하여 데이터가 동기화되었는지 확인하려면, 난 그냥 유용한 무언가를하고 싶다.