PHP - Enthält eine PHP-Datei und sendet auch Abfrageparameter

86

Ich muss eine Seite aus meinem PHP-Skript unter bestimmten Bedingungen anzeigen. Ich habe eine if-Bedingung und mache ein "include", wenn die Bedingung erfüllt ist.

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

Jetzt ist das Problem, dass der Server eine Datei "myFile.php" hat, aber ich möchte diese Datei mit einem Argument (id) aufrufen und der Wert von "id" ändert sich mit jedem Aufruf.

Kann mir bitte jemand sagen, wie ich das erreichen kann? Vielen Dank.

lostInTransit
quelle
2
Was macht myFile.php in Ihrem Fall eigentlich? Wenn Sie das Include nicht über HTTP anfordern, können Sie dem Dateinamen keine Parameter hinzufügen, aber Sie können sein Verhalten über eine globale Variable beeinflussen.
Paul Dixon

Antworten:

208

Stellen Sie sich das Include als das vor, was es ist: Ein Kopieren und Einfügen des Inhalts der enthaltenen PHP-Datei, die dann interpretiert wird. Es gibt überhaupt keine Bereichsänderung, sodass Sie weiterhin direkt auf $ someVar in der enthaltenen Datei zugreifen können (auch wenn Sie möglicherweise eine klassenbasierte Struktur in Betracht ziehen, in der Sie $ someVar als Parameter übergeben oder auf einige globale Variablen verweisen).

Daff
quelle
1
Beachten Sie auch: $ _GET ist für alle enthaltenen Dateien gleich. Wenn dort Ihre Abfrageparameter gespeichert sind, werden sie weiterhin angezeigt. Beachten Sie auch: Es ist nicht die Funktion in einer Klasse.
Jonathon
48

Sie könnten so etwas tun, um den gewünschten Effekt zu erzielen:

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

Es hört sich jedoch so an, als würden Sie dieses Include wie eine Art Funktionsaufruf verwenden (Sie erwähnen, dass Sie es wiederholt mit verschiedenen Argumenten aufrufen).

Warum verwandeln Sie es in diesem Fall nicht in eine reguläre Funktion, die einmal enthalten und mehrmals aufgerufen wird?

Paul Dixon
quelle
1
Ich stimme zu, das klingt definitiv so, als ob es ein Funktionsaufruf anstelle eines Includes sein sollte.
Brenton Alker
Sind Sie Code und include("myFile.php?id=$somevar");identisch?
Stapel
Hinweis: Funktioniert include("myFile.php?...nicht wie vorgesehen.
BananaAcid
29

Ein Include ist wie eine Code-Einfügung. Sie erhalten in Ihrem enthaltenen Code genau die gleichen Variablen, die Sie in Ihrem Basiscode haben. So können Sie dies in Ihrer Hauptdatei tun:

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

Und in "myFile.php":

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

Dies wird Folgendes ausgeben:

Meine ID ist 12345!

Nicolas
quelle
8

Wenn Sie dieses Include manuell in die PHP-Datei schreiben möchten, ist die Antwort von Daff perfekt.

Wenn Sie die ursprüngliche Frage stellen müssen, finden Sie hier eine kleine einfache Funktion, um dies zu erreichen:

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

?>

Ich benutze diese variable Variablenkonstruktion sehr oft.

Nikolay Ivanov
quelle
4

Schließen Sie in die von Ihnen eingeschlossene Datei das HTML in eine Funktion ein.

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

Fügen Sie die Datei in die Datei ein, in die sie aufgenommen werden soll, und rufen Sie dann die Funktion mit den gewünschten Parametern auf.

Mark Buikema
quelle
2

Ich weiß, dass dies eine Weile her ist, aber ich frage mich, ob der beste Weg, dies zu handhaben, die Verwendung der be-Sitzungsvariablen ist.

In Ihrer myFile.php hätten Sie

<?php 

$MySomeVAR = $_SESSION['SomeVar'];

?> 

Und in der aufrufenden Datei

<?php

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

?> 

Würde dies die "vorgeschlagene" Notwendigkeit umgehen, den gesamten Prozess zu funktionalisieren?

Nepa
quelle
Sie möchten es zu einer Funktion machen, damit Sie nicht eine Reihe von Anforderungen initiieren. Das Problem ist nicht, wie die Informationen zum enthaltenen PHP gelangen sollen - die OP-Methode erreicht dies bereits.
Neel
2

Ich bin darauf gestoßen, als ich Ajax-Formulare erstellt habe, bei denen ich mehrere Feldsätze einbinde. Nehmen Sie zum Beispiel eine Bewerbung. Ich beginne mit einem professionellen Referenzsatz und habe eine Schaltfläche mit der Aufschrift "Add More". Dies führt einen Ajax-Aufruf mit einem $ count-Parameter durch, um den Eingabesatz erneut einzuschließen (Name, Kontakt, Telefon usw.). Dies funktioniert beim Aufruf der ersten Seite einwandfrei, da ich Folgendes mache:

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

Der Benutzer drückt eine Taste, die einen Ajax-Aufruf ausführt. ajax('references.php?count=1'); Dann habe ich in der Datei reference.php etwas wie:

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

Ich habe auch andere dynamische Includes wie dieses auf der gesamten Site, die Parameter übergeben. Das Problem tritt auf, wenn der Benutzer auf Senden drückt und ein Formularfehler auftritt. Um nun keinen Code zu duplizieren, um die zusätzlichen Feldsätze einzuschließen, die dynamisch enthalten waren, habe ich eine Funktion erstellt, die das Include mit den entsprechenden GET-Parametern einrichtet.

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

Die Funktion sucht nach Abfrageparametern und fügt sie automatisch der Variablen $ _GET hinzu. Dies hat für meine Anwendungsfälle ziemlich gut funktioniert.

Hier ist ein Beispiel auf der Formularseite, wenn es aufgerufen wird:

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

Nur ein weiteres Beispiel für die dynamische Einbeziehung von GET-Parametern, um bestimmte Anwendungsfälle zu berücksichtigen. Hoffe das hilft. Bitte beachten Sie, dass dieser Code nicht vollständig ist, aber dies sollte ausreichen, damit jeder für seinen Anwendungsfall ziemlich gut anfängt.

iLLin
quelle
0

Ihre Frage ist nicht ganz klar, aber wenn Sie möchten umfassen die PHP - Datei (fügen Sie die Quelle dieser Seite zu verkaufen), müssen Sie nur noch auf folgende Arten tun:

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

Solange die Variable in der Datei myFile.php $ someVar heißt

afewcc
quelle
0

Ich war in der gleichen Situation und musste eine Seite durch Senden einiger Parameter einschließen ... Aber in Wirklichkeit wollte ich die Seite umleiten ... wenn dies bei Ihnen der Fall ist, lautet der Code:

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

Wenn sich jemand anders mit dieser Frage befasst include('somepath.php');und diese Datei eine Funktion enthält, muss dort auch die Variable deklariert werden. Die Aufnahme von $var=$var;wird nicht immer funktionieren. Versuchen Sie Folgendes auszuführen:

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

Sie können $GLOBALSdieses Problem auch verwenden , um es zu lösen.

$myvar = "Hey";

include ("test.php");


echo $GLOBALS["myvar"];
Dulith De Costa
quelle
0

Der einfachste Weg, dies zu tun, ist so

index.php

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

second.php

<?php echo $active; ?>

Sie können Variablen freigeben, da Sie 2 Dateien einschließen, indem Sie "include" verwenden.

Kenneth Billones
quelle
-6

Mach das:

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

Und fügen Sie Ihrer insert.phpDatei hinzu:

$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
quelle