Squirtle
Squirtle

Reputation: 169

HREF to call a PHP function and pass a variable?

Is it possible to create an HREF link that calls a PHP function and passes a variable along with it?

<?php
function sample(){
    foreach ($json_output->object ){
        $name = "{$object->title}";
        $id = "{$object->id}";

        print "<a href='search($id)' >$name</a>";
    }
}

function search($id){
    //run a search via the id provide by the clicking of that particular name link
}
?>

Upvotes: 8

Views: 82455

Answers (8)

PlausibleSarge
PlausibleSarge

Reputation: 2223

You can do this easily without using a framework. By default, anything that comes after a ? in a URL is a GET variable.

So for example, www.google.com/search.html?term=blah

Would go to www.google.com/search.html, and would pass the GET variable "term" with the value "blah".

Multiple variables can be separated with a &

So for example, www.google.com/search.html?term=blah&term2=cool

The GET method is independent of PHP, and is part of the HTTP specification.

PHP handles GET requests easily by automatically creating the superglobal variable $_GET[], where each array index is a GET variable name and the value of the array index is the value of the variable.

Here is some demo code to show how this works:

<?php
    //check if the get variable exists
    if (isset($_GET['search']))
    {
        search($_GET['search']);
    }

    function Search($res)
    {
        //real search code goes here
        echo $res;
    }


?>

<a href="?search=15">Search</a>

which will print out 15 because it is the value of search and my search dummy function just prints out any result it gets

Upvotes: 15

Limon
Limon

Reputation: 1793

Yes, you can do it. Example:

From your view:

    <p><a href="test/1" class="btn blue">Edit</a>

Where 1 is a parameter you want to send. It can be a data taken from an object too.

From your controller:

function test($id){
  #code...
}

Upvotes: 1

riksof-zeeshan
riksof-zeeshan

Reputation: 531

Set query string in your link's href with the value and access it with $_GET or $_REQUEST

<?php
    if ( isset($_REQUEST['search']) ) {
        search( $_REQUEST['search'] );
    }

    function Search($res) {
        // search here
    }

    echo "<a href='?search='" . $id . "'>" . $name . "</a>";
?>

Upvotes: 0

Kylie
Kylie

Reputation: 11749

Yes, this is possible, but you need an MVC type structure, and .htaccess URL rewriting turned on as well.

Here's some reading material to get you started in understanding what MVC is all about.

http://www.phpro.org/tutorials/Model-View-Controller-MVC.html

And if you want to choose a sweet framework, instead of reinventing the MVC wheel, I highly suggest, LARAVEL 4

Upvotes: -1

zzlalani
zzlalani

Reputation: 24354

Simply do this

<?php
function sample(){
    foreach ($json_output->object ){
        $name = "{$object->title}";
        $id = "{$object->id}";

        print "<a href='?search=" . $id . "' > " . $name . "</a>";
    }
}

if (isset($_REQUEST['search'])) {
    search($_REQUEST['search']);
}

function search($id){
    //run a search via the id provide by the clicking of that particular name link
}
?>

Also make sure that your $json_output is accessible with is the sample() function.
You can do it either way

<?php
function sample(){
    global $json_output;
    // rest of the code
}
?>

or

<?php
function sample($json_output){
    // rest of the code
} 
?>

Upvotes: 0

user2417483
user2417483

Reputation:

The HTML output needs to look like

<a href="php_file.php?id=1">anchor text</a>

Your function will need to output this information within that format.

Upvotes: 3

janenz00
janenz00

Reputation: 3310

No, you cannot do it directly. You can only link to a URL.

In this case, you can pass the function name and parameter in the query string and then handle it in PHP as shown below:

  print "<a href='yourphpscript.php?fn=search&id=$id' >$name</a>";

And, in the PHP code :

  if ($_GET['fn'] == "search")
     if (!empty($_GET['id']))
            search($id);

Make sure that you sanitize the GET parameters.

Upvotes: 2

Quentin
Quentin

Reputation: 943215

No, at least not directly.

  1. You can link to a URL
  2. You can include data in the query string of that URL (<a href="myProgram.php?foo=bar">)
  3. That URL can be handled by a PHP program
  4. That PHP program can call a function as the only thing it does
  5. You can pass data from $_GET['foo'] to that function

Upvotes: 1

Related Questions