Проблема передачи значения с одной страницы PHP на другую

#php

#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 = amp; $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[] = amp;$mform->createElement('submit', 'submitbutton', get_string('savechanges'));
      $buttonarray[] = amp;$mform->createElement('reset', 'resetbutton', get_string('revert'));
      $buttonarray[] = amp;$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 , я пробовал волшебные методы __set() и __get() , хотя я действительно не понимал, что я делаю, так что, возможно, поэтому это не сработало, я попытался получить доступ, $numRows как если бы это была переменная edit_form класса, хотя я не думаю, что это потому, что это в определении функции (). Я попытался добавить его в качестве переменной перед definition (), но это нарушило всю форму. Я также пытался использовать global ключевое слово, но это тоже не сработало.

Опять же, прошу прощения, если я не очень хорошо это объясняю, но я не могу придумать более краткого способа изложения проблемы. Я пытался разобраться с этим в течение трех дней, но так и не смог этого сделать. Я был бы признателен, если бы кто-нибудь мог, пожалуйста, объяснить мне, почему я не могу получить доступ $numRows к циклу во втором файле. Или, если это просто невозможно, пожалуйста, избавьте меня от моих страданий и дайте мне знать!

Комментарии:

1. То, что написано в вашем коде, echo " the number of rows: " .$numRows; //$numRows doesn't print here означает ли это, что вы вообще не получаете выходных данных или просто ничего в $numRows переменной? Какой точный URL, включая параметры, отображается, когда это происходит?

2. Привет, Саймон, извините, это немного вводит в заблуждение, и я хотел добавить больше деталей, прежде чем публиковать вопрос. При отображении формы оператор echo печатается нормально, а URL-адрес edit_captions.php?id=7 amp;numRows = 8. Однако, когда я нажимаю кнопку «Сохранить изменения», страница перенаправляется на несколько секунд на другую страницу, которая просто информирует пользователя о том, что редактирование завершено, прежде чем перенаправлять на другую страницу. URL-адрес на странице редактирования завершения является edit_captions.php и на этой странице выводится «количество строк: «, но в переменной $ numRows ничего нет. Я надеюсь, что это немного понятнее.

Ответ №1:

Ваша проблема заключается в «другой странице, которая информирует».

Это не передача переменных GET в edit_captions.php таким образом, нет ничего, к чему он может получить доступ 🙂

Комментарии:

1. Спасибо McKracken — это имеет смысл, я вроде как игнорировал эту страницу. Я посмотрю, смогу ли я что-нибудь с этим сделать.

2. Я избавился от другой страницы, а также поместил скрытый элемент в форму с номером строки для передачи в другой файл и проверил, что обе формы имеют одинаковое значение, и таким образом, некоторые проблемы решены, и я хотел сказать спасибо за это. Все еще не получилось, но я думаю, что я немного ближе.