2011-08-11 2 views
0

한 사람의 정보를 삽입하려고 시도했지만 성공적으로 삽입되었습니다. DB에 "동일한 데이터가 3 번 삽입"체크 인하십시오. 왜 데이터가 3 번 삽입됩니까?oops PHP 개념을 사용하여 데이터베이스에서 데이터를 삽입하는 방법은 무엇입니까?

데이터베이스에이 데이터가 있습니다. 당신이 데이터를 세 번 삽입하는 이유

id  name  dob    gen 
1  James  12-03-1977  M 
2  James  12-03-1977  M 
3  James  12-03-1977  M 

PHP 클래스

class Detail 
{ 
function savePerson_detail($vars){ 
    foreach($vars as $key => $value){ 
     if(is_numeric($key) && $value >0){ 
     $qry = sprintf("INSERT INTO cca_student_list(per_name, per_dob, per_gen) VALUES('%s', '%s', '%s')", 
     mysql_real_escape_string($vars['name']), 
     mysql_real_escape_string($vars['dob']), 
     mysql_real_escape_string($vars['gen'])); 
     mysql_query($qry) or die(mysql_error()); 
     if($qry) 
    { 
    print 'Successfully Insert your details'; 
    } 
    } 
} 

html로 페이지

<?php 
$detail = new Detail(); 
if(isset($_POST['btnSaveDetail'])){ 
    $detail->savePerson_detail($_POST); 
}?> 
+0

질문 제목이 귀하의 질문 내용과 관련이 없습니다 ... – Raptor

+0

$ _POST 변수의 print_r()을 만들 수 있습니까? – pleasedontbelong

답변

1

당신은 실제로 쿼리를 세 번 실행, 즉. 쿼리를 한 번 실행하면 괜찮을 것입니다.

이렇게하려면 코드를 변경해야합니다. 먼저 쿼리를 실행하여 입력 데이터를 전체적으로 소독하십시오. 현재 $vars (세 요소가 있음)의 각 요소를 선택하고 시간의 쿼리를 실행합니다.

은 다른 후 한 단계를 수행합니다

function savePerson_detail($vars) 
{ 
    // validate function input 
    foreach($vars as $key => $value) 
    { 
     if(!is_numeric($key) || !$value >0) 
     return; 
    } 

    // build sql query 
    $qry = sprintf(
     "INSERT INTO cca_student_list(per_name, per_dob, per_gen) VALUES('%s', '%s', '%s')", 
     mysql_real_escape_string($vars['name']), 
     mysql_real_escape_string($vars['dob']), 
     mysql_real_escape_string($vars['gen']) 
    ); 

    // run sql query 
    $result = mysql_query($qry) or die(mysql_error()); 

    // check query result 
    if($result) 
    { 
     print 'Successfully Insert your details'; 
    } 
} 
+0

약간의 제안 :이 함수는'print'를 사용하는 대신 true 또는 false를 반환 할 수 있습니다. 아니면 어쩌면 예외를 던져 주 PHP 파일을 잡아 – pleasedontbelong

+0

그래, 그리고 그것은 coulb PDO, 종속성 주입, 실제 유효성 검사, SQL 문자열에 대한 빌더를 사용하여 데이터 구성의 매개 변수화 등 사용에 많이 올 것이다. 그것으로 인해 마음이 나쁘다. 그러나 나를 위해 그것이 원래 가지고 있던 논리적 결함을 다루기위한 첫 번째 단계에서 앞서 나가는 것이 중요했다. – hakre

0

에 전달했다 $vars 또는 $_POST은 다음과 같습니다 때

foreach($vars as $key => $value){ 

을 사용했기 때문에.

$_POST['name'] = 'James'; 
$_POST['dob'] = '12-03-1977'; 
$_POST['gen'] = 'M'; 

따라서 각 $_POST 개 항목을 3 번 통과했습니다. 난 당신이 유효성 검사를 제거하고 이렇게 할 수있을 것 같아요.

function savePerson_detail($vars){ 
    $qry = sprintf("INSERT INTO cca_student_list(per_name, per_dob, per_gen) VALUES('%s', '%s', '%s')", mysql_real_escape_string($vars['name']), mysql_real_escape_string($vars['dob']), mysql_real_escape_string($vars['gen'])); 
    mysql_query($qry) or die(mysql_error()); 
    if($qry) 
    { print 'Successfully Insert your details'; } 
} 
0

내가 누락 된 사항이 없으면이 작업을 수행하려고합니까?

class Detail 
{ 
function savePerson_detail($vars) { 
    foreach($vars as $key => $value) { 
      $vars[$key] = mysql_real_escape_string($value); 
    } 

    if($qry) 
    { 
     print 'Successfully Insert your details'; 
    } 

    $qry = sprintf("INSERT INTO cca_student_list(per_name, per_dob, per_gen) VALUES('%s', '%s', '%s')"; 
    mysql_query($qry) or die(mysql_error()); 
} 
관련 문제