Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get URL argument in Page body by PHP?

Tags:

php

drupal

On a Drupal site, PHP code is enabled for Page body content. How can I get the argument and its value in PHP code? For example, I'd like to get ref and 33002 from:

http://example.com/node/1?ref=33002

In the following code:

<?php 
  print arg(0);
  print arg(1);
  print arg(2);
  print arg(3);
?>

I can get node and 1, but nothing about ref or 33002.

Thanks!

like image 284
ohho Avatar asked Jan 20 '11 08:01

ohho


3 Answers

Use this:

<?php
$a=$_REQUEST['ref'];
echo "The value of the ref parameter is ".$a;
?>
like image 37
crowicked Avatar answered Nov 20 '22 00:11

crowicked


You can use drupal_get_query_parameters() as follows:

$params = drupal_get_query_parameters();

if (isset($params['ref']) && is_numeric($params['ref'])) {
  var_dump(check_plain($params['ref']));
}
like image 135
klidifia Avatar answered Nov 20 '22 01:11

klidifia


The solution by crowicked works, but "the Drupal way" is to pass the ref value as a url argument, ie:

http://example.com/node/1/33002

Now you can access the ref value using the arg() function:

$ref = arg(2);

Of course an approach like this can only work if the ref value is always the third argument.

Even though the code above works, it is not recommended to place php scripts in the node body. It makes your site harder to maintain and debug. The day will come when an editor deletes your php node by accident, thus breaking your site.

If you have a php script that you want to run, the best way is to add a simple custom module to your site which implements hook_menu. Have a look at the Menu Example module or this hello world module to learn more about hook_menu.

Lastly, regardless of the method you choose (php nodes or a custom module), always make sure to sanitize url input, for instance with check_plain().

like image 6
marcvangend Avatar answered Nov 20 '22 00:11

marcvangend