PHP - รวมไฟล์ php และส่งพารามิเตอร์การค้นหา


89

ฉันต้องแสดงเพจจากสคริปต์ php ของฉันตามเงื่อนไขบางประการ ฉันมีเงื่อนไข if และกำลังทำ "รวม" หากเงื่อนไขเป็นที่พอใจ

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

49

คุณสามารถทำสิ่งนี้เพื่อให้ได้ผลตามที่คุณต้องการ:

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

อย่างไรก็ตามดูเหมือนว่าคุณกำลังใช้สิ่งนี้รวมถึงการเรียกใช้ฟังก์ชันบางประเภท (คุณพูดถึงการเรียกมันซ้ำ ๆ ด้วยอาร์กิวเมนต์ที่แตกต่างกัน)

ในกรณีนี้ทำไมไม่เปลี่ยนเป็นฟังก์ชันปกติรวมครั้งเดียวและเรียกหลาย ๆ ครั้ง


1
ฉันเห็นด้วยแน่นอนว่ามันควรจะเป็นการเรียกใช้ฟังก์ชันแทนการรวม
Brenton Alker

คุณเป็นรหัสและinclude("myFile.php?id=$somevar");เหมือนกันหรือไม่?
stack

หมายเหตุ: 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

ฉันรู้ว่านี่เป็นเวลานานแล้ว แต่ Iam สงสัยว่าวิธีที่ดีที่สุดในการจัดการสิ่งนี้คือการใช้ตัวแปร be session หรือไม่

ใน myFile.php ของคุณคุณมี

<?php 

$MySomeVAR = $_SESSION['SomeVar'];

?> 

และในไฟล์โทร

<?php

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

?> 

สิ่งนี้จะหลีกเลี่ยงความจำเป็นที่ "แนะนำ" ในการทำงานของกระบวนการทั้งหมดหรือไม่


คุณต้องการทำให้เป็นฟังก์ชันเพื่อที่คุณจะได้ไม่เริ่มต้นคำขอจำนวนมาก ปัญหาไม่ได้อยู่ที่วิธีการรับข้อมูลไปยังวิธีการของ PHP ที่รวมอยู่ - OP นั้นประสบความสำเร็จแล้ว
Neel

2

ฉันพบสิ่งนี้เมื่อทำแบบฟอร์ม ajax ที่ฉันรวมชุดฟิลด์หลายชุด ยกตัวอย่างการสมัครงาน ฉันเริ่มต้นด้วยชุดข้อมูลอ้างอิงระดับมืออาชีพหนึ่งชุดและฉันมีปุ่มที่ระบุว่า "เพิ่มเพิ่มเติม" นี่เป็นการโทร ajax ด้วยพารามิเตอร์ $ count เพื่อรวมชุดอินพุตอีกครั้ง (ชื่อผู้ติดต่อโทรศัพท์ .. ฯลฯ ) สิ่งนี้ใช้ได้ดีในการเรียกหน้าแรกเมื่อฉันทำสิ่งที่ชอบ:

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

คุณสามารถแชร์ตัวแปรได้เนื่องจากคุณมี 2 ไฟล์โดยใช้ "รวม"


0

คำถามของคุณยังไม่ชัดเจนนัก แต่ถ้าคุณต้องการรวมไฟล์ php (เพิ่มซอร์สของเพจนั้นเป็นของคุณ) คุณต้องดำเนินการดังนี้:

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

ตราบใดที่ตัวแปรนั้นชื่อ $ someVar ใน myFile.php


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

สอง.php:

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


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