PHP-包含一个php文件并发送查询参数


87

我必须根据某些条件从我的php脚本显示一个页面。我有一个if条件,如果条件满足,我正在做一个“ include”。

if(condition here){
  include "myFile.php?id='$someVar'";
}

现在的问题是服务器上有一个文件“ myFile.php”,但我想用一个参数(id)对此文件进行调用,并且每次调用时“ id”的值都会改变。

有人可以告诉我如何实现吗?谢谢。


2
在您的情况下,myFile.php实际上会做什么?除非您通过HTTP请求包含,否则您不能在文件名中添加参数,但是可以通过某种全局变量来影响其行为。
Paul Dixon

Answers:


211

想象一下include是什么:复制并粘贴包含的PHP文件内容,然后将其解释。范围没有任何变化,因此您仍然可以直接在包含的文件中访问$ someVar(即使您可能考虑了基于类的结构,在该结构中您将$ someVar作为参数传递或引用了一些全局变量)。


1
另请注意:$ _GET对于所有包含的文件都是相同的。因此,如果这是您的查询参数存储的位置,它将仍然看到它们。还要注意:它不是类中的函数。
Jonathon

49

您可以执行以下操作来达到您想要的效果:

$_GET['id']=$somevar;
include('myFile.php');

但是,听起来好像您正在使用这个include就像某种函数调用(您提到使用不同的参数反复调用它)。

在这种情况下,为什么不将其转换为包含一次并多次调用的常规函数​​呢?


1
我同意,这听起来似乎应该是函数调用而不是包含。
布伦顿·阿尔克

您的代码是否include("myFile.php?id=$somevar");相同?
堆叠

