PHP $ _GET и $ _POST возвращают пустые массивы - пытаясь разбить данные SQL на страницы - PullRequest
0 голосов
/ 25 марта 2012

Я настроил следующее:

  1. Класс базы данных ($ db)
  2. Класс пагинации ($ paginator)

Я пытаюсьнаписать основную систему, чтобы позволить мне администрировать страницы.У меня есть страница «page_manager.php», в которую я включаю мой класс базы данных (database.php) и мой класс пагинации (paginate.php).

В моем классе пагинации есть функция, которая повторяет мой SQLданные.Я предложил способ отображения элемента HTML

Я добавилсобытие onChange для элемента

. Затем в URL добавляется переменная $ _GET, поэтому URL становится «... /? Pagenumber_form = X».Однако, когда я пытаюсь извлечь это значение из URL, $ _GET ['pagenumber_form'] пусто.

Некоторый код:

<span style='font-family: tahoma; font-size: 10pt;'>Page #</span>
    <select id="page_number_selection" 
    onchange='javascript: document.getElementById("pagenumber_form").value = this.value;
                          document.getElementById("pagenumber").submit();'>
    <?php
        for($i = 1; $i <= $this->num_pages; $i++)
            echo"<option id='" . $i . "'>" . $i . "</option>";      
    ?>
    </select>

<form name="pagenumber" id="pagenumber" action="" method="get">
    <input type="text" name="pagenumber_form" id="pagenumber_form" />
</form>

Итак, я попытался использовать$ _POST, но происходит то же самое.Я хочу использовать $ _GET по нескольким причинам: легче увидеть, что происходит с моими значениями, и данные, которые я использую, не должны быть безопасными.

Напомним: $ _GETпеременная добавляется в URL, когда я изменяю элемент

$page_number = $_GET['pagenumber_form'];

... Я получаю значение NULL.: - (

Кто-нибудь может мне помочь, пожалуйста? Спасибо.

РЕДАКТИРОВАТЬ :

Я только что сделал открытие. Если я переедумой print_r ($ _ GET) на мою главную страницу индекса, тогда суперглобальные значения возвращаются, как и ожидалось. Моя структура сайта выглядит следующим образом:

index.php - кнопки JavaScript используют HTTP-запросы AJAX для включения «responseText» в качестве.innerHTML моего основного

. «responseText» - это содержимое самой страницы, в данном случае page_manager.php, которая, в свою очередь, включает pagination.php.

Другими словами, мой сайтпостроен на PHP включает, который, кажется, не совместим с суперглобалами HTTP.

Есть идеи, как мне обойти эту проблему? Спасибо: -).

+ ------------------------------------------------------------------ +

Я не могу отвечать на свои собственные сообщения, поэтому:

Проблема не решена, но была решена.

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

Таким образом, я перестал использовать AJAX для своего сайта и просто использую старый добрый PHP.Я не знаю достаточно, чтобы продолжать использовать запросы AJAX, так что это конец этой проблемы.

Спасибо тем, кто ответил.

Ответы [ 3 ]

0 голосов
/ 25 марта 2012

Вам нужно повторно передать суперглобальные вызовы AJAX. Поэтому, если вы хотите сделать запрос на pagination.php, вам нужно сделать это на pagination.php?pagenumber_form=<?php echo $_GET['pagenumber_form']; ?>.

0 голосов
/ 25 марта 2012

Включенные файлы могут обращаться к суперглобалам просто отлично (что делает их супер). Что нельзя сделать, так это получить доступ к переменным из одного запроса в другом. Не совсем понятно, что делает ваш код (поскольку вопрос не включает в себя правильный минимальный тестовый пример - полный, сжатый, репрезентативный образец), но похоже, что загрузка одной страницы включает в себя несколько запросы, и только первый из них получает данные формы. Каждый AJAX-запрос включает в себя отдельный HTTP-запрос, и (поскольку предполагается, что HTTP не имеет состояния) имеет разные данные запроса, поэтому любой запрос, который явно не передан данным, не будет иметь к нему доступа. После обработки запроса все данные, к которым скрипт имеет доступ, отбрасываются. Вот почему для того, чтобы данные существовали в разных запросах, вам нужна некоторая форма персистентности, например, сеансы (с которыми вам следует быть осторожными, чтобы не нарушить модель HTTP без сохранения состояния) или базы данных.

Некоторые трудности могут заключаться в путанице относительно того, что происходит на стороне сервера, что происходит на стороне клиента, что происходит между ними и в каком порядке все это происходит. Прежде чем идти дальше, ознакомьтесь с HTTP (веб-поиск должен выявить бесчисленные документы по этой теме). Вы можете использовать отладчики (например, Firebug, XDebug + клиент , Wireshark, Live HTTP Headers ) для просмотра того, что происходит, как это происходит.

0 голосов
/ 25 марта 2012

соответствующее значение добавляется в URL как: "... / pagenumber_form = X

Возможно, вы захотите попробовать

.../?pagenumber_form=X
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...