web-dev-qa-db-ja.com

PHP-phpファイルを含め、クエリパラメータも送信します

特定の条件に基づいて、phpスクリプトからページを表示する必要があります。 if条件があり、条件が満たされた場合に「include」を実行しています。

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

現在、問題はサーバーにファイル「myFile.php」があることですが、引数(id)を指定してこのファイルを呼び出したいので、呼び出しごとに「id」の値が変わります。

誰かがこれを達成する方法を教えてもらえますか?ありがとう。

79
lostInTransit

インクルードが何であるかを想像してください:含まれるPHPファイルの内容のコピー&ペーストは、その後解釈されます。スコープの変更はまったくないため、インクルードファイルの$ someVarに直接アクセスできます(パラメーターとして$ someVarを渡すか、いくつかのグローバル変数を参照するクラスベースの構造を検討する場合でも)。

197
Daff

次のような効果を得るために、このようなことを行うことができます。

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

ただし、ある種の関数呼び出しのように、このincludeを使用しているように聞こえます(異なる引数で繰り返し呼び出すことに言及しています)。

この場合、一度含めて複数回呼び出される通常の関数に変えてみませんか?

44
Paul Dixon

インクルードは、コード挿入のようなものです。基本コードにある変数とまったく同じ変数を組み込みコードに入れます。あなたのメインファイルでこれを行うことができます:

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

そして、「myFile.php」で:

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

これは出力されます:

私のIDは12345です!

25
Nicolas

このインクルードをPHPファイルに手動で記述する場合、Daffの答えは完璧です。

とにかく、最初の質問でしたことをする必要がある場合、これを達成するための小さな簡単な関数を以下に示します。

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

?>

私はこの変数を非常に頻繁に使用しています。

7
Nikolay Ivanov

含めるファイルでは、htmlを関数でラップします。

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

含めるファイルにファイルを含めてから、必要なパラメーターを指定して関数を呼び出します。

4
Mark Buikema

複数のフィールドセットを含むajaxフォームを実行しているときにこれに遭遇しました。たとえば、雇用申請書を取り上げます。 1つの専門的な参照セットから始めて、「追加」というボタンがあります。これは、入力セット(名前、連絡先、電話番号など)を再度含めるために$ countパラメーターを使用してajax呼び出しを行います。

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

ユーザーがajax呼び出しを行うボタンを押すajax('references.php?count=1'); </ code>次に、references.phpファイル内に次のようなものがあります。

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

パラメータを渡すサイト全体に、このような他の動的インクルードもあります。この問題は、ユーザーが送信を押したときにフォームエラーが発生したときに発生します。そのため、動的にインクルードされる追加のフィールドセットを含めるためにコードを複製しないように、適切なGETパラメーターでインクルードをセットアップする関数を作成しました。

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

この関数はクエリパラメータをチェックし、それらを自動的に$ _GET変数に追加します。これは、私のユースケースにかなり適しています。

呼び出されたときのフォームページの例を次に示します。

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

特定のユースケースに対応するためにGETパラメータを動的に含めるもう1つの例です。お役に立てれば。このコードは完全な状態ではありませんが、これはだれでもユースケースに適したものを開始するのに十分なはずです。

2
iLLin

私はこれがしばらく前であることを知っていますが、私はこれを処理する最良の方法はbeセッション変数を利用することだろうかと思っています

あなたのmyFile.phpには

<?php 

$MySomeVAR = $_SESSION['SomeVar'];

?> 

そして、呼び出しファイルで

<?php

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

?> 

これにより、プロセス全体を機能化するための「提案された」必要性を回避できますか?

2
Nepa

あなたの質問はあまり明確ではありませんが、include phpファイル(そのページのソースを自分のものに追加する)をしたい場合は、次のようにするだけです:

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

変数の名前がmyFile.phpで$ someVarである限り

0
afewcc

私は同じ状況にあり、いくつかのパラメータを送信してページを含める必要がありました...しかし、実際に私がしたかったのはページをリダイレクトすることです...あなたの場合、コードは次のとおりです:

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

include('somepath.php');を使用し、そのファイルに関数が含まれている場合、他の誰かがこの質問に答えている場合、varもそこで宣言する必要があります。 $var=$var;を含めることが常に機能するとは限りません。これらを実行してみてください:

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
ultracasual

$GLOBALSを使用して、この問題を解決することもできます。

$myvar = "Hey";

include ("test.php");


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