PHP - bao gồm một tệp php và cũng gửi các tham số truy vấn


87

Tôi phải hiển thị một trang từ tập lệnh php của mình dựa trên các điều kiện nhất định. Tôi có một điều kiện if và đang thực hiện "bao gồm" nếu điều kiện được thỏa mãn.

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

Bây giờ vấn đề là máy chủ có tệp "myFile.php" nhưng tôi muốn thực hiện cuộc gọi đến tệp này bằng một đối số (id) và giá trị của "id" sẽ thay đổi theo mỗi lần gọi.

Ai đó có thể vui lòng cho tôi biết làm thế nào để đạt được điều này? Cảm ơn.


2
MyFile.php thực sự làm gì trong trường hợp của bạn? Trừ khi bạn yêu cầu bao gồm qua HTTP, bạn không thể thêm các tham số vào tên tệp, nhưng bạn có thể ảnh hưởng đến hành vi của nó thông qua một số loại biến toàn cục.
Paul Dixon

Câu trả lời:


211

Hãy tưởng tượng bao gồm như thế nào: Bản sao & dán nội dung của tệp PHP được bao gồm, tệp này sau đó sẽ được thông dịch. Không có thay đổi phạm vi nào cả, vì vậy bạn vẫn có thể truy cập trực tiếp vào $ someVar trong tệp được bao gồm (mặc dù bạn có thể coi cấu trúc dựa trên lớp trong đó bạn chuyển $ someVar làm tham số hoặc tham chiếu đến một vài biến toàn cục).


1
Cũng lưu ý: $ _GET sẽ giống nhau cho tất cả các tệp được bao gồm. Vì vậy, nếu đó là nơi các tham số truy vấn của bạn được lưu trữ, nó sẽ vẫn nhìn thấy chúng. Cũng lưu ý: nó không phải là hàm, trong một lớp.
Jonathon

49

Bạn có thể làm điều gì đó như sau để đạt được hiệu quả như sau:

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

Tuy nhiên, có vẻ như bạn đang sử dụng điều này bao gồm giống như một số loại lệnh gọi hàm (bạn đề cập đến việc gọi nó nhiều lần với các đối số khác nhau).

Trong trường hợp này, tại sao không biến nó thành một hàm thông thường, bao gồm một lần và được gọi nhiều lần?


1
Tôi đồng ý, điều này chắc chắn nghe có vẻ như nó phải là một cuộc gọi hàm thay vì bao gồm.
Brenton Alker

Bạn có mã và include("myFile.php?id=$somevar");giống hệt nhau?
ngăn xếp

Lưu ý: include("myFile.php?...không hoạt động như dự định.
BananaAcid

29

Một bao gồm giống như một chèn mã. Bạn nhận được trong mã bao gồm các biến chính xác giống như bạn có trong mã cơ sở của mình. Vì vậy, bạn có thể thực hiện việc này trong tệp chính của mình:

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

Và trong "myFile.php":

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

Điều này sẽ xuất ra:

Id của tôi là 12345!


7

Nếu bạn định viết điều này, hãy bao gồm thủ công trong tệp PHP - câu trả lời của Daff là hoàn hảo.

Dù sao, nếu bạn cần làm những gì câu hỏi ban đầu, đây là một hàm đơn giản nhỏ để đạt được điều đó:

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

?>

Tôi đang sử dụng cấu trúc biến biến này rất thường xuyên.


4

Trong tệp bạn đưa vào, hãy bọc html trong một hàm.

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

Trong tệp mà bạn muốn nó được đưa vào, hãy bao gồm tệp và sau đó gọi hàm với các tham số bạn muốn.


2

Tôi biết điều này đã được một thời gian, tuy nhiên, tôi đang tự hỏi liệu cách tốt nhất để xử lý điều này có phải là sử dụng (các) biến phiên be không

Trong myFile.php của bạn, bạn sẽ có

<?php 

$MySomeVAR = $_SESSION['SomeVar'];

?> 

Và trong tệp gọi

<?php

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

?> 

Điều này sẽ phá vỡ nhu cầu "được đề xuất" để Chức năng hóa toàn bộ quá trình?


Bạn muốn biến nó thành một chức năng để không bắt đầu một loạt các yêu cầu. Vấn đề không phải là làm thế nào để đưa thông tin vào PHP được bao gồm - phương pháp của OP đã đạt được điều đó.
Neel

2

Tôi đã gặp phải vấn đề này khi thực hiện các biểu mẫu ajax trong đó tôi bao gồm nhiều tập trường. Lấy ví dụ một đơn xin việc. Tôi bắt đầu với một bộ tham chiếu chuyên nghiệp và tôi có một nút cho biết "Thêm nhiều hơn". Điều này thực hiện một cuộc gọi ajax với tham số $ count để bao gồm lại đầu vào được đặt (tên, liên hệ, điện thoại, v.v.) Điều này hoạt động tốt trên lệnh gọi trang đầu tiên khi tôi làm điều gì đó như:

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

Người dùng nhấn một nút thực hiện cuộc gọi ajax ajax('references.php?count=1'); Sau đó, bên trong tệp reference.php, tôi có một cái gì đó như:

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

Tôi cũng có các bao gồm động khác như thế này trên khắp trang web truyền các tham số. Sự cố xảy ra khi người dùng nhấn gửi và có lỗi biểu mẫu. Vì vậy, bây giờ để không trùng lặp mã để bao gồm những bộ trường bổ sung mà ở đó được bao gồm động, tôi đã tạo một hàm sẽ thiết lập bao gồm với các tham số GET thích hợp.

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

Hàm kiểm tra các tham số truy vấn và tự động thêm chúng vào biến $ _GET. Điều này đã hoạt động khá tốt cho các trường hợp sử dụng của tôi.

Đây là một ví dụ trên trang biểu mẫu khi được gọi:

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

Một ví dụ khác về việc bao gồm các tham số GET động để phù hợp với các trường hợp sử dụng nhất định. Hi vọng điêu nay co ich. Xin lưu ý rằng mã này không ở trạng thái hoàn chỉnh nhưng điều này đủ để giúp mọi người bắt đầu khá tốt cho trường hợp sử dụng của họ.


2

Cách đơn giản nhất để làm điều này là như thế này

index.php

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

second.php

<?php echo $active; ?>

Bạn có thể chia sẻ các biến vì bạn đang bao gồm 2 tệp bằng cách sử dụng "bao gồm"


0

Câu hỏi của bạn không rõ ràng lắm, nhưng nếu bạn muốn bao gồm tệp php (thêm nguồn của trang đó vào của bạn), bạn chỉ cần làm như sau:

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

Miễn là biến có tên là $ someVar trong myFile.php


0

Tôi cũng ở trong tình huống tương tự và tôi cần bao gồm một trang bằng cách gửi một số tham số ... Nhưng trên thực tế, điều tôi muốn làm là chuyển hướng trang ... nếu trường hợp của bạn là:

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

0

Nếu bất kỳ ai khác có câu hỏi này, khi sử dụng include('somepath.php');và tệp đó chứa một hàm, var cũng phải được khai báo ở đó. Sự bao gồm của$var=$var; không phải lúc nào cũng hiệu quả. Hãy thử chạy những điều này:

one.php:

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

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

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

hai.php:

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

0

Bạn cũng có thể sử dụng $GLOBALSđể giải quyết vấn đề này.

$myvar = "Hey";

include ("test.php");


echo $GLOBALS["myvar"];

-6

Làm cái này:

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

Và thêm vào insert.phptệp của bạn :

$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";
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.