wake-up-neo.com

PHP - Fügen Sie eine PHP-Datei ein und senden Sie auch Abfrageparameter

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'";
}

Das Problem ist nun, 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 bei jedem Aufruf.

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

73
lostInTransit

Stellen Sie sich das Include als das vor, was es ist: Ein Copy & Paste des Inhalts der enthaltenen PHP -Datei, die dann interpretiert wird. Es gibt keine Änderung des Gültigkeitsbereichs, sodass Sie immer noch direkt auf $ someVar in der eingeschlossenen Datei zugreifen können (auch wenn Sie eine klassenbasierte Struktur in Betracht ziehen, in der Sie $ someVar als Parameter übergeben oder auf einige globale Variablen verweisen).

191
Daff

Sie könnten so etwas tun, um die gewünschte Wirkung zu erzielen:

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

Es klingt jedoch so, als würden Sie dieses Include wie eine Art Funktionsaufruf verwenden (Sie erwähnen, dass Sie es wiederholt mit anderen Argumenten aufrufen).

In diesem Fall, warum nicht in eine reguläre Funktion umwandeln, einmal eingeschlossen und mehrfach aufgerufen?

40
Paul Dixon

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 ausgegeben:

Meine ID ist 12345!

23
Nicolas

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

Jedenfalls, wenn Sie die ursprüngliche Frage zu tun haben, gibt es 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 verwende diese variable variable Konstruktion sehr oft.

7
Nikolay Ivanov

Umschließen Sie in der Datei, die Sie einschließen, den HTML-Code in einer Funktion.

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

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

3
Mark Buikema

Ich weiß, dass es eine Weile her ist, aber ich frage mich, ob dies der beste Weg wäre, die Session-Variablen zu verwenden

In deiner myFile.php hättest du

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

2
Nepa

Ich bin auf dieses Problem gestoßen, als ich Ajax-Formulare verwende, in die ich mehrere Feldsätze einfüge. Nehmen Sie zum Beispiel eine Bewerbung. Ich fange mit einem professionellen Referenzsatz an und habe eine Schaltfläche mit der Aufschrift "Mehr hinzufügen". Dies führt einen Ajax-Aufruf mit einem $ count-Parameter durch, um die Eingabe erneut aufzunehmen (Name, Kontakt, Telefon usw.).

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

Der Benutzer drückt eine Taste, die einen Ajax-Aufruf tätigt. ajax('references.php?count=1'); </ code> Dann habe ich in der Referenzen.php-Datei so etwas wie:

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

Ich habe auch andere dynamische Include-Elemente wie diese auf der Website, die Parameter übergeben. Das Problem tritt auf, wenn der Benutzer auf "Senden" drückt und ein Formularfehler auftritt. Um nun den Code nicht zu kopieren, um die zusätzlichen Feldsätze aufzunehmen, die dynamisch eingeschlossen wurden, 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 $ _GET-Variablen 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;
 }
}
?>

Ein weiteres Beispiel für die dynamische Verwendung 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, um jemanden für den Anwendungsfall ziemlich gut zu machen.

1
iLLin

Ihre Frage ist nicht sehr klar, aber wenn Sie include die PHP-Datei (die Quelle dieser Seite zu Ihrer eigenen hinzufügen) möchten, müssen Sie nur Folgendes tun:

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

Solange die Variable in myFile.php den Namen $ someVar hat

0
tachfine

Ich befand mich in derselben Situation, und ich musste eine Seite hinzufügen, indem ich einige Parameter sendete ... In Wirklichkeit wollte ich die Seite umleiten ... Wenn dies der Fall ist, lautet der Code

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

Wenn sich jemand anderes zu dieser Frage befindet, wenn include('somepath.php'); verwendet wird und diese Datei eine Funktion enthält, muss die var auch dort deklariert werden. Die Einbeziehung von $var=$var; funktioniert nicht immer. Versuchen Sie, diese auszuführen:

one.php: 

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

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

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

zwei.php:

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

Sie können auch $GLOBALS verwenden, um dieses Problem zu lösen.

$myvar = "Hey";

include ("test.php");


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