Я должен показать страницу с моего php-скрипта, основываясь на определенных условиях. У меня есть условие if, и я делаю «include», если условие выполнено.
if(condition here){ include "myFile.php?id='$someVar'"; }
Теперь проблема в том, что на сервере есть файл «myFile.php», но я хочу сделать вызов этого файла с аргументом (id), и значение «id» будет меняться при каждом вызове.
Может кто-нибудь, пожалуйста, скажите мне, как это сделать? Благодарю.
Представьте, что включить, как это: копировать и вставлять содержимое включенного PHP-файла, который затем будет интерпретироваться. Изменения вообще не изменяются, поэтому вы можете получить доступ к $ someVar во включенном файле напрямую (даже если вы можете рассмотреть структуру на основе класса, в которой вы передаете $ someVar в качестве параметра или ссылаетесь на несколько глобальных переменных).
Вы могли бы так что-то вроде этого добиться эффекта, который вы после
$_GET['id']=$somevar; include('myFile.php');
Тем не менее, похоже, что вы используете это, например, как вызов какой-либо функции (вы называете его неоднократно с разными аргументами).
В этом случае, почему бы не превратить его в обычную функцию, включенную один раз и вызвав несколько раз?
Включение – это как вставка кода. Вы включаете в свой код код те же самые переменные, которые у вас есть в базовом коде. Таким образом, вы можете сделать это в своем основном файле:
<? if ($condition == true) { $id = 12345; include 'myFile.php'; } ?>
И в «myFile.php»:
<? echo 'My id is : ' . $id . '!'; ?>
Это приведет к выводу:
Мой идентификатор – 12345!
Если вы собираетесь писать это, включите вручную в файл 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); }
?>
Я часто использую эту конструкцию переменной переменной.
Я знаю, что это было какое-то время, однако, я задаюсь вопросом, может ли лучший способ справиться с этим, – использовать переменную (ы) сеанса,
В вашем myFile.php у вас будет
<?php $MySomeVAR = $_SESSION['SomeVar']; ?>
И в вызывающем файле
<?php session_start(); $_SESSION['SomeVar'] = $SomeVAR; include('myFile.php'); echo $MySomeVAR; ?>
в<?php session_start(); $_SESSION['SomeVar'] = $SomeVAR; include('myFile.php'); echo $MySomeVAR; ?>
Будет ли это обойти «предлагаемую» необходимость в функционализации всего процесса?
Я столкнулся с этим, когда делаю ajax-формы, где я включаю несколько наборов полей. Например, заявление о занятости. Я начинаю с одного профессионального набора ссылок, и у меня есть кнопка, которая говорит «Добавить больше». Это делает ajax-вызов с параметром $ count, чтобы снова включить введенный набор (имя, контакт, телефон и т. Д.). Это отлично работает при вызове первой страницы, поскольку я делаю что-то вроде:
<?php include('references.php');` ?>
в<?php include('references.php');` ?>
Пользователь нажимает кнопку, которая делает ajax-вызов ajax('references.php?count=1');
Тогда внутри файла reference.php у меня есть что-то вроде:
<?php $count = isset($_GET['count']) ? $_GET['count'] : 0; ?>
У меня также есть другая динамика, которая включает в себя все это на сайте, которые передают параметры. Проблема возникает, когда пользователь нажимает кнопку submit и появляется ошибка формы. Итак, теперь, чтобы не дублировать код, чтобы включить эти дополнительные наборы полей, где они динамически включены, я создал функцию, которая будет настраивать include с соответствующими параметрами 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]); } ?>
в<?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 для размещения определенных вариантов использования. Надеюсь это поможет. Обратите внимание, что этот код не находится в полном состоянии, но этого должно быть достаточно, чтобы кто-нибудь начал очень хорошо использовать их.
Ваш вопрос не очень ясен, но если вы хотите включить php-файл (добавьте источник этой страницы в свою), вам просто нужно сделать следующее:
if(condition){ $someVar=someValue; include "myFile.php"; }
Пока переменная называется $ someVar в myFile.php
Я был в той же ситуации, и мне нужно было включить страницу, отправив некоторые параметры … Но на самом деле то, что я хотел сделать, это перенаправить страницу … если это так, код:
<?php header("Location: http://localhost/planner/layout.php?page=dashboard"); exit(); ?>
Если кто-то еще задается этим вопросом, при использовании 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 $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]; } ?>
Вы также можете использовать $GLOBALS
для решения этой проблемы.
$myvar = "Hey"; include ("test.php"); echo $GLOBALS["myvar"];
Сделай это:
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"; }