web-dev-qa-db-ja.com

ユーザーがリンクをクリックしたときにPHP=コードを実行するにはどうすればよいですか?

ユーザーがリンクをクリックしたときにリダイレクトせずにコードを実行するページをPHPにしたい。これは可能ですか?

<a href=""></a>

またはjavascript onclickイベントで?

40
chustar

ええ、ページのAJAXロードを実行してからfalseを返すonclickによってトリガーされるjavascript関数が必要です。そうすれば、ブラウザでリダイレクトされません。プロジェクトで許容できる場合は、jQueryで次を使用できます。

<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
function doSomething() {
    $.get("somepage.php");
    return false;
}
</script>

<a href="#" onclick="doSomething();">Click Me!</a>

フォームの値を使用する必要がある場合は、ポストバックを実行することもできます($ .post()メソッドを使用します)。

97
Parrots

他の人が示唆しているように、JavaScriptを使用してAJAXを呼び出します。

<a href="#" onclick="myJsFunction()">whatever</a>

<script>
function myJsFunction() {
     // use ajax to make a call to your PHP script
     // for more examples, using Jquery. see the link below
     return false; // this is so the browser doesn't follow the link
}

http://docs.jquery.com/Ajax/jQuery.ajax

10
Roy Rico

まだjqueryをインストールしていない場合(初心者か何かのため)、次のコードを使用します。

<a href="#" onclick="thisfunction()">link</a>

<script type="text/javascript">
function thisfunction(){
    var x = new XMLHttpRequest();
    x.open("GET","function.php",true);
    x.send();
    return false;
}
</script>
7
Thornkey

私はこの投稿が古いことを知っていますが、答えを追加したかっただけです!

指示なしでユーザーをログアウトすると言いました...このメソッドはリダイレクトを行いますが、ユーザーがいたページに戻ります!ここに私の実装があります:

// every page with logout button
<?php
        // get the full url of current page
        $page = $_SERVER['PHP_SELF'];
        // find position of the last '/'
        $file_name_begin_pos = strripos($page, "/");
        // get substring from position to end 
        $file_name = substr($page, ++$fileNamePos);
    }
?>

// the logout link in your html
<a href="logout.php?redirect_to=<?=$file_name?>">Log Out</a>

// logout.php page
<?php
    session_start();
    $_SESSION = array();
    session_destroy();
    $page = "index.php";
    if(isset($_GET["redirect_to"])){
        $file = $_GET["redirect_to"];
        if ($file == "user.php"){
            // if redirect to is a restricted page, redirect to index
            $file = "index.php";
        }
    }
    header("Location: $file");
?>

そしてそこに行きます!

完全なURLからファイル名を取得するコードはバグを証明していません。たとえば、クエリ文字列にエスケープされていない「/」が含まれている場合、失敗します。

しかし、URLからファイル名を取得するためのスクリプトがたくさんあります!

ハッピーコーディング!

アレックス

5

AJAXを使用しない限り、ユーザーがページを離れずにリンクをクリックすると、PHPを実行できません。PHPは、ブラウザはページを表示しますが、PHPはありません。

Javascriptとは異なり、PHPはサーバー上で完全に実行され、ブラウザが後部で噛み付いた場合、ブラウザはそれを解釈する方法を知りません。PHPコードは、ページを更新するか、javascriptを使用してページを取得して、ページリクエストを作成します。

AJAXソリューションでは、ページは基本的にjavascriptを使用してページリクエストをドメイン上の別のページに送信します。Javascriptは応答でechoに決定したものを取得します。応答を作成しているときに、データベースの更新などのバックエンドを行うこともできます。

4
Tyler Carter

さて、リダイレクトせずに言った。さて、javascriptコード:

<a href="JavaScript:void(0);" onclick="function()">Whatever!</a>

<script type="text/javascript">
function confirm_delete() {
    var delete_confirmed=confirm("Are you sure you want to delete this file?");

    if (delete_confirmed==true) {
       // the php code :) can't expose mine ^_^
    } else { 
       // this one returns the user if he/she clicks no :)
       document.location.href = 'whatever.php';
    }
}
</script>

試してみてください:)

2
Louie Jay Jayme

唯一のより良い方法はAJAXです。誰もが投稿で提案しているとおりです。

<iframe name="f1" id="f1"> </iframe>

<a href='yourpage.php' target='f1'>Click </a>

IFrameで出力を取得します(ページまたはイベントの必要な場所にIFrameを配置して、それを非表示にし、スクリプトから結果を取得できます)。

これがAjax以外のソリューションに望ましいことを願っています。

1
AjayR

ユーザーを別のページに送ります

<a href="exec.php">Execute PHP</a>

またはajaxでそれを行う

<script type="text/javascript">
// <![CDATA[
    document.getElementById('link').onclick = function() {
        // call script via ajax...
        return false;
    }
// ]]>
</script>
...
<a href="#" id="link">Execute PHP</a>
0
Tom