PHP – включить php-файл, а также отправить параметры запроса

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

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

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

Может кто-нибудь, пожалуйста, скажите мне, как это сделать? Благодарю.

Solutions Collecting From Web of "PHP – включить php-файл, а также отправить параметры запроса"

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

Вы могли бы так что-то вроде этого добиться эффекта, который вы после

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

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

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

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

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

И в «myFile.php»:

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

Это приведет к выводу:

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

Если вы собираетесь писать это, включите вручную в файл 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); } 

?>

Я часто использую эту конструкцию переменной переменной.

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

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

 <?php $MySomeVAR = $_SESSION['SomeVar']; ?> 

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

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

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

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

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

Пользователь нажимает кнопку, которая делает ajax-вызов ajax('references.php?count=1'); Тогда внутри файла reference.php у меня есть что-то вроде:

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

У меня также есть другая динамика, которая включает в себя все это на сайте, которые передают параметры. Проблема возникает, когда пользователь нажимает кнопку submit и появляется ошибка формы. Итак, теперь, чтобы не дублировать код, чтобы включить эти дополнительные наборы полей, где они динамически включены, я создал функцию, которая будет настраивать include с соответствующими параметрами 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]); } ?> в <?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 для размещения определенных вариантов использования. Надеюсь это поможет. Обратите внимание, что этот код не находится в полном состоянии, но этого должно быть достаточно, чтобы кто-нибудь начал очень хорошо использовать их.

Ваш вопрос не очень ясен, но если вы хотите включить php-файл (добавьте источник этой страницы в свою), вам просто нужно сделать следующее:

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

Пока переменная называется $ someVar в myFile.php

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

 <?php header("Location: http://localhost/planner/layout.php?page=dashboard"); exit(); ?> 

Если кто-то еще задается этим вопросом, при использовании 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 */ ?> в <?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]; } ?> 

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

 $myvar = "Hey"; include ("test.php"); echo $GLOBALS["myvar"]; 

Сделай это:

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