PHP - sertakan file php dan juga kirim parameter kueri


89

Saya harus menampilkan halaman dari skrip php saya berdasarkan kondisi tertentu. Saya memiliki kondisi if dan saya melakukan "include" jika kondisinya memuaskan.

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

Sekarang masalahnya adalah server memiliki file "myFile.php" tetapi saya ingin membuat panggilan ke file ini dengan argumen (id) dan nilai "id" akan berubah dengan setiap panggilan.

Bisakah seseorang memberi tahu saya cara mencapai ini? Terima kasih.


2
Apa sebenarnya yang dilakukan myFile.php dalam kasus Anda? Kecuali Anda meminta penyertaan melalui HTTP, Anda tidak dapat menambahkan parameter ke nama file, tetapi Anda dapat memengaruhi perilakunya melalui semacam variabel global.
Paul Dixon

Jawaban:


211

Bayangkan penyertaan seperti apa adanya: Salinan & tempel konten dari file PHP yang disertakan yang kemudian akan diinterpretasikan. Tidak ada perubahan cakupan sama sekali, jadi Anda masih dapat mengakses $ someVar di file yang disertakan secara langsung (meskipun Anda mungkin mempertimbangkan struktur berbasis kelas di mana Anda meneruskan $ someVar sebagai parameter atau merujuk ke beberapa variabel global).


1
Perhatikan juga: $ _GET akan sama untuk semua file yang disertakan. Jadi jika di sanalah parameter kueri Anda disimpan, itu masih akan melihatnya. Juga perhatikan: ini bukan fungsi, di kelas.
Jonathon

49

Anda dapat melakukan sesuatu seperti ini untuk mencapai efek yang Anda inginkan:

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

Namun, sepertinya Anda menggunakan ini termasuk seperti beberapa jenis panggilan fungsi (Anda menyebutkan memanggilnya berulang kali dengan argumen yang berbeda).

Dalam hal ini, mengapa tidak mengubahnya menjadi fungsi biasa, termasuk sekali dan dipanggil beberapa kali?


1
Saya setuju, ini pasti terdengar seperti panggilan fungsi alih-alih menyertakan.
Brenton Alker

Apakah Anda berkode dan include("myFile.php?id=$somevar");identik?
tumpukan

Catatan: include("myFile.php?...tidak berfungsi sebagaimana mestinya.
BananaAcid

29

Termasuk seperti penyisipan kode. Anda mendapatkan kode yang disertakan variabel yang sama persis dengan yang Anda miliki di kode dasar Anda. Jadi Anda dapat melakukan ini di file utama Anda:

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

Dan di "myFile.php":

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

Ini akan menghasilkan:

ID saya adalah 12345!


7

Jika Anda akan menulis ini termasuk secara manual di file PHP - jawaban Daff sempurna.

Bagaimanapun, jika Anda perlu melakukan apa yang menjadi pertanyaan awal, berikut adalah fungsi sederhana kecil untuk mencapai itu:

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

?>

Saya sering menggunakan konstruksi variabel variabel ini.


4

Di file yang Anda sertakan, bungkus html dalam sebuah fungsi.

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

Di file di mana Anda ingin memasukkannya, sertakan file tersebut dan kemudian panggil fungsi dengan parameter yang Anda inginkan.


2

Saya tahu ini sudah lama, namun, saya bertanya-tanya apakah cara terbaik untuk menangani ini adalah dengan memanfaatkan variabel sesi be

Di myFile.php Anda, Anda akan memilikinya

<?php 

$MySomeVAR = $_SESSION['SomeVar'];

?> 

Dan di file panggilan

<?php

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

?> 

Apakah ini akan menghindari kebutuhan yang "disarankan" untuk memfungsikan seluruh proses?


Anda ingin membuatnya berfungsi sehingga Anda tidak memulai banyak permintaan. Masalahnya bukanlah bagaimana mendapatkan informasi ke PHP yang disertakan - metode OP sudah mencapai itu.
Neel

2

Saya telah mengalami ini saat melakukan formulir ajax di mana saya menyertakan beberapa set bidang. Mengambil contoh lamaran kerja. Saya memulai dengan satu set referensi profesional dan saya memiliki tombol yang bertuliskan "Tambahkan Lebih Banyak". Ini melakukan panggilan ajax dengan parameter $ count untuk memasukkan set input lagi (nama, kontak, telepon .. dll) Ini berfungsi dengan baik pada panggilan halaman pertama karena saya melakukan sesuatu seperti:

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

Pengguna menekan tombol yang membuat panggilan ajax ajax('references.php?count=1'); Kemudian di dalam file reference.php saya memiliki sesuatu seperti:

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

Saya juga memiliki penyertaan dinamis lainnya seperti ini di seluruh situs yang meneruskan parameter. Masalahnya terjadi ketika pengguna menekan kirim dan ada kesalahan formulir. Jadi sekarang untuk tidak menduplikasi kode untuk memasukkan set field ekstra yang disertakan secara dinamis, saya membuat fungsi yang akan mengatur include dengan params GET yang sesuai.

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

Fungsi ini memeriksa parameter kueri, dan secara otomatis menambahkannya ke variabel $ _GET. Ini telah bekerja cukup baik untuk kasus penggunaan saya.

Berikut adalah contoh di halaman formulir saat dipanggil:

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

Contoh lain dari memasukkan parameter GET secara dinamis untuk mengakomodasi kasus penggunaan tertentu. Semoga ini membantu. Harap dicatat kode ini tidak dalam keadaan lengkap tetapi ini seharusnya cukup untuk membuat siapa pun memulai dengan cukup baik untuk kasus penggunaan mereka.


2

Cara termudah untuk melakukannya adalah seperti ini

index.php

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

second.php

<?php echo $active; ?>

Anda dapat berbagi variabel karena Anda menyertakan 2 file dengan menggunakan "sertakan"


0

Pertanyaan Anda tidak terlalu jelas, tetapi jika Anda ingin menyertakan file php (tambahkan sumber halaman itu ke Anda), Anda hanya perlu melakukan hal berikut:

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

Selama variabel itu bernama $ someVar di myFile.php


0

Saya berada dalam situasi yang sama dan saya perlu menyertakan halaman dengan mengirimkan beberapa parameter ... Tetapi pada kenyataannya yang ingin saya lakukan adalah mengarahkan ulang halaman ... jika kasusnya untuk Anda, kodenya adalah:

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

0

Jika ada orang lain dalam pertanyaan ini, saat menggunakan include('somepath.php');dan file itu berisi fungsi, var juga harus dideklarasikan di sana. Dimasukkannya $var=$var;tidak selalu berhasil. Coba jalankan ini:

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

Anda juga dapat menggunakan $GLOBALSuntuk mengatasi masalah ini.

$myvar = "Hey";

include ("test.php");


echo $GLOBALS["myvar"];

-6

Melakukan hal ini:

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

Dan tambahkan ke insert.phpfile Anda :

$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";
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.