PHP - включить файл php, а также отправить параметры запроса
Я должен показать страницу из моего php-скрипта на определенных условиях. У меня есть условие if, и я выполняю "include", если условие выполнено.
if(condition here){
include "myFile.php?id='$someVar'";
}
Теперь проблема в том, что на сервере есть файл "myFile.php", но я хочу сделать вызов этого файла с аргументом (id), и значение "id" будет меняться при каждом вызове.
Может кто-нибудь подскажите пожалуйста как этого добиться? Благодарю.
14 ответов
Представьте, что это включает в себя то, что оно есть: Копирование и вставка содержимого включенного 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!
Самый простой способ сделать это так:
index.php
<?php $active = 'home'; include 'second.php'; ?>
second.php
<?php echo $active; ?>
Вы можете делиться переменными, так как вы включаете 2 файла, используя "include"
Если вы собираетесь написать это включение вручную в файле 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);
}
?>
Я использую эту переменную конструкцию переменной очень часто.
В файле, который вы включаете, оберните HTML в функцию.
<?php function($myVar) {?>
<div>
<?php echo $myVar; ?>
</div>
<?php } ?>
В файл, в который вы хотите, чтобы он был включен, включите файл и затем вызовите функцию с параметрами, которые вы хотите.
Я знаю, что это было какое-то время, однако я задаюсь вопросом, будет ли лучший способ справиться с этим - использовать переменную (и) сеанса be
В вашем myFile.php у вас будет
<?php
$MySomeVAR = $_SESSION['SomeVar'];
?>
И в вызывающем файле
<?php
session_start();
$_SESSION['SomeVar'] = $SomeVAR;
include('myFile.php');
echo $MySomeVAR;
?>
Обойдёт ли это "предложенную" необходимость функционировать всего процесса?
Я столкнулся с этим при создании форм Ajax, где я включаю несколько наборов полей. Взять, например, заявление о приеме на работу. Я начинаю с одного профессионального набора ссылок, и у меня есть кнопка с надписью "Добавить еще". Это делает ajax-вызов с параметром $ count, чтобы снова включить набор ввода (имя, контакт, телефон и т. Д.). Это прекрасно работает при вызове на первой странице, так как я делаю что-то вроде:
<?php
include('references.php');`
?>
Пользователь нажимает кнопку, которая делает вызов ajax ajax('references.php?count=1');
Тогда внутри файла reference.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, чтобы приспособить определенные варианты использования. Надеюсь это поможет. Пожалуйста, обратите внимание, что этот код не в своем полном состоянии, но этого должно быть достаточно, чтобы кто-нибудь начал довольно хорошо для своего варианта использования.
Ты можешь использовать $GLOBALS
чтобы решить эту проблему, а также.
$myvar = "Hey";
include ("test.php");
echo $GLOBALS["myvar"];
Попробуйте это также
у нас может быть функция внутри включенного файла, тогда мы можем вызвать функцию с параметрами.
наш файл для включения
test.php
<?php
function testWithParams($param1, $param2, $moreParam = ''){
echo $param1;
}
затем мы можем включить файл и вызвать функцию с нашими параметрами в виде переменных или напрямую
index.php
<?php
include('test.php');
$var1 = 'Hi how are you?';
$var2 = [1,2,3,4,5];
testWithParams($var1, $var2);
Если кто-то еще по этому вопросу, при использовании include('somepath.php');
и этот файл содержит функцию, там также должна быть объявлена переменная. Включение $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];
}
?>
Я был в той же ситуации, и мне нужно было добавить страницу, отправив некоторые параметры... Но на самом деле я хотел перенаправить страницу... если это так, код такой:
<?php
header("Location: http://localhost/planner/layout.php?page=dashboard");
exit();
?>
Ваш вопрос не очень понятен, но если вы хотите включить php-файл (добавьте источник этой страницы к себе), вам просто нужно сделать следующее:
if(condition){
$someVar=someValue;
include "myFile.php";
}
Пока переменная с именем $someVar в myFile.php
Сделай это:
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";
}