Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP - Sending GET variables as a Path in and Include/Require Statement

I have a situation where I would like to use a php file "query.php" to look take either a $_POST or $_GET value as the MySQL query. It looks like this:

<?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());
?>

Following that, I want to include this file "query.php" in another file that will manage the results. I'm trying to make this as modular as possible.

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

However, I recieve an error:

Warning: require_once(query.php?tblName=classes) [function.require-once]: failed to open stream: No such file or directory

Is it not acceptable to pass GET values to your included file? PHP won't process this?

like image 386
netpoetica Avatar asked Feb 23 '23 20:02

netpoetica


2 Answers

You do not need to pass variables in a get or POST like way when including or requiring files, the variables are shared between the files, as long as the values are set before the including happens.

i.e.:

file1.php called as file1.php?var2=value2

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

file2.php:

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

will output:

value1 value2

like image 164
Sander Avatar answered Feb 26 '23 21:02

Sander


As a shortcut, you can use $_REQUEST inside, which is an amalgam of the _GET, _POST, _COOKIE, and _ENVIRONMENT superglobals. Exactyl which ones go into it is under control of the request_order .ini setting.

Alternatively, an utterly reliable method to check which METHOD you're handling is $_SERVER['REQUEST_METHOD']. This value is always set when handling an HTTP request, and will be GET, POST, HEAD, etc... Unlike checking for the presence of a form field, it's utterly dependable - the form field may not be submitted (unchecked checkbox?), it may be renamed in the HTML but you forget to change the script, etc...

As for your require(), unless you specify an absolute url (http://...), PHP will interpret its argument as a request for a local file, and will not pass it through the HTTP layer. Unless you have a file named query.php?tblName..., it'll be "file not found" and the require() fails.

like image 29
Marc B Avatar answered Feb 26 '23 20:02

Marc B