web-dev-qa-db-fra.com

PHP - inclure un fichier php et aussi envoyer des paramètres de requête

Je dois montrer une page de mon script php basé sur certaines conditions. J'ai une condition if et fais un "include" si la condition est remplie.

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

Maintenant le problème est que le serveur a un fichier "myFile.php" mais je veux faire un appel à ce fichier avec un argument (id) et la valeur de "id" changera à chaque appel.

Quelqu'un peut-il me dire s'il vous plaît comment y parvenir? Merci.

73
lostInTransit

Imaginez l’inclusion comme ce qu’elle est: Un copier-coller du contenu du fichier PHP inclus qui sera ensuite interprété. Il n'y a aucune modification de la portée, vous pouvez donc toujours accéder directement à $ someVar dans le fichier inclus (même si vous pouvez envisager une structure de classe où vous passez $ someVar en tant que paramètre ou faites référence à quelques variables globales).

191
Daff

Vous pouvez faire quelque chose comme ceci pour obtenir l’effet recherché:

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

Cependant, il semble que vous utilisiez cet include comme une sorte d’appel de fonction (vous mentionnez l’appeler de manière répétée avec des arguments différents).

Dans ce cas, pourquoi ne pas en faire une fonction régulière, incluse une fois et appelée plusieurs fois?

40
Paul Dixon

Une inclusion est comme une insertion de code. Vous obtenez dans votre code inclus exactement les mêmes variables que dans votre code de base. Vous pouvez donc le faire dans votre fichier principal:

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

Et dans "myFile.php":

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

Cela produira:

Mon identifiant est 12345!

23
Nicolas

Si vous voulez écrire ceci, incluez manuellement dans le fichier PHP - la réponse de Daff est parfaite.

Quoi qu'il en soit, si vous devez répondre à la question initiale, voici une petite fonction simple pour y parvenir:

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

?>

J'utilise cette construction variable variable très souvent.

7
Nikolay Ivanov

Dans le fichier que vous incluez, placez le code HTML dans une fonction.

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

Dans le fichier où vous souhaitez l'inclure, incluez le fichier, puis appelez la fonction avec les paramètres souhaités.

3
Mark Buikema

Je sais que cela fait longtemps, cependant, je me demande si la meilleure façon de gérer cela serait d’utiliser la ou les variables de session be

Dans votre myFile.php vous auriez

<?php 

$MySomeVAR = $_SESSION['SomeVar'];

?> 

Et dans le dossier d'appel 

<?php

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

?> 

Est-ce que cela contournerait le besoin "suggéré" de fonctionnaliser l'ensemble du processus?

2
Nepa

Je me suis heurté à cela lors de la création de formulaires ajax où j'inclus plusieurs ensembles de champs. Prenons par exemple une demande d'emploi. Je commence avec un ensemble de références professionnelles et j'ai un bouton qui dit "Ajouter plus". Ceci effectue un appel ajax avec un paramètre $ count pour inclure à nouveau le jeu d’entrée (nom, contact, téléphone, etc.).

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

L'utilisateur appuie sur un bouton permettant d'effectuer un appel ajax ajax('references.php?count=1'); </ code> Puis, dans le fichier references.php, j'ai quelque chose comme:

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

J'ai aussi d'autres inclus dynamiques comme celui-ci sur tout le site qui transmettent des paramètres. Le problème survient lorsque l'utilisateur appuie sur Soumettre et qu'il y a une erreur de formulaire. Alors maintenant, pour ne pas dupliquer le code afin d'inclure ces ensembles de champs supplémentaires qui étaient inclus dynamiquement, j'ai créé une fonction qui configurera l'inclusion avec les paramètres GET appropriés.

<?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 fonction recherche les paramètres de requête et les ajoute automatiquement à la variable $ _GET. Cela a très bien fonctionné pour mes cas d'utilisation.

Voici un exemple sur la page de formulaire appelée:

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

Juste un autre exemple d'inclusion dynamique de paramètres GET pour répondre à certains cas d'utilisation. J'espère que cela t'aides. Veuillez noter que ce code n'est pas dans son état complet, mais cela devrait être suffisant pour que quelqu'un commence assez bien pour son cas d'utilisation.

1
iLLin

Votre question n'est pas très claire, mais si vous voulez inclure le fichier php (ajouter la source de cette page à la vôtre), il vous suffit de faire ce qui suit:

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

Tant que la variable s'appelle $ someVar dans le fichier myFile.php

0
tachfine

J'étais dans la même situation et j'avais besoin d'inclure une page en envoyant des paramètres ... Mais en réalité, je voulais rediriger la page ... si c'est le cas pour vous, le code est le suivant:

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

Si quelqu'un d'autre répond à cette question, lorsque vous utilisez include('somepath.php'); et que ce fichier contient une fonction, la variable doit également y être déclarée. L'inclusion de $var=$var; ne fonctionnera pas toujours. Essayez de lancer ceci:

one.php: 

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

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

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

deux.php:

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

Vous pouvez également utiliser $GLOBALS pour résoudre ce problème.

$myvar = "Hey";

include ("test.php");


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