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.
php
parameters
include
lostInTransit
źródło
źródło
Odpowiedzi:
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).
źródło
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?
źródło
include("myFile.php?id=$somevar");
identyczny?include("myFile.php?...
nie działa zgodnie z przeznaczeniem.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:
źródło
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.
źródło
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.
źródło
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?
źródło
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
Następnie w pliku referencji.php mam coś takiego:ajax('references.php?count=1');
<?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.
źródło
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”
źródło
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
źródło
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(); ?>
źródło
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]; } ?>
źródło
Możesz również użyć
$GLOBALS
do rozwiązania tego problemu.$myvar = "Hey"; include ("test.php"); echo $GLOBALS["myvar"];
źródło
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.php
pliku:$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"; }
źródło