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.

perdu
la source
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).

Daff
la source
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?

Paul Dixon
la source
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!

Nicolas
la source
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.

Nikolay Ivanov
la source
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.

Mark Buikema
la source
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?

Nepa
la source
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.

iLLin
la source
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"

Kenneth Billones
la source
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

afewcc
la source
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();
?>
hackick7
la source
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];
    }
?>
ultracasuel
la source
0

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

$myvar = "Hey";

include ("test.php");


echo $GLOBALS["myvar"];
Dulith De Costa
la source
-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";
}
Jaydip Godhani
la source