PHP - включить файл php, а также отправить параметры запроса

Я должен показать страницу из моего php-скрипта на основе определенных условий. У меня есть условие if, и я делаю «включение», если условие выполнено.

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

Теперь проблема в том, что на сервере есть файл «myFile.php», но я хочу сделать вызов этого файла с аргументом (id), и значение «id» будет меняться при каждом вызове.

Может кто-нибудь, пожалуйста, скажите мне, как этого добиться? Спасибо.


person lostInTransit    schedule 05.08.2009    source источник
comment
Что на самом деле делает myFile.php в вашем случае? Если вы не запрашиваете включение через HTTP, вы не можете добавлять параметры к имени файла, но вы можете влиять на его поведение через какую-то глобальную переменную.   -  person Paul Dixon    schedule 05.08.2009


Ответы (14)


Представьте себе включение таким, какое оно есть: копирование и вставка содержимого включенного PHP-файла, который затем будет интерпретирован. Область действия вообще не меняется, поэтому вы по-прежнему можете напрямую обращаться к $someVar во включенном файле (даже если вы можете рассмотреть структуру на основе классов, в которой вы передаете $someVar в качестве параметра или ссылаетесь на несколько глобальных переменных).

person Daff    schedule 05.08.2009
comment
Также обратите внимание: $_GET будет одинаковым для всех включенных файлов. Так что, если там хранятся ваши параметры запроса, он все равно их увидит. Также обратите внимание: это не функция в классе. - person Jonathon; 27.04.2013

Вы можете сделать что-то подобное, чтобы добиться эффекта, который вам нужен:

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

Однако похоже, что вы используете это включение как какой-то вызов функции (вы упоминаете о многократном вызове с разными аргументами).

В таком случае, почему бы не превратить его в обычную функцию, которая включается один раз и вызывается несколько раз?

person Paul Dixon    schedule 05.08.2009
comment
Я согласен, это определенно звучит так, как будто это должен быть вызов функции, а не включение. - person Brenton Alker; 05.08.2009
comment
Ваш код и include("myFile.php?id=$somevar"); идентичны? - person stack; 28.04.2016
comment
Примечание. include("myFile.php?... не работает должным образом. - person BananaAcid; 19.09.2017

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

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

И в "myFile.php":

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

Это выведет:

My id is 12345 !

person Nicolas    schedule 05.08.2009

Если вы собираетесь написать это включение вручную в файле 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);
}

?>

Я очень часто использую эту конструкцию переменной переменной.

person Nikolay Ivanov    schedule 30.06.2011

В файле, который вы включаете, оберните html в функцию.

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

В файл, в который вы хотите его включить, включите файл, а затем вызовите функцию с нужными параметрами.

person Mark Buikema    schedule 25.01.2018

Самый простой способ сделать это так

index.php

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

второй.php

<?php echo $active; ?>

Вы можете обмениваться переменными, так как вы включаете 2 файла, используя «include»

person Kenneth Billones    schedule 17.11.2019

Я знаю, что это было какое-то время, однако мне интересно, будет ли лучший способ справиться с этим - использовать переменную (переменные) сеанса be

В вашем myFile.php у вас будет

<?php 

$MySomeVAR = $_SESSION['SomeVar'];

?> 

И в вызывающем файле

<?php

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

?> 

Будет ли это обойти «предлагаемую» необходимость функционализировать весь процесс?

person Nepa    schedule 21.12.2010
comment
Вы хотите сделать это функцией, чтобы не инициировать кучу запросов. Проблема не в том, как передать информацию на включенный PHP - метод OP уже достигает этого. - person Neel; 03.04.2016

Я столкнулся с этим при создании форм ajax, где я включаю несколько наборов полей. Возьмем, к примеру, заявление о приеме на работу. Я начинаю с одного набора профессиональных ссылок, и у меня есть кнопка с надписью «Добавить еще». Это делает вызов ajax с параметром $count, чтобы снова включить набор входных данных (имя, контакт, телефон и т. д.). Это отлично работает при первом вызове страницы, когда я делаю что-то вроде:

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

Пользователь нажимает кнопку, которая вызывает ajax-вызов ajax('references.php?count=1'); Затем внутри файла references.php у меня есть что-то вроде:

<?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. Это сработало очень хорошо для моих случаев использования.

Вот пример на странице формы при вызове:

<?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 для определенных вариантов использования. Надеюсь это поможет. Обратите внимание, что этот код не является полным, но этого должно быть достаточно, чтобы любой начал достаточно хорошо для своего варианта использования.

person iLLin    schedule 09.07.2011

Вы также можете использовать $GLOBALS для решения этой проблемы.

$myvar = "Hey";

include ("test.php");


echo $GLOBALS["myvar"];
person Dulith De Costa    schedule 17.11.2017
comment
это сработало. но мне нужно использовать разные значения для включения, что мне делать // - person David Augustus; 20.07.2021

Ваш вопрос не очень ясен, но если вы хотите включить файл php (добавить исходный код этой страницы к себе), вам просто нужно сделать следующее:

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

Пока переменная называется $someVar в файле myFile.php

person afewcc    schedule 05.08.2009

Я был в той же ситуации, и мне нужно было включить страницу, отправив некоторые параметры... Но на самом деле я хотел перенаправить страницу... если это так, код:

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

Если кто-то еще отвечает на этот вопрос, при использовании include('somepath.php'); и этот файл содержит функцию, var также должен быть объявлен там. Включение $var=$var; не всегда будет работать. Попробуйте запустить эти:

один.php:

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

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

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

два.php:

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

Попробуйте также

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

наш файл для включения: 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);
person AbdulAhmad Matin    schedule 04.06.2021

Сделай это:

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";
}
person Jaydip Godhani    schedule 28.04.2015