Bird
Raised Fist0
PHPprogramming~10 mins

$_REQUEST behavior in PHP - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - $_REQUEST behavior
Client sends HTTP request
↓
Server receives request
↓
PHP populates superglobals
↓
$_REQUEST combines all three
↓
Script accesses $_REQUEST values
When a PHP script runs, it collects data sent by the client via GET, POST, and COOKIE methods into separate arrays, then combines them into $_REQUEST for easy access.
Execution Sample
PHP
<?php
// URL: script.php?name=Alice
// POST data: age=30
// Cookie: city=Paris

print_r($_REQUEST);
?>
This code prints all input data from GET, POST, and COOKIE combined in $_REQUEST.
Execution Table
StepSourceData Received$_GET$_POST$_COOKIE$_REQUESTOutput
1Client sends GETname=Alice{"name":"Alice"}{}{}{"name":"Alice"}{}
2Client sends POSTage=30{"name":"Alice"}{"age":"30"}{}{"name":"Alice", "age":"30"}{}
3Client sends COOKIEcity=Paris{"name":"Alice"}{"age":"30"}{"city":"Paris"}{"name":"Alice", "age":"30", "city":"Paris"}{}
4PHP script runsAccess $_REQUEST{"name":"Alice"}{"age":"30"}{"city":"Paris"}{"name":"Alice", "age":"30", "city":"Paris"}{}
5Print $_REQUESTOutput combined array{"name":"Alice"}{"age":"30"}{"city":"Paris"}{"name":"Alice", "age":"30", "city":"Paris"}Array ( [name] => Alice [age] => 30 [city] => Paris )
💡 All input sources combined into $_REQUEST and printed.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
$_GET{}{"name":"Alice"}{"name":"Alice"}{"name":"Alice"}{"name":"Alice"}
$_POST{}{}{"age":"30"}{"age":"30"}{"age":"30"}
$_COOKIE{}{}{}{"city":"Paris"}{"city":"Paris"}
$_REQUEST{}{"name":"Alice"}{"name":"Alice", "age":"30"}{"name":"Alice", "age":"30", "city":"Paris"}{"name":"Alice", "age":"30", "city":"Paris"}
Key Moments - 3 Insights
Why does $_REQUEST contain data from $_GET, $_POST, and $_COOKIE all together?
Because PHP automatically merges these three superglobals into $_REQUEST, so you can access any input source from one array, as shown in execution_table rows 3 and 4.
If a key exists in both $_GET and $_POST, which value appears in $_REQUEST?
The value depends on PHP's variables_order configuration, but usually $_POST overrides $_GET in $_REQUEST. This is important to check in your PHP settings.
Can $_REQUEST be empty even if $_GET or $_POST have data?
Yes, if PHP's variables_order does not include 'G', 'P', or 'C', $_REQUEST might not be populated. See execution_table step 4 where $_REQUEST is built.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 3, what keys does $_REQUEST contain?
A["age", "city"]
B["name", "age"]
C["name", "age", "city"]
D["name", "city"]
💡 Hint
Check the $_REQUEST column at step 3 in the execution_table.
At which step does $_POST get its value?
AStep 2
BStep 1
CStep 3
DStep 4
💡 Hint
Look at the $_POST column in execution_table rows.
If the client sends no cookies, how would $_REQUEST change?
AIt would be empty
BIt would not include the 'city' key
CIt would only have 'city' key
DIt would only have 'age' key
💡 Hint
Refer to variable_tracker for $_COOKIE and $_REQUEST values.
Concept Snapshot
$_REQUEST is a PHP superglobal array
that combines $_GET, $_POST, and $_COOKIE data.
It lets you access all input sources in one place.
Order of merging depends on PHP settings.
Use it carefully to avoid conflicts.
Full Transcript
When a PHP script runs, it receives data from the client via GET parameters, POST form data, and cookies. PHP stores these separately in $_GET, $_POST, and $_COOKIE arrays. Then, PHP merges these three arrays into one called $_REQUEST. This means you can access any input data from one array instead of checking each separately. For example, if the client sends a GET parameter 'name=Alice', a POST parameter 'age=30', and a cookie 'city=Paris', then $_REQUEST will have all three keys: 'name', 'age', and 'city'. The exact order of merging depends on PHP's configuration, but usually POST overrides GET if keys clash. This behavior is shown step-by-step in the execution table and variable tracker. Understanding $_REQUEST helps you handle user input easily but be careful with key conflicts and security.

Practice

(1/5)
1. What does the PHP superglobal $_REQUEST contain?
easy
A. Data from GET, POST, and COOKIE combined
B. Only data sent via GET method
C. Only data sent via POST method
D. Only data stored in cookies

Solution

  1. Step 1: Understand the purpose of $_REQUEST

    $_REQUEST is designed to collect data from multiple sources: GET, POST, and COOKIE.
  2. Step 2: Identify what $_REQUEST includes

    It merges these three superglobals into one array for easier access.
  3. Final Answer:

    Data from GET, POST, and COOKIE combined -> Option A
  4. Quick Check:

    $_REQUEST = GET + POST + COOKIE [OK]
