将值从一个PHP页面传递到另一个PHP页面的问题

时间:2011-05-02 21:54:02

标签: php

我对此很陌生,但我会尽我所能尽力解释我的问题。我有两个文件 - 一个名为edit_captions_form.php,其中包含一个名为edit_form的类,该类列出了要成为表单一部分的元素。元素的数量是动态决定的,它们是使用循环从数据库中添加的。循环计数器是从sql查询返回的行数,并在url中传递。这是代码的相关部分:

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');

第二个文件名为edit_captions.php并创建edit_form的实例,并尝试从表单元素中提取值,并再次使用带有从行数派生的计数器的循环。这是代码的相关部分:

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;

}

现在,如果我将实际行数硬编码为两个循环的计数器,则所有数组元素的值都存储在$elementArray中并且可以检索,因此在这方面一切正常。问题是无论我做什么,edit_captions.php文件中的$ numRows变量都没有值,所以循环不执行我无法获取数据。

我以为我可以访问这个因为我已经使用require_once(edit_captions_form.php)我尝试使用MySQL查询而不是通过$_GET从函数中获取值,我尝试了魔术方法{{1} }和__set(),虽然我并不真正理解我在做什么,这可能是为什么不起作用,我试图访问__get(),好像它是{{1}的变量虽然我不认为这是因为它在函数定义()中。我尝试在definition()之前将它添加为变量,但这打破了整个表单。我也尝试使用$numRows关键字,但这也不起作用。

再次道歉,如果我不能很好地解释这一点,但我想不出更简洁的方式来陈述问题。我一直在努力将这个问题解决三天,并且无法做到。如果有人能够向我解释为什么我无法访问第二个文件中的循环edit_form,我将不胜感激。或者,如果这是不可能的,请让我摆脱痛苦,让我知道!

1 个答案:

答案 0 :(得分:3)

您的问题是“另一页通知”。

它没有将GET变量传递给edit_captions.php,所以它无法访问:)