저는이 기능이 새로 도입되었지만 가능한 한 정확하게 문제를 설명하려고 최선을 다할 것입니다. 두 개의 파일이 있습니다 - 하나는 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
에 액세스 할 수없는 이유를 설명해 주시면 감사하겠습니다. 아니면 그냥 불가능한 일이라면 제 불행에서 벗어나 알려주세요!
'에코 "행의 수 :". $ numRows의; // $ numRows는 여기에 출력하지 않습니다'라는 말은'numRows' 변수에 전혀 출력이 없거나 아무 것도 얻지 못했습니까? 이런 일이 발생했을 때 표시되는 매개 변수를 포함하는 정확한 URL은 무엇입니까? – Simon
안녕하세요 사이먼, 조금 오해의 소지가 있습니다. 질문을 게시하기 전에 자세한 내용을 추가하려고했습니다. 양식이 표시되면 echo 문이 잘 인쇄되고 url은 edit_captions.php? id = 7 & numRows = 8입니다. 그러나 '변경 사항 저장'버튼을 클릭하면 몇 초 동안 페이지가 다른 페이지로 리디렉션됩니다. 그러면 다른 페이지로 리디렉션되기 전에 편집이 완료되었음을 사용자에게 알립니다. 편집 완료 페이지의 URL은 edit_captions.php이며이 페이지에서 "행 수 :"를 인쇄하지만 $ numRows 변수는 없습니다. 조금 더 명확 해지기를 바랍니다. – YodaWren