PHP - bir php dosyası ekleyin ve ayrıca sorgu parametreleri gönderin


89

Belirli koşullara bağlı olarak php betiğimden bir sayfa göstermem gerekiyor. Bir if koşulum var ve koşul karşılanırsa bir "dahil et" yapıyorum.

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

Şimdi sorun şu ki, sunucuda bir "myFile.php" dosyası var, ancak bu dosyaya bir argüman (id) ile bir çağrı yapmak istiyorum ve "id" değeri her çağrıda değişecek.

Lütfen birisi bana bunu nasıl başaracağımı söyleyebilir mi? Teşekkürler.


2
MyFile.php sizin durumunuzda gerçekte ne yapıyor? HTTP üzerinden dahil etme isteğinde bulunmadığınız sürece, dosya adına parametreler ekleyemezsiniz, ancak davranışını bir tür genel değişken aracılığıyla etkileyebilirsiniz.
Paul Dixon

Yanıtlar:


211

Dahil et'i olduğu gibi düşünün: Dahil edilen PHP dosyasının içeriğinin daha sonra yorumlanacak bir kopyası ve yapıştırılması. Hiçbir kapsam değişikliği yoktur, bu nedenle dahil edilen dosyadaki $ someVar'a doğrudan erişebilirsiniz (buna rağmen, $ someVar'ı bir parametre olarak geçirdiğiniz veya birkaç genel değişkene başvurduğunuz sınıf tabanlı bir yapıyı düşünseniz bile).


1
Ayrıca şunu unutmayın: $ _GET dahil edilen tüm dosyalar için aynı olacaktır. Dolayısıyla, sorgu parametrelerinizin depolandığı yer burasıysa, yine de onları görmeye devam edecektir. Ayrıca not: bir sınıfın işlevi değildir.
Jonathon

49

Peşinde olduğunuz etkiyi elde etmek için buna benzer bir şey yapabilirsiniz:

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

Ancak, bunu bir tür işlev çağrısı gibi kullanıyormuşsunuz gibi geliyor (farklı argümanlarla tekrar tekrar çağırmaktan bahsediyorsunuz).

Bu durumda, neden onu bir kez dahil edilen ve birden çok kez çağrılan normal bir işleve dönüştürmüyorsunuz?


1
Katılıyorum, bu kesinlikle bir dahil etme yerine bir işlev çağrısı olması gerektiği gibi geliyor.
Brenton Alker

Kod ve include("myFile.php?id=$somevar");aynı mısınız?
yığın

Not: include("myFile.php?...amaçlandığı gibi çalışmaz.
BananaAcid

29

Dahil etme, kod eklemeye benzer. Dahil edilen kodunuza, temel kodunuzda sahip olduğunuz aynı değişkenleri alırsınız. Yani bunu ana dosyanızda yapabilirsiniz:

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

Ve "myFile.php" içinde:

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

Bu çıktı:

Kimliğim 12345!


7

Bunu PHP dosyasına manuel olarak yazacaksanız - Daff'ın cevabı mükemmel.

Her neyse, ilk soruyu yapmanız gerekiyorsa, işte bunu başarmak için küçük ve basit bir işlev:

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

?>

Bu değişken değişken yapıyı çok sık kullanıyorum.


4

Eklediğiniz dosyada html'yi bir işlevin içine sarın.

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

Dahil edilmesini istediğiniz dosyaya, dosyayı ekleyin ve ardından işlevi istediğiniz parametrelerle çağırın.


2

Bunun bir süredir olduğunu biliyorum, ancak bunun üstesinden gelmenin en iyi yolunun be oturum değişken (ler) ini kullanmak olup olmadığını merak ediyorum.

MyFile.php dosyanızda

<?php 

$MySomeVAR = $_SESSION['SomeVar'];

?> 

Ve arayan dosyada

<?php

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

?> 

Bu, tüm süreci İşlevselleştirme "önerilen" ihtiyacını ortadan kaldırır mı?


Bunu bir işlev haline getirmek istersiniz, böylece bir sürü istek başlatmazsınız. Sorun, bilginin dahil edilen PHP'ye nasıl ulaştırılacağı değil - OP'nin yöntemi zaten bunu başardı.
Neel

2

Birden çok alan kümesini dahil ettiğim ajax formlarını yaparken bununla karşılaştım. Örneğin bir istihdam başvurusu almak. Profesyonel bir referans setiyle başlıyorum ve "Daha Fazla Ekle" yazan bir düğmem var. Bu, girdi kümesini tekrar dahil etmek için $ count parametresiyle bir ajax araması yapar (isim, kişi, telefon ... vb.) Bu, aşağıdaki gibi bir şey yaptığım için ilk sayfa aramasında iyi çalışıyor:

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

Kullanıcı bir ajax çağrısı yapan bir düğmeye bastığında ajax('references.php?count=1'); Referanslar.php dosyasının içinde şöyle bir şey var:

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

Ayrıca site genelinde parametreleri geçiren buna benzer başka dinamik içeriklerim de var. Sorun, kullanıcı gönder düğmesine bastığında ve bir form hatası olduğunda ortaya çıkar. Şimdi, dinamik olarak dahil edilen fazladan alan kümelerini dahil etmek için kodu çoğaltmamak için, dahil etmeyi uygun GET parametreleriyle ayarlayacak bir işlev oluşturdum.

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

İşlev, sorgu parametrelerini kontrol eder ve bunları otomatik olarak $ _GET değişkenine ekler. Bu, kullanım durumlarım için oldukça iyi çalıştı.

İşte çağrıldığında form sayfasında bir örnek:

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

Belirli kullanım durumlarına uyum sağlamak için GET parametrelerini dinamik olarak dahil etmenin başka bir örneği. Bu yardımcı olur umarım. Lütfen bu kodun tam durumunda olmadığını unutmayın, ancak bu, herkesin kullanım durumları için oldukça iyi bir başlangıç ​​yapması için yeterli olmalıdır.


2

Bunu yapmanın en basit yolu şudur

index.php

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

second.php

<?php echo $active; ?>

2 dosya eklediğiniz için değişkenleri "include" kullanarak paylaşabilirsiniz.


0

Sorunuz çok net değil, ancak php dosyasını dahil etmek istiyorsanız (o sayfanın kaynağını kendinize ekleyin), sadece aşağıdakileri yapmanız gerekir:

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

MyFile.php dosyasında değişken $ someVar olarak adlandırıldığı sürece


0

Ben de aynı durumdaydım ve bazı parametreler göndererek bir sayfa eklemem gerekiyordu ... Ama gerçekte yapmak istediğim, sayfayı yeniden yönlendirmek ... Sizin için durum böyleyse, kod:

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

0

Bu soruda başka biri varsa, kullanım sırasında include('somepath.php');ve bu dosya bir işlev içeriyorsa, var da orada bildirilmelidir. Dahil edilmesi $var=$var;her zaman işe yaramayacaktır. Şunları çalıştırmayı deneyin:

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

$GLOBALSBu sorunu çözmek için de kullanabilirsiniz .

$myvar = "Hey";

include ("test.php");


echo $GLOBALS["myvar"];

-6

Bunu yap:

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

Ve insert.phpdosyanıza ekleyin :

$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";
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.