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

Мне нужно показать страницу с моего php script на основе определенных условий. У меня есть условие if, и я делаю "include", если условие выполнено.

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

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

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

Ответ 1

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

Ответ 2

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

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

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

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

Ответ 3

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

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

И в "myFile.php":

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

Это выведет:

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

Ответ 4

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

? >

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

Ответ 5

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

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

<?php 

$MySomeVAR = $_SESSION['SomeVar'];

?> 

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

<?php

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

?> 

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

Ответ 6

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

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

Функция проверяет параметры запроса и автоматически добавляет их в переменную $_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 для размещения определенных вариантов использования. Надеюсь это поможет. Пожалуйста, обратите внимание, что этот код не находится в полном состоянии, но этого должно быть достаточно, чтобы кто-нибудь начал очень хорошо использовать их.

Ответ 7

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

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

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

$myvar = "Hey";

include ("test.php");


echo $GLOBALS["myvar"];

Ответ 11

Сделайте это:

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