Hint: Remember: $_REQUEST mixes GET, POST, and COOKIE data [OK]
Common Mistakes:
  • Thinking $_REQUEST only contains GET or POST data
  • Confusing $_REQUEST with $_POST or $_GET
  • Assuming $_REQUEST excludes cookies
2. Which of the following is the correct way to access a form field named username using $_REQUEST in PHP?
easy
A. $_REQUEST->username
B. request['username']
C. $_REQUEST.username
D. $_REQUEST['username']

Solution

  1. Step 1: Recall PHP array syntax

    PHP superglobals like $_REQUEST are associative arrays accessed with square brackets and quotes for keys.
  2. Step 2: Identify correct syntax for accessing 'username'

    The correct syntax is $_REQUEST['username']. Using arrows or dots is invalid for arrays.
  3. Final Answer:

    $_REQUEST['username'] -> Option D
  4. Quick Check:

    Array access uses brackets and quotes [OK]
Hint: Use square brackets with quotes for $_REQUEST keys [OK]
Common Mistakes:
  • Using object notation (->) instead of array syntax
  • Using dot notation like in JavaScript
  • Forgetting quotes around the key
3. Given the following PHP code, what will be the output if the URL is script.php?color=red and the form sends color=blue via POST?
<?php
print_r($_REQUEST['color']);
?>
medium
A. red
B. Array
C. blue
D. Undefined index error

Solution

  1. Step 1: Understand the order of variables in $_REQUEST

    By default, PHP's $_REQUEST uses the order: GET, POST, COOKIE. POST data overrides GET if keys are the same.
  2. Step 2: Determine which value $_REQUEST['color'] holds

    Since POST sends color=blue, it overrides the GET color=red. So, $_REQUEST['color'] is 'blue'.
  3. Final Answer:

    blue -> Option C
  4. Quick Check:

    POST overrides GET in $_REQUEST [OK]
Hint: POST data overrides GET in $_REQUEST by default [OK]
Common Mistakes:
  • Assuming GET value appears first
  • Confusing $_REQUEST with $_GET or $_POST
  • Expecting an array output
4. Consider this PHP snippet:
<?php
print_r($_REQUEST['user']);
?>

If the form sends no 'user' field and the URL has no 'user' parameter, what error will occur and how to fix it?
medium
A. No error; prints empty string
B. Notice: Undefined index; fix by checking with isset()
C. Warning: Invalid argument; fix by casting to string
D. Fatal error: Undefined variable; fix by declaring variable

Solution

  1. Step 1: Identify the error from accessing missing key

    Accessing $_REQUEST['user'] when 'user' is not set causes a Notice: Undefined index.
  2. Step 2: Fix by checking if key exists

    Use isset($_REQUEST['user']) before accessing to avoid the notice.
  3. Final Answer:

    Notice: Undefined index; fix by checking with isset() -> Option B
  4. Quick Check:

    Check keys with isset() to avoid notices [OK]
Hint: Always check isset() before accessing $_REQUEST keys [OK]
Common Mistakes:
  • Ignoring undefined index notices
  • Confusing undefined index with undefined variable
  • Assuming no error occurs when key missing
5. You want to safely get a user's preferred language from either GET, POST, or COOKIE using $_REQUEST, but prefer POST over GET and GET over COOKIE. Which code snippet correctly respects this priority?
hard
A. if(isset($_POST['lang'])) { $lang = $_POST['lang']; } elseif(isset($_GET['lang'])) { $lang = $_GET['lang']; } elseif(isset($_COOKIE['lang'])) { $lang = $_COOKIE['lang']; } else { $lang = 'en'; }
B. $lang = $_REQUEST['lang'] ?? 'en';
C. $lang = $_COOKIE['lang'] ?? $_GET['lang'] ?? $_POST['lang'] ?? 'en';
D. $lang = $_GET['lang'] ?? $_POST['lang'] ?? $_COOKIE['lang'] ?? 'en';

Solution

  1. Step 1: Understand priority order requirement

    The priority is POST > GET > COOKIE, so check in that order.
  2. Step 2: Analyze each option's order

    if(isset($_POST['lang'])) { $lang = $_POST['lang']; } elseif(isset($_GET['lang'])) { $lang = $_GET['lang']; } elseif(isset($_COOKIE['lang'])) { $lang = $_COOKIE['lang']; } else { $lang = 'en'; } checks POST first, then GET, then COOKIE, assigning default 'en' if none set. $lang = $_REQUEST['lang'] ?? 'en'; uses $_REQUEST which merges but order depends on php.ini and is less explicit. Options C and D check in wrong orders.
  3. Final Answer:

    Option A code snippet -> Option A
  4. Quick Check:

    Explicit checks respect priority best [OK]
Hint: Check POST, then GET, then COOKIE explicitly for priority [OK]
Common Mistakes:
  • Relying on $_REQUEST without knowing order
  • Checking keys in wrong priority order
  • Not providing a default value
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard