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.
php
parameters
include
perdu
la source
la source
Réponses:
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).
la source
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?
la source
include("myFile.php?id=$somevar");
identique?include("myFile.php?...
ne fonctionne pas comme prévu.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:
la source
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.
la source
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.
la source
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?
la source
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
Ensuite, dans le fichier references.php, j'ai quelque chose comme:ajax('references.php?count=1');
<?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.
la source
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"
la source
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
la source
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(); ?>
la source
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]; } ?>
la source
Vous pouvez également utiliser
$GLOBALS
pour résoudre ce problème.$myvar = "Hey"; include ("test.php"); echo $GLOBALS["myvar"];
la source
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.php
dossier:$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"; }
la source