PHP: incluye un archivo php y también envía parámetros de consulta

87

Tengo que mostrar una página de mi script php en función de ciertas condiciones. Tengo una condición if y estoy haciendo una "inclusión" si la condición se cumple.

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

Ahora el problema es que el servidor tiene un archivo "myFile.php" pero quiero hacer una llamada a este archivo con un argumento (id) y el valor de "id" cambiará con cada llamada.

¿Alguien puede decirme cómo lograr esto? Gracias.

perdido en el transito
fuente
2
¿Qué hace myFile.php en tu caso? A menos que solicite la inclusión a través de HTTP, no puede agregar parámetros al nombre del archivo, pero podría influir en su comportamiento a través de una variable global de algún tipo.
Paul Dixon

Respuestas:

211

Imagine la inclusión como lo que es: una copia y pegado del contenido del archivo PHP incluido que luego será interpretado. No hay ningún cambio de alcance, por lo que aún puede acceder a $ someVar en el archivo incluido directamente (aunque podría considerar una estructura basada en clases en la que pasa $ someVar como parámetro o hace referencia a algunas variables globales).

Narciso
fuente
1
También tenga en cuenta: $ _GET será el mismo para todos los archivos incluidos. Entonces, si ahí es donde se almacenan los parámetros de consulta, aún los verá. También tenga en cuenta: no es la función, en una clase.
Jonathon
49

Podría hacer algo como esto para lograr el efecto que busca:

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

Sin embargo, parece que estás usando este include como una especie de llamada a función (mencionas llamarlo repetidamente con diferentes argumentos).

En este caso, ¿por qué no convertirla en una función regular, incluida una vez y llamada varias veces?

Paul Dixon
fuente
1
Estoy de acuerdo, esto definitivamente parece que debería ser una llamada de función en lugar de una inclusión.
Brenton Alker
¿Eres codificado e include("myFile.php?id=$somevar");idéntico?
pila
Nota: include("myFile.php?...no funciona según lo previsto.
BananaAcid
29

Una inclusión es como una inserción de código. Obtiene en su código incluido exactamente las mismas variables que tiene en su código base. Entonces puedes hacer esto en tu archivo principal:

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

Y en "myFile.php":

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

Esto dará como resultado:

¡Mi identificación es 12345!

Nicolas
fuente
7

Si va a escribir esto, incluya manualmente en el archivo PHP: la respuesta de Daff es perfecta.

De todos modos, si necesita hacer lo que era la pregunta inicial, aquí hay una pequeña función simple para lograrlo:

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

?>

Estoy usando esta construcción de variable variable muy a menudo.

Nikolay Ivanov
fuente
4

En el archivo que incluye, envuelva el html en una función.

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

En el archivo donde desea que se incluya, incluya el archivo y luego llame a la función con los parámetros que desee.

Mark Buikema
fuente
2

Sé que ha pasado un tiempo, sin embargo, me pregunto si la mejor manera de manejar esto sería utilizar la (s) variable (s) de sesión be

En su myFile.php tendrías

<?php 

$MySomeVAR = $_SESSION['SomeVar'];

?> 

Y en el archivo de llamadas

<?php

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

?> 

¿Eludiría esto la necesidad "sugerida" de Funcionalizar todo el proceso?

Nepa
fuente
Desea convertirlo en una función para no iniciar un montón de solicitudes. El problema no es cómo llevar la información al PHP incluido; el método de OP ya lo logra.
Neel
2

Me encontré con esto al hacer formularios ajax donde incluyo varios conjuntos de campos. Tomando por ejemplo una solicitud de empleo. Empiezo con un conjunto de referencia profesional y tengo un botón que dice "Agregar más". Esto hace una llamada ajax con un parámetro $ count para incluir el conjunto de entrada nuevamente (nombre, contacto, teléfono, etc.). Esto funciona bien en la llamada de la primera página, ya que hago algo como:

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

El usuario presiona un botón que hace una llamada ajax ajax('references.php?count=1'); Luego, dentro del archivo referencias.php tengo algo como:

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

También tengo otras inclusiones dinámicas como esta en todo el sitio que pasan parámetros. El problema ocurre cuando el usuario presiona enviar y hay un error de formulario. Entonces, ahora para no duplicar el código para incluir esos conjuntos de campos adicionales que se incluyeron dinámicamente, creé una función que configurará la inclusión con los parámetros GET apropiados.

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

La función busca parámetros de consulta y los agrega automáticamente a la variable $ _GET. Esto ha funcionado bastante bien para mis casos de uso.

Aquí hay un ejemplo en la página del formulario cuando se llama:

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

Otro ejemplo más de cómo incluir parámetros GET de forma dinámica para adaptarse a determinados casos de uso. Espero que esto ayude. Tenga en cuenta que este código no está en su estado completo, pero esto debería ser suficiente para que cualquiera pueda comenzar bastante bien en su caso de uso.

iLLin
fuente
2

La forma más sencilla de hacer esto es así

index.php

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

second.php

<?php echo $active; ?>

Puede compartir variables ya que está incluyendo 2 archivos usando "incluir"

Kenneth Billones
fuente
0

Tu pregunta no es muy clara, pero si quieres incluir el archivo php (agrega la fuente de esa página al tuyo), solo tienes que hacer lo siguiente:

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

Siempre que la variable se llame $ someVar en myFile.php

afewcc
fuente
0

Yo estaba en la misma situación y necesitaba incluir una página enviando algunos parámetros ... Pero en realidad lo que quería hacer es redirigir la página ... si es tu caso, el código es:

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

Si alguien más está en esta pregunta, cuando se usa include('somepath.php');y ese archivo contiene una función, la var también debe declararse allí. La inclusión de $var=$var;no siempre funcionará. Intente ejecutar estos:

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
fuente
0

También puede utilizar $GLOBALSpara resolver este problema.

$myvar = "Hey";

include ("test.php");


echo $GLOBALS["myvar"];
Dulith De Costa
fuente
-6

Hacer esto:

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

Y agregue a su insert.phparchivo:

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