PHP - dołącz plik php, a także wyślij parametry zapytania

87

Muszę wyświetlić stronę z mojego skryptu php na podstawie określonych warunków. Mam warunek if i wykonuję „włączanie”, jeśli warunek jest spełniony.

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

Teraz problem polega na tym, że serwer ma plik „myFile.php”, ale chcę wywołać ten plik z argumentem (id), a wartość „id” będzie się zmieniać przy każdym wywołaniu.

Czy ktoś może mi powiedzieć, jak to osiągnąć? Dzięki.

lostInTransit
źródło
2
Co tak naprawdę robi myFile.php w Twoim przypadku? O ile nie zażądasz dołączenia przez HTTP, nie możesz dodać parametrów do nazwy pliku, ale możesz wpłynąć na jego zachowanie za pomocą pewnego rodzaju zmiennej globalnej.
Paul Dixon

Odpowiedzi:

211

Wyobraź sobie, że dołączenie jest tym, czym jest: skopiuj i wklej zawartość dołączonego pliku PHP, który zostanie następnie zinterpretowany. Nie ma żadnej zmiany zakresu, więc nadal możesz uzyskać bezpośredni dostęp do $ someVar w dołączonym pliku (nawet jeśli możesz rozważyć strukturę opartą na klasach, w której podajesz $ someVar jako parametr lub odwołujesz się do kilku zmiennych globalnych).

Daff
źródło
1
Uwaga: $ _GET będzie takie samo dla wszystkich dołączonych plików. Więc jeśli to jest miejsce, w którym przechowywane są parametry zapytania, nadal je zobaczy. Uwaga: to nie jest funkcja w klasie.
Jonathon
49

Możesz zrobić coś takiego, aby osiągnąć pożądany efekt:

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

Jednak wygląda na to, że używasz tego include jak jakiegoś rodzaju wywołania funkcji (wspominasz o jej wielokrotnym wywoływaniu z różnymi argumentami).

W takim razie dlaczego nie zamienić go w zwykłą funkcję, zawartą raz i wywoływaną wielokrotnie?

Paul Dixon
źródło
1
Zgadzam się, to zdecydowanie brzmi tak, jakby to było wywołanie funkcji zamiast dołączenia.
Brenton Alker
Czy kodujesz i jesteś include("myFile.php?id=$somevar");identyczny?
stos
Uwaga: include("myFile.php?...nie działa zgodnie z przeznaczeniem.
BananaAcid
29

Dołączanie jest jak wstawianie kodu. W dołączonym kodzie otrzymujesz dokładnie te same zmienne, które masz w kodzie podstawowym. Możesz więc zrobić to w swoim głównym pliku:

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

A w „myFile.php”:

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

Spowoduje to:

Mój identyfikator to 12345!

Nicolas
źródło
7

Jeśli masz zamiar napisać to dołącz ręcznie do pliku PHP - odpowiedź Daffa jest idealna.

W każdym razie, jeśli musisz zrobić to, co było początkowym pytaniem, oto mała prosta funkcja, aby to osiągnąć:

<?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);
}

?>

Bardzo często używam tej zmiennej konstrukcji zmiennej.

Nikolay Ivanov
źródło
4

W dołączanym pliku zawiń kod HTML w funkcję.

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

W pliku, w którym ma być uwzględniony, umieść plik, a następnie wywołaj funkcję z żądanymi parametrami.

Mark Buikema
źródło
2

Wiem, że minęło trochę czasu, jednak zastanawiam się, czy najlepszym sposobem rozwiązania tego problemu byłoby wykorzystanie zmiennych be session ()

W swoim myFile.php miałbyś

<?php 

$MySomeVAR = $_SESSION['SomeVar'];

?> 

I w pliku dzwoniącym

<?php

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

?> 

Czy pozwoliłoby to obejść „sugerowaną” potrzebę Funkcjonowania całego procesu?

Nepa
źródło
Chcesz, aby była to funkcja, aby nie inicjować wielu żądań. Problem nie polega na tym, jak przesłać informacje do dołączonego PHP - metoda OP już to osiąga.
Neel
2

Natknąłem się na to podczas tworzenia formularzy Ajax, w których dołączam wiele zestawów pól. Weźmy na przykład podanie o pracę. Zaczynam od jednego profesjonalnego zestawu referencyjnego i mam przycisk z napisem „Dodaj więcej”. Wykonuje wywołanie ajax z parametrem $ count, aby ponownie dołączyć zestaw danych wejściowych (imię i nazwisko, kontakt, telefon itp.). Działa to dobrze przy wywołaniu pierwszej strony, ponieważ robię coś takiego:

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

Użytkownik naciska przycisk wywołujący wywołanie Ajax ajax('references.php?count=1'); Następnie w pliku referencji.php mam coś takiego:

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

W całej witrynie mam też inne dynamiczne dołączenia, które przekazują parametry. Problem występuje, gdy użytkownik naciśnie przycisk Prześlij i wystąpi błąd formularza. Więc teraz, aby nie powielać kodu w celu uwzględnienia tych dodatkowych zestawów pól, które były dołączane dynamicznie, utworzyłem funkcję, która skonfiguruje dołączenie z odpowiednimi parametrami 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]);
}
?>

Funkcja sprawdza parametry zapytania i automatycznie dodaje je do zmiennej $ _GET. To zadziałało całkiem nieźle w moich przypadkach użycia.

Oto przykład na stronie formularza po wywołaniu:

<?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;
 }
}
?>

Kolejny przykład dynamicznego włączania parametrów GET w celu dostosowania do niektórych przypadków użycia. Mam nadzieję że to pomoże. Należy pamiętać, że ten kod nie jest w pełnym stanie, ale powinno to wystarczyć, aby każdy mógł zacząć całkiem dobrze w swoim przypadku użycia.

iLLin
źródło
2

Najprościej można to zrobić w ten sposób

index.php

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

second.php

<?php echo $active; ?>

Możesz udostępniać zmienne, ponieważ dołączasz 2 pliki za pomocą „dołączania”

Kenneth Billones
źródło
0

Twoje pytanie nie jest zbyt jasne, ale jeśli chcesz dołączyć plik php (dodaj źródło tej strony do swojego), wystarczy wykonać następujące czynności:

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

Dopóki zmienna nosi nazwę $ someVar w pliku myFile.php

afewcc
źródło
0

Byłem w tej samej sytuacji i musiałem dołączyć stronę, wysyłając kilka parametrów ... Ale w rzeczywistości to, co chciałem zrobić, to przekierować stronę ... jeśli tak jest w Twoim przypadku, kod to:

<?php
   header("Location: http://localhost/planner/layout.php?page=dashboard"); 
   exit();
?>
hackick7
źródło
0

Jeśli ktoś inny jest w tej kwestii, kiedy używa, include('somepath.php');a ten plik zawiera funkcję, var musi być tam również zadeklarowany. Włączenie$var=$var; nie zawsze będzie działać. Spróbuj uruchomić te:

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];
    }
?>
ultrasualny
źródło
0

Możesz również użyć $GLOBALSdo rozwiązania tego problemu.

$myvar = "Hey";

include ("test.php");


echo $GLOBALS["myvar"];
Dulith De Costa
źródło
-6

Zrób to:

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);

I dodaj do swojego insert.phppliku:

$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";
}
Jaydip Godhani
źródło