PHP - include a php file and also send query parameters

后端 未结 13 1124
长发绾君心
长发绾君心 2020-11-27 03:46

I have to show a page from my php script based on certain conditions. I have an if condition and am doing an \"include\" if the condition is satisfied.

if(co         


        
相关标签:
13条回答
  • 2020-11-27 04:23

    An include is just like a code insertion. You get in your included code the exact same variables you have in your base code. So you can do this in your main file :

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

    And in "myFile.php" :

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

    This will output :

    My id is 12345 !

    0 讨论(0)
  • 2020-11-27 04:24

    I have ran into this when doing ajax forms where I include multiple field sets. Taking for example an employment application. I start out with one professional reference set and I have a button that says "Add More". This does an ajax call with a $count parameter to include the input set again (name, contact, phone.. etc) This works fine on first page call as I do something like:

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

    User presses a button that makes an ajax call ajax('references.php?count=1'); Then inside the references.php file I have something like:

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

    I also have other dynamic includes like this throughout the site that pass parameters. The problem happens when the user presses submit and there is a form error. So now to not duplicate code to include those extra field sets that where dynamically included, i created a function that will setup the include with the appropriate GET params.

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

    The function checks for query params, and automatically adds them to the $_GET variable. This has worked pretty good for my use cases.

    Here is an example on the form page when called:

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

    Just another example of including GET params dynamically to accommodate certain use cases. Hope this helps. Please note this code isn't in its complete state but this should be enough to get anyone started pretty good for their use case.

    0 讨论(0)
  • 2020-11-27 04:31

    If anyone else is on this question, when using include('somepath.php'); and that file contains a function, the var must be declared there as well. The inclusion of $var=$var; won't always work. Try running these:

    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 讨论(0)
  • 2020-11-27 04:33

    In the file you include, wrap the html in a function.

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

    In the file where you want it to be included, include the file and then call the function with the parameters you want.

    0 讨论(0)
  • 2020-11-27 04:34

    I know this has been a while, however, Iam wondering whether the best way to handle this would be to utilize the be session variable(s)

    In your myFile.php you'd have

    <?php 
    
    $MySomeVAR = $_SESSION['SomeVar'];
    
    ?> 
    

    And in the calling file

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

    Would this circumvent the "suggested" need to Functionize the whole process?

    0 讨论(0)
  • 2020-11-27 04:35

    If you are going to write this include manually in the PHP file - the answer of Daff is perfect.

    Anyway, if you need to do what was the initial question, here is a small simple function to achieve that:

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

    ?>

    I'm using this variable variable construction very often.

    0 讨论(0)
提交回复
热议问题