PHP - Отправка GET-переменных как пути в и включение / требование оператора - PullRequest
4 голосов
/ 19 июня 2011

У меня есть ситуация, когда я хотел бы использовать php-файл «query.php», чтобы посмотреть, принимаете ли значение $_POST или $_GET в качестве запроса MySQL. Это выглядит так:

<?php
//verify data has been sent via POST or GET and set strings
//find supplied table name
if(isset($_POST['tblName'])){
    $strSuppliedTableName = $_POST['tblName'];
}
if(isset($_GET['tblName'])){
    $strSuppliedTableName = $_GET['tblName'];
}
else{
    $strSuppliedTableName = 'roles';
}

//find supplied field name or default to all fields in the table
if(isset($_POST['fieldName'])){
    $strSuppliedFieldName = $_POST['fieldName'];
}
else if(isset($_GET['fieldName'])){
    $strSuppliedFieldName = $_GET['fieldName'];
}
else{
    $strSuppliedFieldName = '*';
}

//query db
$query = 'SELECT ' . $strSuppliedFieldName . ' FROM ' . $strSuppliedTableName;

$results = mysql_query($query) or die(mysql_error());
?>

После этого я хочу включить этот файл «query.php» в другой файл, который будет управлять результатами. Я пытаюсь сделать это как можно более модульным.

<?php
require_once("query.php?tblName=classes");
......... (while loop, yadi yadi

Однако я получаю сообщение об ошибке:

Предупреждение: require_once (query.php? TblName = classes) [function.require-Once]: не удалось открыть поток: нет такого файла или каталога

Не допустимо ли передавать значения GET во включенный файл? PHP не будет обрабатывать это?

Ответы [ 4 ]

6 голосов
/ 19 июня 2011

Вам не нужно передавать переменные способом get или POST, как при включении или требовании файлов, переменные совместно используются файлами, если значения установлены до того, как произойдет включение.

т.е.:

file1.php называется file1.php? Var2 = value2

<?php
$var1 = "value1";
$var2 = $_GET['value'];
include "file2.php";
?>

file2.php:

<?php
echo $var1.' '.$var2;
?>

выведет:

value1 значение2

1 голос
/ 19 июня 2011

правильный способ сделать это - определить ваши данные как переменные в вашем материнском файле, а затем в вашем дочернем файле использовать эти переменные.
в коде, который вы дали парсеру, ищет файл 'query.php? TblName= классы 'и, очевидно, его не существует.

1 голос
/ 19 июня 2011

В качестве ярлыка вы можете использовать $_REQUEST внутри, который является смесью суперглобальных переменных _GET, _POST, _COOKIE и _ENVIRONMENT. То, какие из них входят в него, контролируется настройкой request_order .ini.

В качестве альтернативы, совершенно надежный метод проверки того, какой МЕТОД вы используете $_SERVER['REQUEST_METHOD']. Это значение всегда устанавливается при обработке HTTP-запроса и будет GET, POST, HEAD и т. Д. ... В отличие от проверки наличия поля формы, оно полностью надежно - поле формы может быть не отправлено (флажок не установлен?) , он может быть переименован в HTML, но вы забыли изменить сценарий и т. д ...

Что касается вашего require(), если вы не укажете абсолютный URL (http://...), PHP будет интерпретировать свой аргумент как запрос локального файла и не пропустит его через уровень HTTP. Если у вас нет файла с именем query.php?tblName..., он будет «файл не найден», а функция require () завершится ошибкой.

0 голосов
/ 19 июня 2011

include / require оба принимают имя файла в качестве спецификации, а не URI.PHP не анализирует его как URI, поэтому то, что вы пытаетесь, не сработает.

Лучше настроить объект, который затем можно будет проверить включенным / необходимым файлом.

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