2011-05-02 4 views
1

저는이 기능이 새로 도입되었지만 가능한 한 정확하게 문제를 설명하려고 최선을 다할 것입니다. 두 개의 파일이 있습니다 - 하나는 edit_captions_form.php으로, 양식의 일부가 될 요소를 설정하는 edit_form이라는 클래스가 들어 있습니다. 요소의 수는 동적으로 결정되며 루프를 사용하여 데이터베이스에서 추가됩니다. 루프 카운터는 SQL 쿼리에서 반환 된 행 수이며 url에 전달됩니다. 이것은 코드의 중요한 부분이다 번째 파일 edit_captions.php이라고하며 edit_form의 인스턴스를 생성하고, 폼 요소의 값을 추출하기 위해 시도한다하나의 PHP 페이지에서 다른 PHP 페이지로 값을 전달할 때 문제가 발생했습니다.

class edit_form extends moodleform { 

function definition() { 

    $numRows = $_GET['numRows']; 


    if(isset($numRows)){ 
     echo "yes" .$numRows; } 
     else 
      echo "no"; 
//result: yes and the value of $numRows 


    $mform = & $this->_form; 
       . 
      //some irrelevant code 
       . 

    $mform->addElement('header', 'editcaptionsheader', $editcaptionsheader .$title); 
       . 
       //some more irrelevant code 
       . 
    $captionResult = mysql_query($captionQuery); 
    $captionsArray = array(); 

    $textFieldAttributes = "size=\"10\" value=\"\""; 

    while ($row = mysql_fetch_array($captionResult)) { 
     array_push($captionsArray, $row); 


    } 


    for ($i = 0; $i < $numRows; $i++) { 

     $startName = "start_" . $i; 
     $startValue = $captionsArray[$i]['start_time']; 
     $endName = "end_" . $i; 
     $endValue = $captionsArray[$i]['end_time']; 
     $captionName = "caption_" . $i; 
     $captionValue = $captionsArray[$i]['caption_text']; 
     $captionIdName = "id_".$i; 
     $captionIdValue = $captionsArray[$i]['caption_id']; 


     // print_object($captionsArray); 


     $mform->addElement('hidden', $captionIdName, $captionIdResult); 
     $mform->addElement('text', $startName, $editstarttimeTrans, $textFieldAttributes); 

     $mform->setDefault($startName, $startValue); 
     $mform->addElement('text', $endName, $editendtimeTrans, $textFieldAttributes); 
     $mform->setDefault($endName, $endValue); 


     //text area to contain caption text 
     $mform->addElement('htmleditor', $captionName, "$editcaptiontextTrans: ", 'wrap="virtual" rows="4" cols="40"'); 
     $mform->setDefault($captionName, $captionValue); 

     //echo "<button type = \"button\", name = \"edit_caption\", onclick = 'updateRecordInDatabase($referenceId, $start, $end, $text)'>Save</button>"; 
     $buttonarray = array(); 
     $buttonarray[] = &$mform->createElement('submit', 'submitbutton', get_string('savechanges')); 
     $buttonarray[] = &$mform->createElement('reset', 'resetbutton', get_string('revert')); 
     $buttonarray[] = &$mform->createElement('cancel'); 
    //add_action_buttons($buttonarray[0] = true); 
     $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); 
     $mform->closeHeaderBefore('buttonar'); 

다시 번호로부터 유도 된 카운터 루프를 사용 행 수 , I는 모두 루프하는 카운터로서 열의 실제 개수에 하드 코딩되면 모든 배열 요소의 값 $elementArray에 저장되고 검색 될 수 있고, 지금

require_once("edit_captions_form.php"); 

$id = $_GET['id']; 
$numRows = $_GET['numRows']; 

echo " the number of rows: " .$numRows; 
//$numRows doesn't print here 

$pageForm = new edit_form(); 

if($pageForm->is_cancelled()) 
{ 
redirect elsewhere 

} 

else if($fromform = $pageForm->get_data()) 
{ 


for ($i=0; $i<$numRows; $i++) 
{ 
$elementNumber = 3+(5*$i);//3, 8, 13, 18 

$elementArray = $pageForm->_form->_elements; 
$timeAtts = $elementArray[$elementNumber]->_attributes; 
$captionStartTime = $timeAtts['value']; 
$elementNumber = $elementNumber +1; 

$elementArray = $pageForm->_form->_elements; 
$endTimeAtts = $elementArray[$elementNumber]->_attributes; 
$captionEndTime = $endTimeAtts['value']; 
$elementNumber = $elementNumber +1; 

$elementArray =$pageForm->_form->_elements; 
$captionText = $elementArray[$elementNumber]->_value; 

} 

이 코드 관련 부분 그래서 모든면에서 괜찮습니다. 문제는 내가 무엇을해도 edit_captions.php 파일의 $ numRows 변수에 값이 없으므로 루프가 실행되지 않아 데이터를 가져올 수 없다는 것입니다.

나는 내가 $_GET을 통해 대신 MySQL의 쿼리를 사용하여 함수에서 값을 얻는 시도 require_once(edit_captions_form.php)을 사용했기 때문에 나는이에 액세스 할 것이라고 생각 난 정말 이해하지 않았지만, 나는 마술 방법 __set()__get() 시도 그게 작동하지 않는 이유가 될 수 있도록 내가 무엇을했는지, $numRows에 액세스하려고 시도했다. 마치 함수 정의()에 있기 때문에 edit_form 클래스의 변수 인 것처럼 생각하지 않는다. 정의() 전에 변수로 추가하려고했지만 전체 양식이 손상되었습니다. 또한 global 키워드를 사용해 보았지만 작동하지 않았습니다.

다시 말씀 드리지만 사과하지 않을 경우 문제를 진술하는 데 더 간결한 방법을 생각할 수 없습니다. 나는 이것을 3 일 동안 단단히하고 그것을 할 수 없었다. 누구든지 제게 두 번째 파일의 루프에 대해 $numRows에 액세스 할 수없는 이유를 설명해 주시면 감사하겠습니다. 아니면 그냥 불가능한 일이라면 제 불행에서 벗어나 알려주세요!

+0

'에코 "행의 수 :". $ numRows의; // $ numRows는 여기에 출력하지 않습니다'라는 말은'numRows' 변수에 전혀 출력이 없거나 아무 것도 얻지 못했습니까? 이런 일이 발생했을 때 표시되는 매개 변수를 포함하는 정확한 URL은 무엇입니까? – Simon

+0

안녕하세요 사이먼, 조금 오해의 소지가 있습니다. 질문을 게시하기 전에 자세한 내용을 추가하려고했습니다. 양식이 표시되면 echo 문이 잘 인쇄되고 url은 edit_captions.php? id = 7 & numRows = 8입니다. 그러나 '변경 사항 저장'버튼을 클릭하면 몇 초 동안 페이지가 다른 페이지로 리디렉션됩니다. 그러면 다른 페이지로 리디렉션되기 전에 편집이 완료되었음을 사용자에게 알립니다. 편집 완료 페이지의 URL은 edit_captions.php이며이 페이지에서 "행 수 :"를 인쇄하지만 $ numRows 변수는 없습니다. 조금 더 명확 해지기를 바랍니다. – YodaWren

답변

3

문제는 "알리는 다른 페이지"입니다. 이 액세스 할 수있는 아무것도 그래서

IT는 edit_captions.php에 GET 변수를 전달하지 않습니다 :) 코드를 말한다

+0

감사합니다. McKracken - 그건 의미가 있습니다. 나는 그 페이지를 무시하는 듯했습니다. 나는 그것에 대해 뭔가 할 수 있는지 보겠습니다. – YodaWren

+0

다른 페이지를 없애고 행 번호가있는 폼에 숨겨진 요소를 넣어 다른 파일로 전달하고 두 폼 모두 동일한 값을 갖고 테스트하여 몇 가지 문제가 해결되었는지 확인하고 싶습니다. 그. 아직도 아직 작동하지 않지만 조금 더 가까이 있다고 생각합니다. – YodaWren

관련 문제