PHP: include un file php e invia anche parametri di query


87

Devo mostrare una pagina del mio script php in base a determinate condizioni. Ho una condizione if e sto eseguendo un "include" se la condizione è soddisfatta.

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

Ora il problema è che il server ha un file "myFile.php" ma voglio fare una chiamata a questo file con un argomento (id) e il valore di "id" cambierà ad ogni chiamata.

Qualcuno può dirmi come ottenere questo risultato? Grazie.


2
Cosa fa effettivamente myFile.php nel tuo caso? A meno che non richiediate l'inclusione su HTTP, non è possibile aggiungere parametri al nome del file, ma è possibile influenzarne il comportamento tramite una variabile globale di qualche tipo.
Paul Dixon

Risposte:


211

Immagina l'inclusione per quello che è: una copia e incolla del contenuto del file PHP incluso che verrà quindi interpretato. Non c'è alcun cambiamento di ambito, quindi puoi ancora accedere direttamente a $ someVar nel file incluso (anche se potresti considerare una struttura basata su classi in cui passi $ someVar come parametro o fai riferimento ad alcune variabili globali).


1
Nota anche: $ _GET sarà lo stesso per tutti i file inclusi. Quindi, se è lì che sono archiviati i parametri della query, li vedrà comunque. Nota anche: non è la funzione, in una classe.
Jonathon

49

Potresti fare qualcosa del genere per ottenere l'effetto che stai cercando:

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

Tuttavia, sembra che tu stia usando questo include come una sorta di chiamata di funzione (dici di chiamarlo ripetutamente con argomenti diversi).

In questo caso, perché non trasformarlo in una funzione regolare, inclusa una volta e chiamata più volte?


1
Sono d'accordo, questo suona decisamente come dovrebbe essere una chiamata di funzione invece di un include.
Brenton Alker

Sei codice e include("myFile.php?id=$somevar");identico?
impila il

Nota: include("myFile.php?...non funziona come previsto.
BananaAcid

29

Un include è proprio come un inserimento di codice. Ottieni nel codice incluso le stesse identiche variabili che hai nel codice di base. Quindi puoi farlo nel tuo file principale:

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

E in "myFile.php":

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

Questo produrrà:

Il mio ID è 12345!


7

Se hai intenzione di scrivere questo include manualmente nel file PHP, la risposta di Daff è perfetta.

Ad ogni modo, se devi fare quella che era la domanda iniziale, ecco una piccola semplice funzione per ottenerlo:

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

?>

Sto usando questa costruzione variabile variabile molto spesso.


4

Nel file che includi, racchiudi l'html in una funzione.

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

Nel file in cui vuoi che sia incluso, includi il file e quindi chiama la funzione con i parametri che desideri.


2

So che è passato del tempo, tuttavia, mi chiedo se il modo migliore per gestirlo sia utilizzare le variabili di sessione be

Nel tuo myFile.php avresti

<?php 

$MySomeVAR = $_SESSION['SomeVar'];

?> 

E nel file chiamante

<?php

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

?> 

Questo aggirerebbe la necessità "suggerita" di funzionalizzare l'intero processo?


Vuoi renderlo una funzione in modo da non avviare un mucchio di richieste. Il problema non è come ottenere le informazioni nel PHP incluso: il metodo di OP lo fa già.
Neel

2

Mi sono imbattuto in questo durante l'esecuzione di moduli ajax in cui includo più set di campi. Prendendo ad esempio una domanda di lavoro. Comincio con un set di riferimento professionale e ho un pulsante che dice "Aggiungi altro". Questo esegue una chiamata ajax con un parametro $ count per includere di nuovo l'insieme di input (nome, contatto, telefono ... ecc.) Funziona bene sulla chiamata della prima pagina poiché faccio qualcosa del tipo:

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

L'utente preme un pulsante che effettua una chiamata ajax ajax('references.php?count=1'); Quindi all'interno del file references.php ho qualcosa del tipo:

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

Ho anche altri include dinamici come questo in tutto il sito che trasmettono parametri. Il problema si verifica quando l'utente preme invia e si verifica un errore del modulo. Quindi ora per non duplicare il codice per includere quei set di campi extra che dovevano essere inclusi dinamicamente, ho creato una funzione che imposterà l'inclusione con i parametri GET appropriati.

<?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 funzione verifica i parametri della query e li aggiunge automaticamente alla variabile $ _GET. Questo ha funzionato abbastanza bene per i miei casi d'uso.

Ecco un esempio sulla pagina del modulo quando viene chiamato:

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

Solo un altro esempio di inclusione dinamica dei parametri GET per adattarsi a determinati casi d'uso. Spero che sia di aiuto. Tieni presente che questo codice non è nel suo stato completo, ma dovrebbe essere sufficiente per far iniziare bene a chiunque il proprio caso d'uso.


2

Il modo più semplice per farlo è così

index.php

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

second.php

<?php echo $active; ?>

Puoi condividere le variabili poiché includi 2 file utilizzando "include"


0

La tua domanda non è molto chiara, ma se vuoi includere il file php (aggiungi il sorgente di quella pagina al tuo), devi solo fare quanto segue:

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

Finché la variabile è denominata $ someVar in myFile.php


0

Ero nella stessa situazione e avevo bisogno di includere una pagina inviando alcuni parametri ... Ma in realtà quello che volevo fare è reindirizzare la pagina ... se è il tuo caso, il codice è:

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

0

Se qualcun altro è su questa domanda, quando si usa include('somepath.php');e quel file contiene una funzione, anche la var deve essere dichiarata. L'inclusione di $var=$var;non funzionerà sempre. Prova a eseguire questi:

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

Puoi usare anche $GLOBALSper risolvere questo problema.

$myvar = "Hey";

include ("test.php");


echo $GLOBALS["myvar"];

-6

Fai questo:

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

E aggiungi al tuo insert.phpfile:

$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";
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.