2013-08-12 2 views
-1

데이터베이스에서 선택 ID, 선택 및 정의 쌍을 표시하는 양식이 있습니다. 양식은 동적입니다 ... 사용자에 따라 이러한 수의 쌍이있을 수 있습니다. 여기에 세 가지 페어링의 예입니다업데이트 쿼리가 정의되지 않은 오프셋 알림

선택 ID, 선택, 정의

선택 ID, 선택, 정의

선택 ID, 선택, 정의

페이지가 표시됩니다 잘하지만, 경우 사용자가 선택 또는 정의를 편집하고 싶다면 양식을 제출할 때 다음과 같은 오류 메시지가 나타납니다 (참고 : 41 번째 줄은 내 업데이트 쿼리 임) :

"알림 : 정의되지 않은 오프셋 : 3 (내 PHP 파일 링크) 온라인 41 "

나는이 쿼리가 내 세 배열의 정보를 읽지 않는다는 것을 알려주고 있다고 가정하지만, 올바르게 읽힐 수 있도록 내 쿼리에 무엇을 넣어야하는지 알지 못합니다. 당신의 도움을 주셔서 대단히 감사합니다.

if(isset($_POST['submit'])){  
    $selection_id = array(); 
    $selection = array(); 
    $definition = array(); 

foreach ($_POST as $key => $value){  
    // If array variable starts with "pd_selection_id_for_" save to $selection_id array, otherwise continue to the next array. 

    if(strpos($key, 'pd_selection_id_for_') !== false){ 
     $selection_id[] = mysql_real_escape_string($value); 
    }else if(strpos($key, 'selection_for_') !== false){ 
     $selection[] = mysql_real_escape_string($value); 
    }else if(strpos($key, 'definition_for_') !== false){ 
     $definition[] = mysql_real_escape_string($value); 
    } 
} 

// Count one of the arrays to select the paired fields and update the database. 

$total = count($definition); 

for ($i=1; $i <= $total; $i++){ 
    // Update query for the paired selections and definitions. 
    $query = mysql_query("UPDATE `pd_selections` SET `pd_selection` = '$selection[$i]', `pd_definition` = '$definition[$i]' WHERE `pd_selection_id` = '$selection_id[$i]' ") or die(mysql_error()); 
} 

}

+0

phpl arrays -'$ selection_id []'-는'0' 기반이므로 for ($ i = 1; $ i <= $ total; $ i ++)를 기반으로' {... $ selection_id [$ i]', 당신은 첫 번째'$ selection_id [0]'을 얻지 못할 것이고, 마지막 + 1 -'$ selection_id [3]'을 얻으 려 시도 할 것입니다. 어떤 경우에 3의 수처럼 보이는지 - 실제 배열 (0,1,2); 이 배열 (1,2,3)에 액세스하려고합니다. – Sean

+0

for 루프를 ($ i = 0; $ i <$ total; $ i ++)로 변경했으며 완벽하게 작동했습니다. Sean과 GGio에게 감사의 말을 전합니다. –

+0

는 PDO가 mysql 확장자를 잊어 버리는 것을 사용합니다. – Songo

답변

0

마이너 구문 오류가 라인 (41)에 대한 수정은 다음과 같습니다 :

$query = mysql_query("UPDATE `pd_selections` SET `pd_selection` = '".$selection[$i]."', `pd_definition` = '".$definition[$i]."' WHERE `pd_selection_id` = '".$selection_id[$i]."'") or die(mysql_error()); 
0

Undefined Offset 오류가 당신이 당신의 배열에 액세스하려고하는 위치에 따라서 설정되지 않음을 의미합니다 그 정의되지 않았습니다.

$i = 0; 
foreach ($_POST as $key => $value){  
    //initialize array at position $i 
    $selection_id[$i] = $selection[$i] = $definition[$i] = ''; 

    if(strpos($key, 'pd_selection_id_for_') !== false){ 
     $selection_id[$i] = mysql_real_escape_string($value); 
    }else if(strpos($key, 'selection_for_') !== false){ 
     $selection[$i] = mysql_real_escape_string($value); 
    }else if(strpos($key, 'definition_for_') !== false){ 
     $definition[$i] = mysql_real_escape_string($value); 
    } 

    $i++; 
} 

귀하의 모든 배열의 크기가 같은 것을 알고이 방법을 따라서 할 것이다 : 당신이

에 문제가 배열이 당신이 루프에서 액세스하려는 인덱스에 초기화되지 것입니다,이 시도 다른 배열이 설정된 동일한 위치에 설정됩니다.

관련 문제