2009-08-05 8 views
67

Tengo que mostrar una página de mi script php basado en ciertas condiciones. Tengo una condición if y estoy haciendo un "incluir" si la condición está satisfecha.PHP - incluye un archivo php y también envía parámetros de consulta

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.

+1

¿Qué hace myFile.php en realidad en su caso? A menos que solicite incluir por 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. –

Respuesta

178

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

+0

nice answer Daff intenté votar pero no puedo porque sigo siendo nuevo en stack over flow.com –

+4

@hjmelda He votado por ti :) – Shaokan

+1

También ten en cuenta que $ _GET será el mismo para todos los archivos incluidos. Entonces, si es allí 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

37

Se podía así que algo como esto para lograr el efecto deseado

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

Sin embargo, parece que usted está usando este incluye como una especie de llamada de función (usted menciona llamándolo repetidamente con diferentes argumentos) .

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

+1

Estoy de acuerdo, esto definitivamente parece que debería ser una llamada de función en lugar de una inclusión. –

+0

¿Tiene código y 'include (" myFile.php? Id = $ somevar ");' idéntico? – stack

+0

Nota: 'include (" myFile.php? ... 'no funciona como estaba previsto. – BananaAcid

0

Su pregunta no es muy clara, pero si quieres incluyen el archivo php (añadir la fuente de esa página a la suya), sólo hay que hacer lo siguiente:

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

Mientras como la variable se llama $ someVar en myFile.php

21

Una inclusión es como una inserción de código. Obtienes en tu código incluido exactamente las mismas variables que tienes en tu código base. Así que usted puede hacer esto en su archivo principal:

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

Y en "myFile.php": salida

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

Esta voluntad:

Mi id es 12345!

+11

etiquetas ASP? Realmente? –

+0

Wow, no sé cómo terminé cometiendo ese error ... No lo he tocado ¡ASP en absoluto, en ese siglo! Reparar esto en un segundo. – Nicolas

+1

Bueno, PHP soporta etiquetas ASP así que es posible :). – rix0rrr

2

Sé que esto ha sido un tiempo, sin embargo, Iam preguntando si la mejor manera de manejar esto sería utilizar la variable de sesión sea (s)

En su myFile.php que tendría

<?php 

$MySomeVAR = $_SESSION['SomeVar']; 

?> 

Y en el archivo llamado

<?php 

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

?> 

Sería esto eludir el "sugirió" necesidad de Functionize todo el proce ss?

+0

Quiere que sea una función para que no inicie un montón de solicitudes. El problema no es t cómo obtener la información para el PHP incluido: el método de OP ya lo logra. – Neel

7

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

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

<?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 la variable muy a menudo? .

1

Me encontré con esto al hacer formas ajax donde incluyo múltiples conjuntos de campos. Tomando por ejemplo una solicitud de empleo. Comienzo 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 $ recuento de incluir el conjunto de entrada de nuevo (nombre, contacto, teléfono .. etc) Esto funciona bien en la primera llamada de búsqueda como hago algo como:

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

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

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

también tengo otra dinámica incluye como éste en todo el sitio que pasan parámetros. El problema ocurre cuando el usuario presiona enviar y hay un error de formulario. Entonces, para no duplicar el código para incluir esos conjuntos de campo 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 params de consulta y los agrega automáticamente a la variable $ _GET. Esto ha funcionado bastante bien para mis casos de uso.

Aquí se muestra un ejemplo en la página de formulario cuando 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; 
} 
} 
?> 

sólo otro ejemplo de la inclusión de GET params dinámicamente para adaptarse a ciertos casos de uso. Espero que esto ayude. Tenga en cuenta que este código no se encuentra en su estado completo, pero esto debería ser suficiente para que cualquiera comience a utilizar su caso de uso.

-5

Haga lo siguiente:

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 añadir a su insert.php archivo:

$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"; 
} 
+0

demasiado complejo para la tarea que tiene entre manos ... – kaosmos

0

yo estaba en la misma situación y que tenía que incluir una página mediante el envío de algunos parámetros ... Pero en realidad lo que quería hacer es redirigir la página ... si es el caso para usted, el código es:

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

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

one.php:

<?php 
    $vars = array('stack','exchange','.com'); 

    include('two.php'); /*----- "paste" contents of two.php */ 

    testFunction(); /*----- execute imported function */ 
?> 

dos.php:

<?php 
    function testFunction(){ 
     global $vars; /*----- vars declared inside func! */ 
     echo $vars[0].$vars[1].$vars[2]; 
    } 
?> 
0

Usted puede utilizar $GLOBALS para resolver este problema también.

$myvar = "Hey"; 

include ("test.php"); 


echo $GLOBALS["myvar"]; 
0

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

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

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

Cuestiones relacionadas