I wrote a function getQuery($param) which returns data from the
function getQuery($param){
if(!empty(parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY))){
$queries = parse_url(strtok($_SERVER['REQUEST_URI'], PHP_URL_QUERY))['query'];
parse_str($queries, $query);
return $query[$param];
}
}
//url = https://example.com/test?name=Arun&[email protected]
echo getQuery("name"); // Output will be:Arun
But if the URL parameters contain "6" this function is only returning query data until that character
//i.e. if URL = https://example.com/test?name=Arun&[email protected]
echo getQuery("email"); // Expected Output: [email protected]
// Original Output: arun05
Is there any solution to fix this bug? Someone, please help
Edit:
Thanks for the reply. I found another method to write this function
<?php
function testgetQuery($param){
$queries = explode("&",explode("?",$_SERVER['REQUEST_URI'])[1]);
$getQuery = [];
foreach($queries as $query){
$getQuery[explode("=", $query)[0]] = explode("=", $query)[1];
}
return $getQuery[$param];
}
This worked pretty well 😄
Your function is a very complicated way to get query parameters. You can simply use $_GET['email']
to get the email. You should also apply a default in case it is not set.
$email = $_GET['email'] ?? false;
If you wanted to turn this into a helper function,
function getQuery($key, $default = ''): string
{
return $_GET[$key] ?? $default;
}
$email = getQuery('email');
The reason it is being truncated if you have a 6
in the query string is because of this line. strtok will tokenize a string by a delimiter but you have provided PHP_URL_QUERY
as the delimiter. That is a predefined PHP constant and has a value of 6
. So strtok will split the string on 6
.
strtok($_SERVER['REQUEST_URI'], PHP_URL_QUERY)
Yes, I can use $_GET. but, I developed a simple routing system. In this $GET is not working. So, I had to write this getQuery() function.
That doesn't make a whole lotta sense to me, but if you want to use parse_url
you can do something like this. But know that $_GET
works to get everything after the ?
too.
function getQuery($key, $default = ''): string
{
$parts = parse_url($_SERVER['REQUEST_URI']);
parse_str($parts['query'], $query);
return $query[$key] ?? $default;
}
$email = getQuery('email');