2015-01-02 4 views
1

다음은 3 단계로 수행 할 작업입니다.PHP에서 explode 함수 사용 및 for 루프를 사용하여 데이터베이스에 삽입

1) 양식에서 이름을 가져옵니다. 이름은 사이에 쉼표를 사용하여 양식에 입력됩니다.

2) 데이터베이스에서 이름의 ID를 가져옵니다.

3-) 이러한 이름을 테이블에 삽입하십시오.

내가 원하는 것을 분명히하기를 바랍니다.

여기까지 제가 한 일입니다.

$writer_name = "Franz Kafka, Agatha Christie, George Bernard Shaw"; // I used a 
//variable instead of using a form value here 
$thing_id = 10; 

$values_select = explode(",", $writer_name); 
echo $values_select[0]; // returns Franz Kafka, our explode function worked 

$who = "SELECT writer_id FROM writer_name WHERE writer_name = '$values_select[]'"; 

// I stuck here, I need to get all the writer's ID's and store it in an array 
// in order to insert below X times (depends on how many writers are entered), right? But how? 

$who_result = $sqli->query($who); 
$who_row = $who_result->fetch_array(); 
$who_finish = $who_row['writer_id']; 

$values = explode(",", $writer_name); 
$control = count($values) - 1; 
$new_values = $sqli->prepare("INSERT INTO book(thing_id, person_id) VALUES(?,?)"); 
for ($i = 0; $i < count($values); $i++) { 
    if (!empty(trim($values[$i]))) { 
     $new_values .= "('" . trim($values[$i]) . "')"; 
    } 
    if ($control == $i) { 
     $new_values .= ";"; 
    } else $new_values .= ","; 
} 
    $thing->bind_param("ii", $thing_id, $values[$i]); // using integer because I insert data into a junction table that accepts only ID values) 
    $thing->execute(); 
+1

WHERE writer_name IN ($ writer_name) IN 쉼표로 구분 된 목록을 전달하면 writer_name이 목록에있는 레코드를 반환합니다. 예 : http : //www.techonthenet.com/sql/in.php –

+1

또한 SQL은 생각보다 훨씬 강력합니다. 대부분의 PHP 코드는 버려지고 작업은 DB로 오프로드됩니다. –

+1

'... = '$ values_select []''은 "불가능"코드입니다. 당신은 리터럴 쿼리 텍스트'... = 'Array []''을 생성하고 있습니다. 아무 것도 일치하지 않을 것입니다. –

답변

1

당신은 모든 배열 값을 조회 할 수 있습니다 (내가 여기, 한 페이지에 양식을 제외하고 있어요) : (? BTW 당신은 ​​오타 등을 확인 할)

$who_finish = array(); 
while(list($k, $v)=each($values_select)) { 
    $v = $sqli->real_escape_string(trim($v)); 
    $who = "SELECT writer_id FROM writer_name WHERE writer_name = '$v'"; 
    $who_result = $sqli->query($who); 
    $who_row = $who_result->fetch_array(); 
    $who_finish[] = $who_row['writer_id']; 
} 

이상을하는 것입니다 쿼리 한 번에이 같은 : SELECT writer_id, writer_name FROM writer_name WHERE writer_name IN ("Franz Kafka", "Agatha Christie", "George Bernard Shaw")

(나는 당신의 코드를 이해 잘 그래서 여기에 가정하지 않음) 테이블에 값을 삽입하려면 :

$new_values_q = $sqli->prepare("INSERT INTO book(thing_id, person_id) VALUES(?,?)"); 

while(list($k, $v)=each($who_finish)) { 
    $new_values_q->bind_param("ii", $thing_id, $v); // $v should be author_id 
    $new_values_q->execute(); 
} 
$new_values_q->close(); 
+0

지금은 오타를 확인하지 않지만 동일한 리소스에서 값을 대량 복사/붙여 넣기 때문에 모든 레코드가 올바르게 입력됩니다. 지금 당신의 해결책을 시도하고 있습니다. – salep

+0

이 쿼리는 작동하지만 여전히 삽입 할 수는 없습니다. echo $ who_finish [0]; // 첫 번째 작성자의 ID를 반환 echo $ who_finish [1]; // 두 번째 작성자 ID를내어 echo $ who_finish [2]; // 세 번째 작성자 ID를 부여하십시오 하지만 루프를 사용하여 삽입 할 수 있습니까? – salep

+1

@salep 응답에 삽입 조각을 추가했지만 코드를 잘 이해하지 못해 필요한 항목을 추측했습니다. –

1

유용 할 수도 테스트되지 않을 수도 있습니다.

$writer_name = "Franz Kafka, Agatha Christie, George Bernard Shaw"; 

$values_select = explode(",", $writer_name); 

foreach($values_select as $sel){ 
    $query = "INSERT INTO book (thing_id, person_id) 
SELECT $thing_id, location 
FROM writer_name 
WHERE writer_name = ".trim($sel); 
$sqli->query($query); 
} 
관련 문제