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.