tags:

views:

745

answers:

5

How do I pass information between PHP pages?

For example, I have a PHP script to process login input from a form, and then a separate PHP script to process further input for the user. However, I want the second PHP file to receive the input from the login form. In essence, I do not want the same script being run twice for the login.

+1  A: 

If the data isn't that large you could redirect the user to the 2nd page with the data passed via the URL (GET variables). Otherwise, just run the seconds method in the same page, and use a function to do the final parsing of the data which can be included as the above user suggests.

Rob Golding
+4  A: 

You can pass information between pages using GET or POST methods. GET would append the information you wish to pass as a querystring on the url such as:

loginprocess.php?id=JSmith&pword=HelloThere (this isn't exactly recommended for private information)

The other method is to send the information via POST so that it is hidden from the querystring.

More examples can be seen here: http://www.tizag.com/phpT/postget.php

TheTXI
+6  A: 

You are looking for POST and GET variables, it's done in the method parameter of your HTML form:

login.php

<form name="myform" action="secondpage.php" method="post">
    <div>Username: <input type="text" name="username" value="" /></div>
    <div>Password: <input type="password" name="password" value="" /></div>
</form>

Then in this other page:

secondpage.php

$username = isset($_POST['username']) ? $_POST['username'] : '';
$password = isset($_POST['password']) ? $_POST['password'] : '';
if ($username != '') {       
    // do your validations here
}

Explanation

When you use the GET method, the parameters are visible in the URL, so let's say we change the method="GET" in login.php, you'll end up with something like secondpage.php?username=jsmith&password=1234. And then you could get the values using $_GET['username'].

Using POST makes it possible to send larger quantity of data (there is a vague limit to the size of a URL) and it's not visible in the URL. You should note though that it's still sent in clear text, so it does not means it's secure.

POST and GET were made for different purposes. GET should be use to extract information that you could want to extract again in the future, information that is not special to this very instant. It's useful to have mypage.php?product=123 because you'll potentially want to send this URL to a friend. A POST should be used when you'll modify the state of data: updating a product, creating a new user, deleting an article and so on. It's something you want to happen once.

Structure

In conclusion, I just want to add that normally you wouldn't necessarily want to use another PHP script just to avoid some code to run or not. So without knowing the specifics of your project, I can nevertheless say that you would probably want to do something like that to benefit from the same code (such as the form's HTML).

Please note it's simplified code.

login.php

<?php

    $error = false;
    $username = isset($_POST['username']) ? $_POST['username'] : '';
    $password = isset($_POST['password']) ? $_POST['password'] : '';
    // if, and only if something was posted... so not on first display
    if ($username != '') {       
        // do your validations here
        if ($properlyLogged) {
            session_start();
            $_SESSION['loggedAt'] = time();
            header('Location: http://localhost/secondpage.php');
            exit();
        } else {
            $error = true;
        }
    }

?>

<?php if($error): ?>Login failed. Please try again.<?php endif; ?>
<form name="myform" action="login.php" method="post">
    <div>Username: <input type="text" name="username" value="<?php echo($username) ?>" /></div>
    <div>Password: <input type="password" name="password" value="" /></div>
</form>

secondpage.php

<?php
    session_start();
    if (!isset($_SESSION['loggedAt'])) {
        // if not properly logged in, return user to login
        header('Location: http://localhost/login.php');
        exit();
    }
?>
You are now logged in!

Hope that's what you were looking for!

lpfavreau
+1  A: 

Just a small extra to what was written before: the limit on the GET (parametrize URL) is a full URL, which means 1024 characters. If you need more than that, you have to use post.

Liorsion
Well, as I wrote in my answer (see the link), it's more vague than that but it's true there's a limit. It just depends on the webserver used and the browser used. IE seems to stops at 2048 characters. Apache at 4000. And you shouldn't use GET for POSTing, it's just not made for that. :-)
lpfavreau
since today you don't know what proxies are on your way (more than before, since users are also browsing through mobile..) I would be careful to go over 1024, which as far as I remember, was the RFC, but I guess the exact number isn't that important..
Liorsion
A: 

You can take advantage of PHP sessions to share data amongst your PHP scripts. Basic example below, read more here.

login.php:

<?php

// initializes the session //
session_start();

// save user name and password to session //
$_SESSION["username"] = 'someuser';
$_SESSION["password"] = 'somepassword';
$_sESSION["valid"] = true;

?>

secondpage.php:

<?php

// start session handler //
session_start();

// check for a valid session //
if (!isset($_SESSION["valid"])) header("Location: login.php\n\n");

// continue page code here //

?>
Brandon