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


87

Je dois afficher une page de mon script php en fonction de certaines conditions. J'ai une condition if et je fais un "include" si la condition est satisfaite.

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 comment y parvenir? Merci.


2
Que fait réellement myFile.php dans votre cas? À moins que vous ne demandiez l'inclusion via HTTP, vous ne pouvez pas ajouter de paramètres au nom de fichier, mais vous pouvez influencer son comportement via une variable globale quelconque.
Paul Dixon

Réponses:


211

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


1
Notez également: $ _GET sera le même pour tous les fichiers inclus. Donc, si c'est là que vos paramètres de requête sont stockés, il les verra toujours. A noter également: ce n'est pas la fonction, dans une classe.
Jonathon

49

Vous pouvez faire quelque chose comme ceci pour obtenir l'effet que vous recherchez:

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

Cependant, il semble que vous l'utilisiez comme une sorte d'appel de fonction (vous mentionnez l'appel à plusieurs reprises avec différents arguments).

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


1
Je suis d'accord, cela ressemble vraiment à un appel de fonction au lieu d'un include.
Brenton Alker

Êtes-vous codé et include("myFile.php?id=$somevar");identique?
pile le

Remarque: include("myFile.php?...ne fonctionne pas comme prévu.
BananaAcid

29

Une inclusion est comme une insertion de code. Vous obtenez dans votre code inclus exactement les mêmes variables que vous avez 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!


7

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

Quoi qu'il en soit, si vous devez faire ce qui était 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 de variable variable très souvent.


4

Dans le fichier que vous incluez, enveloppez le html dans une fonction.

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

Dans le fichier où vous voulez qu'il soit inclus, incluez le fichier puis appelez la fonction avec les paramètres souhaités.


2

Je sais que cela fait un moment, 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 fichier d'appel

<?php

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

?> 

Cela éviterait-il le besoin "suggéré" de fonctionnaliser l'ensemble du processus?


Vous voulez en faire une fonction afin de ne pas lancer un tas de demandes. Le problème n'est pas de savoir comment obtenir les informations dans le PHP inclus - la méthode de OP y parvient déjà.
Neel

2

J'ai rencontré 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érence professionnel et j'ai un bouton qui dit "Ajouter plus". Cela fait un appel ajax avec un paramètre $ count pour inclure à nouveau le jeu d'entrées (nom, contact, téléphone .. etc.) Cela fonctionne bien lors de l'appel de la première page car je fais quelque chose comme:

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

L'utilisateur appuie sur un bouton qui effectue un appel ajax ajax('references.php?count=1'); Ensuite, dans le fichier references.php, j'ai quelque chose comme:

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

J'ai aussi d'autres inclusions dynamiques comme celle-ci dans tout le site qui passent des paramètres. Le problème se produit lorsque l'utilisateur appuie sur Soumettre et qu'il y a une erreur de formulaire. Alors maintenant, pour ne pas dupliquer le code pour 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 vérifie les paramètres de requête et les ajoute automatiquement à la variable $ _GET. Cela a plutôt bien fonctionné pour mes cas d'utilisation.

Voici un exemple sur la page du formulaire lorsqu'elle est 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 des paramètres GET pour s'adapter à 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 tout le monde démarre assez bien pour son cas d'utilisation.


2

La façon la plus simple de faire cela est comme ça

index.php

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

second.php

<?php echo $active; ?>

Vous pouvez partager des variables puisque vous incluez 2 fichiers en utilisant "inclure"


0

Votre question n'est pas très claire, mais si vous souhaitez inclure le fichier php (ajoutez 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 est nommée $ someVar dans le myFile.php


0

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

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

0

Si quelqu'un d'autre est sur cette question, lors de l'utilisation include('somepath.php');et que ce fichier contient une fonction, le var doit également y être déclaré. L'inclusion de$var=$var; ne fonctionnera pas toujours. Essayez de les exécuter:

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

0

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

$myvar = "Hey";

include ("test.php");


echo $GLOBALS["myvar"];

-6

Faites ceci:

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

Et ajoutez à votre insert.phpdossier:

$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";
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.