PHP-PHP 파일을 포함하고 쿼리 매개 변수도 전송


87

특정 조건에 따라 내 PHP 스크립트의 페이지를 표시해야합니다. if 조건이 있고 조건이 충족되면 "include"를 수행하고 있습니다.

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

이제 문제는 서버에 "myFile.php"파일이 있지만 인수 (id)를 사용하여이 파일을 호출하고 "id"값이 호출 할 때마다 변경된다는 것입니다.

누군가 이것을 달성하는 방법을 말해 줄 수 있습니까? 감사.


2
myFile.php는 실제로 귀하의 경우 무엇을합니까? HTTP를 통해 포함을 요청하지 않는 한 파일 이름에 매개 변수를 추가 할 수 없지만 일종의 전역 변수를 통해 동작에 영향을 미칠 수 있습니다.
Paul Dixon

답변:


211

포함이 무엇인지 상상해보십시오. 포함 된 PHP 파일의 내용을 복사하여 붙여 넣으면 해석됩니다. 범위 변경이 전혀 없으므로 포함 된 파일의 $ someVar에 직접 액세스 할 수 있습니다 ($ someVar를 매개 변수로 전달하거나 몇 가지 전역 변수를 참조하는 클래스 기반 구조를 고려할 수도 있음).


1
또한 참고 : $ _GET은 포함 된 모든 파일에 대해 동일합니다. 따라서 여기에 검색어 매개 변수가 저장되어있는 경우에도 계속 표시됩니다. 또한 참고 : 클래스에서 함수가 아닙니다.
Jonathon 2013

49

원하는 효과를 얻기 위해 다음과 같이 할 수 있습니다.

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

그러나 이것은 일종의 함수 호출과 같은 포함을 사용하는 것처럼 들립니다 (다른 인수로 반복적으로 호출한다고 언급했습니다).

이 경우 한 번 포함되고 여러 번 호출되는 일반 함수로 바꾸지 않는 이유는 무엇입니까?


1
동의합니다. 이것은 포함 대신 함수 호출이어야하는 것처럼 들립니다.
Brenton Alker

당신은 코드이고 include("myFile.php?id=$somevar");동일합니까?
스택

참고 : include("myFile.php?...의도 한대로 작동하지 않습니다.
BananaAcid

29

포함은 코드 삽입과 같습니다. 포함 된 코드에는 기본 코드에있는 것과 똑같은 변수가 포함됩니다. 따라서 주 파일에서 다음을 수행 할 수 있습니다.

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

그리고 "myFile.php"에서 :

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

그러면 다음이 출력됩니다.

내 아이디는 12345입니다!


7

이것을 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);
}

?>

저는이 변수 변수 구성을 자주 사용하고 있습니다.


4

포함하는 파일에서 html을 함수로 래핑합니다.

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

포함시키려는 파일에 파일을 포함시킨 다음 원하는 매개 변수로 함수를 호출하십시오.


2

나는 이것이 오래되었다는 것을 알고 있지만, 이것을 처리하는 가장 좋은 방법은 be 세션 변수를 활용하는 것 일지 궁금합니다.

myFile.php에서

<?php 

$MySomeVAR = $_SESSION['SomeVar'];

?> 

그리고 호출 파일에서

<?php

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

?> 

이것이 전체 프로세스를 기능화하기 위해 "제안 된"욕구를 우회 할 수 있습니까?


여러 요청을 시작하지 않도록 함수로 만들고 싶습니다. 문제는 포함 된 PHP로 정보를 얻는 방법이 아닙니다. OP의 방법은 이미이를 달성했습니다.
Neel

2

여러 필드 세트를 포함하는 ajax 양식을 수행 할 때 이것을 만났습니다. 예를 들어 고용 신청서를들 수 있습니다. 하나의 전문 참조 세트로 시작하고 "추가"라는 버튼이 있습니다. 이것은 입력 세트를 다시 포함하기 위해 $ count 매개 변수를 사용하여 ajax 호출을 수행합니다 (이름, 연락처, 전화 등). 이것은 다음과 같이 첫 번째 페이지 호출에서 잘 작동합니다.

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

사용자가 ajax 호출을하는 버튼을 누른 ajax('references.php?count=1'); 다음 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 매개 변수를 동적으로 포함하는 또 다른 예입니다. 도움이 되었기를 바랍니다. 이 코드가 완전한 상태는 아니지만이 정도면 누구나 사용 사례를 잘 시작할 수 있습니다.


2

이렇게하는 가장 간단한 방법은 다음과 같습니다.

index.php

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

second.php

<?php echo $active; ?>

"include"를 사용하여 2 개의 파일을 포함하므로 변수를 공유 할 수 있습니다.


0

귀하의 질문은 명확하지 않지만 php 파일 을 포함 하려면 (해당 페이지의 소스를 귀하의 파일에 추가) 다음을 수행하면됩니다.

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

myFile.php에서 변수 이름이 $ someVar 인 경우


0

나는 같은 상황에 있었고 일부 매개 변수를 전송하여 페이지를 포함해야했습니다 ... 그러나 실제로 내가하고 싶었던 것은 페이지를 리디렉션하는 것입니다 ... 만약 그렇다면 코드는 다음과 같습니다.

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

0

이 질문에 다른 사람이 있으면 사용할 때 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

$GLOBALS이 문제를 해결하는 데 사용할 수도 있습니다 .

$myvar = "Hey";

include ("test.php");


echo $GLOBALS["myvar"];

-6

이 작업을 수행:

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

그리고 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";
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.