注意:include("myFile.php?...无法正常工作。
BananaAcid

29

包含就像插入代码一样。您可以在包含的代码中获得与基本代码完全相同的变量。因此,您可以在主文件中执行此操作:

<?
    if ($condition == true)
    {
        $id = 12345;
        include 'myFile.php';
    }
?>

在“ myFile.php”中:

<?
    echo 'My id is : ' . $id . '!';
?>

这将输出:

我的身份证是12345!


7

如果要在PHP文件中手动编写此包含文件-Daff的答案很完美。

无论如何,如果您需要做的是最初的问题,这里有一个简单的函数可以实现:

<?php
// Include php file from string with GET parameters
function include_get($phpinclude)
{
    // find ? if available
    $pos_incl = strpos($phpinclude, '?');
    if ($pos_incl !== FALSE)
    {
        // divide the string in two part, before ? and after
        // after ? - the query string
        $qry_string = substr($phpinclude, $pos_incl+1);
        // before ? - the real name of the file to be included
        $phpinclude = substr($phpinclude, 0, $pos_incl);
        // transform to array with & as divisor
        $arr_qstr = explode('&',$qry_string);
        // in $arr_qstr you should have a result like this:
        //   ('id=123', 'active=no', ...)
        foreach ($arr_qstr as $param_value) {
            // for each element in above array, split to variable name and its value
            list($qstr_name, $qstr_value) = explode('=', $param_value);
            // $qstr_name will hold the name of the variable we need - 'id', 'active', ...
            // $qstr_value - the corresponding value
            // $$qstr_name - this construction creates variable variable
            // this means from variable $qstr_name = 'id', adding another $ sign in front you will receive variable $id
            // the second iteration will give you variable $active and so on
            $$qstr_name = $qstr_value;
        }
    }
    // now it's time to include the real php file
    // all necessary variables are already defined and will be in the same scope of included file
    include($phpinclude);
}

?>

我经常使用这种变量变量构造。


4

在您包含的文件中,将html包装在一个函数中。

<?php function($myVar) {?>
    <div>
        <?php echo $myVar; ?>
    </div>
<?php } ?>

在要包含它的文件中,包含该文件,然后使用所需的参数调用该函数。


2

我知道已经有一段时间了,但是,我想知道处理此问题的最佳方法是否是利用be会话变量

在您的myFile.php中,您将拥有

<?php 

$MySomeVAR = $_SESSION['SomeVar'];

?> 

并在调用文件中

<?php

session_start(); 
$_SESSION['SomeVar'] = $SomeVAR;
include('myFile.php');
echo $MySomeVAR;

?> 

这样是否可以绕过“建议的”功能使整个过程发挥作用?


您想使其成为一个函数,这样就不会启动一堆请求。问题不在于如何将信息获取到随附的PHP中-OP的方法已经实现了这一点。
Neel

2

我在做包含多个字段集的ajax表单时遇到了这种情况。以就业申请为例。我从一个专业参考集开始,我有一个显示“添加更多”的按钮。这会使用$ count参数进行ajax调用,以再次包含输入集(姓名,联系人,电话等)。这在首页调用时效果很好,因为我执行以下操作:

<?php 
include('references.php');`
?>

用户按下一个进行ajax调用的按钮,ajax('references.php?count=1'); 然后在references.php文件中,我有类似以下内容:

<?php
$count = isset($_GET['count']) ? $_GET['count'] : 0;
?>

在整个站点中,我还具有其他通过参数传递的动态包含。当用户按下Submit并出现表单错误时,就会发生此问题。因此,现在为了不重复代码以包含那些动态包含的额外字段集,我创建了一个函数,该函数将使用适当的GET参数设置包含。

<?php

function include_get_params($file) {
  $parts = explode('?', $file);
  if (isset($parts[1])) {
    parse_str($parts[1], $output);
    foreach ($output as $key => $value) {
      $_GET[$key] = $value;
    }
  }
  include($parts[0]);
}
?>

该函数检查查询参数,并将其自动添加到$ _GET变量中。对于我的用例来说,这已经相当不错了。

这是表单页面在调用时的示例:

<?php
// We check for a total of 12
for ($i=0; $i<12; $i++) {
  if (isset($_POST['references_name_'.$i]) && !empty($_POST['references_name_'.$i])) {
   include_get_params(DIR .'references.php?count='. $i);
 } else {
   break;
 }
}
?>

另一个动态包含GET参数以适应某些用例的示例。希望这可以帮助。请注意,该代码尚未处于完整状态,但这足以使任何人都能很好地开始使用他们的用例。


2

最简单的方法是这样的

index.php

<?php $active = 'home'; include 'second.php'; ?>

second.php

<?php echo $active; ?>

您可以共享变量,因为您要使用“ include”包含2个文件


0

您的问题不是很清楚,但是如果要包含php文件(将该页面的源添加到您的文件中),则只需执行以下操作:

if(condition){
    $someVar=someValue;
    include "myFile.php";
}

只要变量在myFile.php中名为$ someVar


0

我处在相同的情况下,我需要通过发送一些参数来包含一个页面...但是实际上,我想做的是重定向页面...如果是这种情况,代码是:

<?php
   header("Location: http://localhost/planner/layout.php?page=dashboard"); 
   exit();
?>

0

如果其他人对此问题有疑问,则在使用时include('somepath.php');该文件包含一个函数,也必须在其中声明var。包含的$var=$var;内容并非总是有效。尝试运行以下命令:

one.php:

<?php
    $vars = array('stack','exchange','.com');

    include('two.php'); /*----- "paste" contents of two.php */

    testFunction(); /*----- execute imported function */
?>

two.php:

<?php
    function testFunction(){ 
        global $vars; /*----- vars declared inside func! */
        echo $vars[0].$vars[1].$vars[2];
    }
?>


-6

做这个:

NSString *lname = [NSString stringWithFormat:@"var=%@",tname.text];
NSString *lpassword = [NSString stringWithFormat:@"var=%@",tpassword.text];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:@"http://localhost/Merge/AddClient.php"]];
[request setHTTPMethod:@"POST"];
[request setValue:@"insert" forHTTPHeaderField:@"METHOD"];

NSString *postString = [NSString stringWithFormat:@"name=%@&password=%@",lname,lpassword];
NSString *clearpost = [postString stringByReplacingOccurrencesOfString:@"var=" withString:@""];
NSLog(@"%@",clearpost);
[request setHTTPBody:[clearpost dataUsingEncoding:NSUTF8StringEncoding]];
[request setValue:clearpost forHTTPHeaderField:@"Content-Length"];
[NSURLConnection connectionWithRequest:request delegate:self];
NSLog(@"%@",request);

并添加到您的insert.php文件中:

$name = $_POST['name'];
$password = $_POST['password'];

$con = mysql_connect('localhost','root','password');
$db = mysql_select_db('sample',$con);


$sql = "INSERT INTO authenticate(name,password) VALUES('$name','$password')";

$res = mysql_query($sql,$con) or die(mysql_error());

if ($res) {
    echo "success" ;
} else {
    echo "faild";
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.