How to pass variables between php scripts?
To pass info via GET:
header('Location: otherScript.php?var1=val1&var2=val2');
Session:
// first script
session_start();
$_SESSION['varName'] = 'varVal';
header('Location: second_script.php'); // go to other
// second script
session_start();
$myVar = $_SESSION['varName'];
Post: Take a look at this.
How to pass variables between 2 PHP files?
The simplest solution is to append a paramter to the url
<a href="two.php?clicked=1">Click here for 1.</a>
<a href="two.php?clicked=2">Click here for 2.</a>
then in PHP
if (isset($_GET['clicked'])) {
$clicked = (int)$_GET['clicked'];
} else {
$clicked = 0;
}
Passing PHP variables between scripts
The problem you're facing here is that you're including the z2.php
script in the first file. Now imagine include
as just the same php
code in the second script copied and pasted there. You start the session
which you should, to get a hang of the variables, but you try to echo
them before they're created. Try including the z2.php
after you define your Session
variables and see how it works from there.
To put it simply, try to do away with any include
. You took this example from W3Schools. Just create two separate files like you do. Call session_start()
and create session
variables and try to access the other file explicitly and see if you can access them.
From the documentation -
When a file is included, the code it contains inherits the variable scope of the line on which the include occurs. Any variables available at that line in the calling file will be available within the called file, from that point forward. However, all functions and classes defined in the included file have the global scope.
When you include
a script within another script like you did, you aren't really passing session variables. As a matter of fact what you did can be achieved without using Sessions at all.
//foo.php
<?php
$color = 'green';
$fruit = 'apple';
?>
//bar.php
<?php
echo "A $color $fruit"; // A
include 'foo.php';
echo "A $color $fruit"; // A green apple
?>
Something like this is totally legit and would work perfectly fine in PHP. If you actually want to check Session
variables in your current setting, you could instead of using include
do a redirect to z2.php
at the end of z1.php
by adding the following lines at the end of the file:
header("Location: z2.php");
die();
Hope this gets you started in the right direction.
how to pass variables between 2 php files
login.php
<?php
include("authenticate.php");
That essentially acts like pasting the contents of authenticate.php inside login.php so although it's technically 2 files, it acts as if it's just the one - however $data
is defined within the authenticate()
function and so is only scoped within that function.
In authenticate.php - return the data from the function
// verify user and password
if($bind = @ldap_bind($ldap, $user, $password))
{
$result = ldap_search($ldap,$ldap_dn, "(cn=*)") or die ("Error in search query: ".ldap_error($ldap));
$data = ldap_get_entries($ldap, $result);
// echo $data["url"]; // I assume this is just for debugging...
// return $data from the function which should be "truthy"
return $data;
}
else
{
// invalid name or password
return false;
}
In login.php - evaluate the return from the authenticate()
function - since PHP is loosely typed any (non-empty) string returned by the function can be evaluated as being "truthy" - the only other returns you have from the function are false
so...
// run information through authenticator
if($authData = authenticate($_POST['userLogin'],$_POST['userPassword']))
{
// authentication passed
// renamed the variable $authData just for clarity
header("Location: authenticate.php?$authData");
die();
}
else {
// authentication failed
$error = "Login failed: Incorrect user name, password, or rights<br />";
}
How do I pass variables and data from PHP to JavaScript?
There are actually several approaches to do this. Some require more overhead than others, and some are considered better than others.
In no particular order:
- Use AJAX to get the data you need from the server.
- Echo the data into the page somewhere, and use JavaScript to get the information from the DOM.
- Echo the data directly to JavaScript.
In this post, we'll examine each of the above methods, and see the pros and cons of each, as well as how to implement them.
1. Use AJAX to get the data you need from the server
This method is considered the best, because your server side and client side scripts are completely separate.
Pros
- Better separation between layers - If tomorrow you stop using PHP, and want to move to a servlet, a REST API, or some other service, you don't have to change much of the JavaScript code.
- More readable - JavaScript is JavaScript, PHP is PHP. Without mixing the two, you get more readable code on both languages.
- Allows for asynchronous data transfer - Getting the information from PHP might be time/resources expensive. Sometimes you just don't want to wait for the information, load the page, and have the information reach whenever.
- Data is not directly found on the markup - This means that your markup is kept clean of any additional data, and only JavaScript sees it.
Cons
- Latency - AJAX creates an HTTP request, and HTTP requests are carried over network and have network latencies.
- State - Data fetched via a separate HTTP request won't include any information from the HTTP request that fetched the HTML document. You may need this information (e.g., if the HTML document is generated in response to a form submission) and, if you do, will have to transfer it across somehow. If you have ruled out embedding the data in the page (which you have if you are using this technique) then that limits you to cookies/sessions which may be subject to race conditions.
Implementation Example
With AJAX, you need two pages, one is where PHP generates the output, and the second is where JavaScript gets that output:
get-data.php
/* Do some operation here, like talk to the database, the file-session
* The world beyond, limbo, the city of shimmers, and Canada.
*
* AJAX generally uses strings, but you can output JSON, HTML and XML as well.
* It all depends on the Content-type header that you send with your AJAX
* request. */
echo json_encode(42); // In the end, you need to `echo` the result.
// All data should be `json_encode`-d.
// You can `json_encode` any value in PHP, arrays, strings,
// even objects.
index.php (or whatever the actual page is named like)
<!-- snip -->
<script>
fetch("get-data.php")
.then((response) => {
if(!response.ok){ // Before parsing (i.e. decoding) the JSON data,
// check for any errors.
// In case of an error, throw.
throw new Error("Something went wrong!");
}
return response.json(); // Parse the JSON data.
})
.then((data) => {
// This is where you handle what to do with the response.
alert(data); // Will alert: 42
})
.catch((error) => {
// This is where you handle errors.
});
</script>
<!-- snip -->
The above combination of the two files will alert 42
when the file finishes loading.
Some more reading material
- Using the Fetch API
- How do I return the response from an asynchronous call?
2. Echo the data into the page somewhere, and use JavaScript to get the information from the DOM
This method is less preferable to AJAX, but it still has its advantages. It's still relatively separated between PHP and JavaScript in a sense that there is no PHP directly in the JavaScript.
Pros
- Fast - DOM operations are often quick, and you can store and access a lot of data relatively quickly.
Cons
- Potentially Unsemantic Markup - Usually, what happens is that you use some sort of
<input type=hidden>
to store the information, because it's easier to get the information out ofinputNode.value
, but doing so means that you have a meaningless element in your HTML. HTML has the<meta>
element for data about the document, and HTML 5 introducesdata-*
attributes for data specifically for reading with JavaScript that can be associated with particular elements. - Dirties up the Source - Data that PHP generates is outputted directly to the HTML source, meaning that you get a bigger and less focused HTML source.
- Harder to get structured data - Structured data will have to be valid HTML, otherwise you'll have to escape and convert strings yourself.
- Tightly couples PHP to your data logic - Because PHP is used in presentation, you can't separate the two cleanly.
Implementation Example
With this, the idea is to create some sort of element which will not be displayed to the user, but is visible to JavaScript.
index.php
<!-- snip -->
<div id="dom-target" style="display: none;">
<?php
$output = "42"; // Again, do some operation, get the output.
echo htmlspecialchars($output); /* You have to escape because the result
will not be valid HTML otherwise. */
?>
</div>
<script>
var div = document.getElementById("dom-target");
var myData = div.textContent;
</script>
<!-- snip -->
3. Echo the data directly to JavaScript
This is probably the easiest to understand.
Pros
- Very easily implemented - It takes very little to implement this, and understand.
- Does not dirty source - Variables are outputted directly to JavaScript, so the DOM is not affected.
Cons
- Tightly couples PHP to your data logic - Because PHP is used in presentation, you can't separate the two cleanly.
Implementation Example
Implementation is relatively straightforward:
<!-- snip -->
<script>
var data = <?php echo json_encode("42", JSON_HEX_TAG); ?>; // Don't forget the extra semicolon!
</script>
<!-- snip -->
Good luck!
Passing variables from one php file to another with sessions and resetting the session
Remove the include 'enter-content' on the 'content' page.
The include calls session_start(), that would be the second call on the same page.
Passing variables between PHP scripts
Add session_start() in the beginning of your code
--
<?php
session_start();
$_SESSION['Language'] = $_GET['Spanish'];
<?php
session_start();
$Language = $_SESSION['Language'];
Pass a variable to a PHP script running from the command line
The ?type=daily
argument (ending up in the $_GET
array) is only valid for web-accessed pages.
You'll need to call it like php myfile.php daily
and retrieve that argument from the $argv
array (which would be $argv[1]
, since $argv[0]
would be myfile.php
).
If the page is used as a webpage as well, there are two options you could consider. Either accessing it with a shell script and Wget, and call that from cron:
#!/bin/sh
wget http://location.to/myfile.php?type=daily
Or check in the PHP file whether it's called from the command line or not:
if (defined('STDIN')) {
$type = $argv[1];
} else {
$type = $_GET['type'];
}
(Note: You'll probably need/want to check if $argv
actually contains enough variables and such)
Related Topics
PHP Float Calculation 2 Decimal Point
Mysqli Commands Out of Sync; You Can't Run This Command Now
Multidimensional Array Difference PHP
PHP Strtotime Returns a 1970 Date When Date Column Is Null
Imagick Not Loading Images, with 'Nodecodedelegateforthisimageformat' Error Message
Url Querystring with a PHP Include
How to Display PHP Code in HTML
HTML Purifier: Removing an Element Conditionally Based on Its Attributes
PHP Loop Through Associative Arrays
PHP Domdocument Getting Attribute of Tag
Best Way to Check a Empty Array
Add New Data into PHP JSON String
How to Use Date() in Doctrine 2 Dql
How to Prevent Self Closing Tag in PHP Simplexml