PHP - inclui um arquivo php e também envia parâmetros de consulta

86

Eu tenho que mostrar uma página do meu script php com base em certas condições. Eu tenho uma condição if e estou fazendo uma "inclusão" se a condição for satisfeita.

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

Agora o problema é que o servidor tem um arquivo "myFile.php" mas eu quero fazer uma chamada para este arquivo com um argumento (id) e o valor de "id" mudará a cada chamada.

Alguém pode me dizer como fazer isso? Obrigado.

perdido em trânsito
fonte
2
O que myFile.php realmente faz no seu caso? A menos que você solicite a inclusão por HTTP, você não pode adicionar parâmetros ao nome do arquivo, mas pode influenciar seu comportamento por meio de uma variável global de algum tipo.
Paul Dixon

Respostas:

210

Imagine o include como o que é: Uma cópia e colagem do conteúdo do arquivo PHP incluído que será interpretado. Não há nenhuma mudança de escopo, então você ainda pode acessar $ someVar no arquivo incluído diretamente (mesmo que você possa considerar uma estrutura baseada em classe onde você passa $ someVar como um parâmetro ou se refere a algumas variáveis ​​globais).

Daff
fonte
1
Observe também: $ _GET será o mesmo para todos os arquivos incluídos. Portanto, se for onde seus parâmetros de consulta estão armazenados, ele ainda os verá. Observe também: não é a função em uma classe.
Jonathon
48

Você poderia fazer algo assim para alcançar o efeito que deseja:

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

No entanto, parece que você está usando este include como algum tipo de chamada de função (você mencionou chamá-lo repetidamente com argumentos diferentes).

Nesse caso, por que não transformá-la em uma função regular, incluída uma vez e chamada várias vezes?

Paul Dixon
fonte
1
Eu concordo, isso definitivamente parece que deveria ser uma chamada de função em vez de um include.
Brenton Alker
Você é codificado e include("myFile.php?id=$somevar");idêntico?
pilha de
Nota: include("myFile.php?...não funciona como pretendido.
BananaAcid
29

Uma inclusão é como uma inserção de código. Você obtém em seu código incluído as mesmas variáveis ​​exatas que tem em seu código base. Portanto, você pode fazer isso em seu arquivo principal:

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

E em "myFile.php":

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

Isso resultará em:

Minha id é 12345!

Nicolas
fonte
8

Se você for escrever este include manualmente no arquivo PHP - a resposta de Daff é perfeita.

De qualquer forma, se você precisa fazer o que era a pergunta inicial, aqui está uma pequena função simples para conseguir isso:

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

?>

Estou usando essa construção de variável variável com muita frequência.

Nikolay Ivanov
fonte
4

No arquivo que você incluir, envolva o html em uma função.

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

No arquivo onde deseja incluí-lo, inclua o arquivo e chame a função com os parâmetros desejados.

Mark Buikema
fonte
2

Eu sei que já faz um tempo, no entanto, estou me perguntando se a melhor maneira de lidar com isso seria utilizar a (s) variável (is) de sessão

Em seu myFile.php você teria

<?php 

$MySomeVAR = $_SESSION['SomeVar'];

?> 

E no arquivo de chamada

<?php

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

?> 

Isso contornaria a necessidade "sugerida" de Funcionalizar todo o processo?

Nepa
fonte
Você quer torná-lo uma função para não iniciar um monte de solicitações. O problema não é como obter as informações para o PHP incluído - o método do OP já consegue isso.
Neel
2

Eu encontrei isso ao fazer formulários Ajax onde incluo vários conjuntos de campos. Tomemos, por exemplo, um pedido de emprego. Eu começo com um conjunto de referência profissional e tenho um botão que diz "Adicionar mais". Isso faz uma chamada ajax com um parâmetro $ count para incluir o conjunto de entrada novamente (nome, contato, telefone etc.). Isso funciona bem na chamada de primeira página, pois faço algo como:

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

O usuário pressiona um botão que faz uma chamada ajax. ajax('references.php?count=1'); Então, dentro do arquivo reference.php, eu tenho algo como:

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

Também tenho outras inclusões dinâmicas como essa em todo o site que passam parâmetros. O problema ocorre quando o usuário pressiona enviar e ocorre um erro de formulário. Portanto, agora, para não duplicar o código para incluir os conjuntos de campos extras que foram incluídos dinamicamente, criei uma função que configurará a inclusão com os parâmetros GET apropriados.

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

A função verifica os parâmetros de consulta e os adiciona automaticamente à variável $ _GET. Isso funcionou muito bem para meus casos de uso.

Aqui está um exemplo na página do formulário quando chamado:

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

Apenas outro exemplo de inclusão de parâmetros GET dinamicamente para acomodar certos casos de uso. Espero que isto ajude. Observe que este código não está em seu estado completo, mas isso deve ser o suficiente para que qualquer pessoa comece bem em seu caso de uso.

ILIN
fonte
0

Sua pergunta não está muito clara, mas se você quiser incluir o arquivo php (adicionar a fonte dessa página à sua), você apenas tem que fazer o seguinte:

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

Contanto que a variável seja denominada $ someVar em meuArquivo.php

afewcc
fonte
0

Eu estava na mesma situação e precisava incluir uma página enviando alguns parâmetros ... Mas na verdade o que eu queria fazer é redirecionar a página ... se for o caso para você, o código é:

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

Se alguém mais estiver nessa questão, ao usar include('somepath.php');e esse arquivo contém uma função, o var deve ser declarado lá também. A inclusão de $var=$var;nem sempre funciona. Tente executar estes:

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];
    }
?>
ultracasual
fonte
0

Você também pode usar $GLOBALSpara resolver esse problema.

$myvar = "Hey";

include ("test.php");


echo $GLOBALS["myvar"];
Dulith De Costa
fonte
0

A maneira mais simples de fazer isso é assim

index.php

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

second.php

<?php echo $active; ?>

Você pode compartilhar variáveis, pois está incluindo 2 arquivos usando "incluir"

Kenneth Billones
fonte
-6

Faça isso:

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

E adicione ao seu insert.phparquivo:

$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
fonte