PHP - включить файл php, а также отправить параметры запроса - PullRequest
75 голосов
/ 05 августа 2009

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

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

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

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

Ответы [ 12 ]

194 голосов
/ 05 августа 2009

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

44 голосов
/ 05 августа 2009

Вы можете сделать что-то подобное для достижения желаемого эффекта:

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

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

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

24 голосов
/ 05 августа 2009

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

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

И в "myFile.php":

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

Будет выведено:

Мой идентификатор 12345!

7 голосов
/ 30 июня 2011

Если вы собираетесь написать это включение вручную в файле 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 голосов
/ 25 января 2018

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

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

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

2 голосов
/ 09 июля 2011

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

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

Пользователь нажимает кнопку, которая делает вызов ajax <code>ajax('references.php?count=1'); Затем внутри файла reference.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 для учета определенных вариантов использования. Надеюсь это поможет. Пожалуйста, обратите внимание, что этот код не в своем полном состоянии, но этого должно быть достаточно, чтобы кто-то начал довольно хорошо для своего варианта использования.

2 голосов
/ 21 декабря 2010

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

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

<?php 

$MySomeVAR = $_SESSION['SomeVar'];

?> 

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

<?php

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

?> 

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

0 голосов
/ 17 ноября 2017

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

$myvar = "Hey";

include ("test.php");


echo $GLOBALS["myvar"];
0 голосов
/ 28 мая 2016

Если у кого-то еще есть вопросы по этому вопросу, при использовании include('somepath.php'); и этот файл содержит функцию, там также должна быть объявлена ​​переменная. Включение $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];
    }
?>
0 голосов
/ 28 марта 2016

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

<?php
   header("Location: http://localhost/planner/layout.php?page=dashboard"); 
   exit();
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...