2009-08-05 12 views
67

Devo mostrare una pagina dal mio script php in base a determinate condizioni. Ho una condizione if e sto facendo un "include" se la condizione è soddisfatta.PHP: includi un file php e invii i parametri di ricerca

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

Ora il problema è 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 ottenerlo? Grazie.

+1

Cosa fa effettivamente myFile.php nel tuo caso? A meno che tu non richieda l'inclusione su HTTP, non puoi aggiungere parametri al nome del file, ma potresti influenzarne il comportamento tramite una variabile globale di qualche tipo. –

risposta

178

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

+0

bella risposta Daff ho provato a votare ma non posso perché sono ancora nuovo nello stack su flow.com –

+4

@hjmelda Ho votato per te :) – Shaokan

+1

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

37

Si potrebbe quindi qualcosa di simile per ottenere l'effetto si sta dopo

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

Tuttavia, sembra che si sta utilizzando questo comprende come una sorta di chiamata di funzione (si menzione chiamandolo più volte con argomenti diversi) .

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

+1

Sono d'accordo, questo sicuramente suona come dovrebbe essere una chiamata di funzione invece di un inclusione. –

+0

Sei codice e 'include (" myFile.php? Id = $ somevar ");' identico? – stack

+0

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

0

tua domanda non è molto chiaro, ma se si vuole includere il file php (aggiungere la fonte di quella pagina per il vostro), devi solo fare seguente:

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

Finché come la variabile è denominata $ someVar nel myFile.php

21

Un inclusione è proprio come un inserimento di codice. Ottieni nel tuo codice incluso le stesse identiche variabili che hai nel tuo codice base. Così si può fare questo nel file principale:

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

E in "myFile.php": uscita

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

Questa volontà:

mio id è 12345!

+11

tag ASP? Veramente? –

+0

Wow, non so come ho finito per commettere quell'errore ... non l'ho toccato ASP a tutti, in quel secolo! Correggere questo in un secondo. – Nicolas

+1

Bene PHP supporta tag ASP quindi è possibile :). – rix0rrr

2

So che questo è stato un po ', però, Iam chiedersi se il modo migliore per gestire questa potrebbe essere quella di utilizzare la variabile di sessione essere (s)

Nella tua myFile.php avreste

<?php 

$MySomeVAR = $_SESSION['SomeVar']; 

?> 

E nel file chiamante

<?php 

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

?> 

sarebbe questo aggirare la "suggerito" necessità di Functionize tutta la proce ss?

+0

Si desidera renderlo una funzione in modo da non avviare un sacco di richieste. Il problema non è t come ottenere le informazioni nel PHP incluso - Il metodo OP lo raggiunge già. – Neel

7

Se si intende scrivere manualmente nel file PHP, la risposta di Daff è perfetta.

In ogni caso, se avete bisogno di fare ciò che è stata la domanda iniziale, ecco un piccolo semplice funzione per raggiungere questo:

<?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? .

1

Mi sono imbattuto in questo quando eseguo moduli ajax dove includo più insiemi di campi. Prendendo ad esempio una domanda di lavoro. Inizio con un set di riferimento professionale e ho un pulsante che dice "Aggiungi altro". Questo fa una chiamata AJAX con un parametro di conteggio $ per includere l'ingresso impostare di nuovo (nome, contatti, telefono .. ecc) Ciò funziona benissimo in prima convocazione la pagina come faccio qualcosa di simile: preme

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

utente un pulsante che fa una chiamata AJAX ajax('references.php?count=1'); Poi all'interno del file references.php ho qualcosa di simile:

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

ho anche altre dinamica comprende come questo in tutto il sito che passano i parametri. Il problema si verifica quando l'utente preme Invia e si verifica un errore di modulo. Quindi ora non duplicare il codice per includere quei set di campi extra che, se 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 controlla i parametri di query e li aggiunge automaticamente alla variabile $ _GET. Questo ha funzionato abbastanza bene per i miei casi d'uso.

Ecco un esempio sulla pagina di modulo quando 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 includere GET params dinamicamente per ospitare alcuni casi d'uso. Spero che questo ti aiuti. Si prega di notare che questo codice non è nel suo stato completo, ma questo dovrebbe essere sufficiente per far iniziare chiunque prima del suo uso.

-5

Fate 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 aggiungere al vostro file di insert.php:

$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"; 
} 
+0

troppo complesso per l'attività in corso ... – kaosmos

0

ero nella stessa situazione e avevo bisogno di includere una pagina con l'invio di alcuni parametri ... Ma in realtà quello che volevo fare è reindirizzare la pagina ... se è il caso per te, il codice è:

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

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

one.php:

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

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

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

due.php:

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

È possibile utilizzare $GLOBALS per risolvere anche questo problema.

$myvar = "Hey"; 

include ("test.php"); 


echo $GLOBALS["myvar"]; 
0

Nel file incluso, avvolgere l'html in una funzione.

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

Nel file in cui si desidera che sia incluso, includere il file e quindi chiamare la funzione con i parametri desiderati.