Superglobals in PHP – $_GET, $_POST, $_REQUEST, $_SERVER

Table of Contents

  • Introduction to Superglobals
  • What Are Superglobals?
  • Overview of Common Superglobals
    • $_GET
    • $_POST
    • $_REQUEST
    • $_SERVER
  • Working with $_GET
  • Working with $_POST
  • Using $_REQUEST to Access Data
  • Accessing Information with $_SERVER
  • Practical Use Cases for Superglobals
  • Security Considerations When Using Superglobals
  • Best Practices for Using Superglobals
  • Summary

Introduction to Superglobals

In PHP, superglobals are built-in global arrays that provide access to various types of data across different scopes, making them an essential part of web development. These variables allow you to interact with external data and retrieve information that can be used in your applications.

Superglobals include arrays like $_GET, $_POST, $_REQUEST, and $_SERVER. They can access and manipulate data provided by the user or the server, making them invaluable for handling forms, URLs, HTTP headers, server configurations, and more.


What Are Superglobals?

Superglobals are PHP global arrays that are always accessible, regardless of scope. This means they can be accessed from anywhere in your script, whether inside functions or outside of them. Superglobals are automatically populated by PHP with data from various sources, such as user input, server variables, or HTTP headers.

Here are some of the most commonly used superglobals in PHP:

  • $_GET: Used to collect form data after submitting an HTML form with the GET method.
  • $_POST: Used to collect form data after submitting an HTML form with the POST method.
  • $_REQUEST: Collects data from both $_GET and $_POST as well as $_COOKIE.
  • $_SERVER: Contains information about the server environment, such as headers, paths, and script locations.

Overview of Common Superglobals

1. $_GET

The $_GET superglobal is used to collect data sent via the URL using the GET method. It is particularly useful when passing data in the URL (such as query strings) or retrieving data from URL parameters.

For example, consider the URL:

http://example.com/index.php?name=John&age=25

You can retrieve the name and age parameters using $_GET:

<?php
$name = $_GET['name']; // John
$age = $_GET['age']; // 25
echo "Name: " . $name . ", Age: " . $age;
?>
Key Points:
  • Data is visible in the URL.
  • Typically used for non-sensitive data (e.g., search queries).
  • Limited by URL length constraints (typically around 2048 characters).

2. $_POST

The $_POST superglobal is used to collect form data sent via the POST method. It is used when submitting forms where the data should not be visible in the URL (for example, when submitting login credentials).

<form method="POST" action="submit.php">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" />
</form>

In the submit.php file, you can access the username and password values using $_POST:

<?php
$username = $_POST['username'];
$password = $_POST['password'];
echo "Username: " . $username . ", Password: " . $password;
?>
Key Points:
  • Data is not visible in the URL.
  • Typically used for sensitive data (e.g., login credentials, file uploads).
  • No URL length limit, making it ideal for larger data submissions.

3. $_REQUEST

The $_REQUEST superglobal is a combination of $_GET, $_POST, and $_COOKIE. It provides a unified way to access data from these sources, making it convenient for developers.

// If the form uses both GET and POST
$name = $_REQUEST['name'];
Key Points:
  • Allows access to both GET and POST data.
  • More general and flexible but can be less secure in some cases.
  • Use with caution when prioritizing security, as it may retrieve unintended data.

4. $_SERVER

The $_SERVER superglobal provides detailed information about the server environment and the current request. It includes information like the server name, request method, client IP, script name, and more.

<?php
echo $_SERVER['SERVER_NAME']; // Example: localhost
echo $_SERVER['REQUEST_METHOD']; // GET, POST, etc.
echo $_SERVER['REMOTE_ADDR']; // Client IP address
?>
Key Points:
  • Contains information about the server environment and current request.
  • Useful for determining server settings and processing requests.
  • Examples of $_SERVER keys:
    • $_SERVER['REQUEST_METHOD']: The HTTP method used (GET, POST, etc.).
    • $_SERVER['SERVER_NAME']: The name of the server (e.g., localhost).
    • $_SERVER['REMOTE_ADDR']: The IP address of the client.

Working with $_GET

The $_GET superglobal is typically used when you want to pass small amounts of data through the URL, such as search queries or user settings.

// URL: example.php?search=PHP
$search = $_GET['search']; // "PHP"
echo "You searched for: " . htmlspecialchars($search);

You should always sanitize data retrieved from $_GET to avoid security issues such as XSS (Cross-site Scripting).

$search = htmlspecialchars($_GET['search'], ENT_QUOTES, 'UTF-8');

Working with $_POST

The $_POST superglobal is more secure than $_GET because the data is sent in the body of the HTTP request, not in the URL. It’s commonly used for form submissions involving sensitive data, such as user logins and registrations.

// Login form handling example
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
// Process login logic here
}

Using $_REQUEST to Access Data

The $_REQUEST superglobal is convenient when you want to access data from both $_GET and $_POST. However, it can sometimes lead to issues with ambiguity, so it’s important to prioritize which source to access in critical situations.

// Accessing form data (from both GET and POST)
$name = $_REQUEST['name'];

Accessing Information with $_SERVER

$_SERVER provides useful information about the server and client request. It’s commonly used to determine the current script’s name, server environment, or user agent.

echo "Current script name: " . $_SERVER['PHP_SELF'];  // e.g., /index.php
echo "Request method: " . $_SERVER['REQUEST_METHOD']; // GET or POST

You can also retrieve client information such as IP address:

echo "Client IP: " . $_SERVER['REMOTE_ADDR'];

Practical Use Cases for Superglobals

Superglobals are used extensively in web development, especially in form handling, user authentication, and interacting with the server.

  1. Form Submission Handling:
    • $_POST for secure form submissions like logins, user registration, and file uploads.
    • $_GET for non-sensitive form submissions, such as search queries.
  2. Client-Side Interaction:
    • Use $_SERVER['REMOTE_ADDR'] to track the IP addresses of users submitting data.
  3. URL Parameters:
    • Retrieve query string data from the URL using $_GET to customize content or adjust application behavior dynamically.
  4. Server Configuration:
    • Utilize $_SERVER to gather server details, like the current script name or HTTP method used.

Security Considerations When Using Superglobals

When working with superglobals, security is paramount. Here are some security tips:

  • Sanitize User Input: Always sanitize data obtained from $_GET, $_POST, and $_REQUEST to prevent malicious attacks, such as SQL injection or XSS. $user_input = htmlspecialchars($_GET['input'], ENT_QUOTES, 'UTF-8');
  • Validate Data: Before using user input in your application, validate it to ensure that it meets the expected format or type.
  • Avoid Using $_REQUEST Excessively: While $_REQUEST is convenient, it can be less predictable, so it’s often better to access $_GET or $_POST directly.

Best Practices for Using Superglobals

  • Use $_POST for Sensitive Data: When handling login information or other sensitive data, use the POST method to prevent exposure in the URL.
  • Sanitize All Input: Never trust user input without proper validation and sanitization.
  • Limit Data Exposure: Be mindful of what data you send through the URL with $_GET, as it is visible to users.
  • Validate and Escape Output: Always escape data before outputting it to the browser to prevent XSS attacks.

Summary

In this module, we explored the four primary superglobals in PHP: $_GET, $_POST, $_REQUEST, and $_SERVER. We discussed their uses, differences, and how to work with them in a secure and efficient manner. Superglobals are essential for handling user input, interacting with the server, and managing various web development tasks.