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

时间:2009-08-05 09:22:34

标签: php parameters include

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

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

现在问题是服务器有一个文件“myFile.php”,但我想用一个参数(id)调用这个文件,“id”的值会随着每次调用而改变。

有人可以告诉我如何实现这个目标吗? 感谢。

14 个答案:

答案 0 :(得分:194)

想象一下包含是什么:副本&粘贴包含的PHP文件的内容然后将被解释。根本没有范围更改,因此您仍然可以直接访问包含文件中的$ someVar(即使您可能考虑将基于类的结构传递给$ someVar作为参数或引用一些全局变量)。

答案 1 :(得分:44)

你可以做这样的事情来达到你想要的效果:

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

然而,听起来你正在使用这种包括像某种函数调用(你提到用不同的参数重复调用它)。

在这种情况下,为什么不将它变成常规函数,包含一次并多次调用?

答案 2 :(得分:24)

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

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

在“myFile.php”中:

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

这将输出:

  

我的身份证是12345!

答案 3 :(得分: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);
}

&GT;

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

答案 4 :(得分:4)

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

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

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

答案 5 :(得分:2)

我知道这已经有一段时间了,但是,Iam想知道处理这个的最好方法是使用会话变量

在你的myFile.php中你有

<?php 

$MySomeVAR = $_SESSION['SomeVar'];

?> 

在调用文件中

<?php

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

?> 

这是否会绕过“建议”需要实现整个过程?

答案 6 :(得分:2)

在进行包含多个字段集的ajax表单时,我遇到了这个问题。以就业申请为例。我从一个专业的参考集开始,我有一个按钮,上面写着“添加更多”。这会使用$ count参数进行ajax调用以再次包含输入集(名称,联系人,电话......等)这在第一页调用时工作正常,因为我执行以下操作:

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

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

ajax('references.php?count=1');

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

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

该函数检查查询参数,并自动将它们添加到$ _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参数的示例,以适应某些用例。希望这可以帮助。请注意,此代码不是完整的状态,但这应该足以让任何人开始使用它们的用例。

答案 7 :(得分:0)

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

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

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

答案 8 :(得分:0)

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

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

答案 9 :(得分:0)

如果有其他人在这个问题上,当使用$var=$var;并且该文件包含一个函数时,也必须在那里声明var。包含<?php $vars = array('stack','exchange','.com'); include('two.php'); /*----- "paste" contents of two.php */ testFunction(); /*----- execute imported function */ ?> 并不总是有效。尝试运行这些:

one.php:

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

two.php:

{{1}}

答案 10 :(得分:0)

您也可以使用$GLOBALS来解决此问题。

$myvar = "Hey";

include ("test.php");


echo $GLOBALS["myvar"];

答案 11 :(得分:0)

最简单的方法是这样

index.php

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

second.php

<?php echo $active; ?>

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

答案 12 :(得分:0)

也试试这个

我们可以在包含的文件中包含一个函数,然后我们可以使用参数调用该函数。

我们的包含文件是 test.php

<?php
function testWithParams($param1, $param2, $moreParam = ''){
    echo $param1;
}

然后我们可以包含文件并使用我们的参数作为变量或直接调用函数

index.php

<?php
include('test.php');
$var1 = 'Hi how are you?';
$var2 = [1,2,3,4,5];
testWithParams($var1, $var2);

答案 13 :(得分:-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";
}