PHP - включає php-файл, а також надсилає параметри запиту


87

Я повинен показати сторінку з мого php-сценарію на основі певних умов. Я маю умову if і роблю "включити", якщо умова виконана.

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

Тепер проблема полягає в тому, що сервер має файл "myFile.php", але я хочу зателефонувати до цього файлу з аргументом (id), і значення "id" буде змінюватися з кожним викликом.

Хтось може підказати мені, як цього досягти? Дякую.


2
Що насправді робить myFile.php у вашому випадку? Якщо ви не запитуєте включення через HTTP, ви не можете додати параметри до імені файлу, але ви можете вплинути на його поведінку за допомогою глобальної змінної якогось роду.
Пол Діксон,

Відповіді:


211

Уявіть, що включення є таким, як воно є: копія та вставка вмісту включеного файлу PHP, який потім буде інтерпретовано. Зміна зони дії взагалі не змінюється, тому ви все одно можете отримати доступ до $ someVar у включеному файлі безпосередньо (хоча ви можете розглянути структуру на основі класу, де ви передаєте $ someVar як параметр або посилаєтесь на кілька глобальних змінних).


1
Також зверніть увагу: $ _GET буде однаковим для всіх включених файлів. Отже, якщо саме там зберігаються ваші параметри запиту, він все одно їх побачить. Також зверніть увагу: це не функція в класі.
Джонатан,

49

Ви можете зробити щось на зразок цього, щоб досягти того ефекту, який ви шукаєте:

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

Однак схоже, що ви використовуєте цей параметр, як якийсь виклик функції (ви згадуєте про його неодноразове використання з різними аргументами).

Чому б у цьому випадку не перетворити її на звичайну функцію, включену один раз і викликану кілька разів?


1
Я згоден, це точно звучить так, ніби це має бути виклик функції, а не включення.
Brenton Alker

Ви код і 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 вже досягає цього.
Ніл

2

Я зіткнувся з цим, виконуючи форми 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 для врахування певних випадків використання. Сподіваюся, це допомагає. Зверніть увагу, що цей код не в повному стані, але цього повинно бути достатньо, щоб хтось розпочав досить добре для свого випадку використання.


2

Найпростіший спосіб зробити це так

index.php

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

second.php

<?php echo $active; ?>

Ви можете ділитися змінними, оскільки включаєте 2 файли, використовуючи "включити"


0

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

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

Поки змінна має назву $ someVar у myFile.php


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";
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.