web-dev-qa-db-fra.com

Comment exécuter le code PHP) lorsqu'un utilisateur clique sur un lien?

Je souhaite qu'une page exécute du code PHP lorsqu'un utilisateur clique sur un lien, sans le rediriger. Est-ce possible avec

<a href=""></a>

ou avec l'événement javascript onclick?

40
chustar

Ouais, vous auriez besoin d’une fonction javascript déclenchée par un onclick qui charge AJAX le chargement d’une page, puis renvoie false, afin qu’ils ne soient pas redirigés dans le navigateur. Vous Vous pouvez utiliser les éléments suivants dans jQuery, si cela convient à votre projet:

<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>

Vous pouvez également faire un post-back si vous devez utiliser des valeurs de formulaire (utilisez la méthode $ .post ()).

97
Parrots

Comme d'autres l'ont suggéré, utilisez JavaScript pour passer un appel 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

Si vous n'avez pas encore installé jquery (parce que vous n'êtes qu'un débutant), utilisez ce morceau de code:

<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

Je sais que ce post est vieux mais je voulais juste ajouter ma réponse!

Vous avez dit de déconnecter un utilisateur SANS diriger ... cette méthode ne redirige pas l'utilisateur mais il renvoie l'utilisateur à la page sur laquelle il était! voici ma mise en œuvre:

// 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");
?>

et c'est parti!

le code qui obtient le nom du fichier à partir de l'URL complète n'est pas à l'épreuve des bogues. Par exemple, si des chaînes de requête sont impliquées dans le caractère "/" non échappé, elles échoueront.

Cependant, il existe de nombreux scripts pour obtenir le nom de fichier à partir de l'URL!

Bon codage!

Alex

5
AlexMorley-Finch

Vous ne pouvez pas exécuter PHP lorsqu'un utilisateur clique sur un lien sans quitter la page, sauf si vous utilisez AJAX. PHP est un langage de script côté serveur, c'est-à-dire navigateur voit la page, il n'y a pas de PHP dedans.

Contrairement à Javascript, PHP est exécuté complètement sur le serveur, et le navigateur ne saurait l’interpréter s’il le mord à l’arrière. La seule façon d’invoquer PHP Le code consiste à faire une demande de page, soit en rafraîchissant la page, soit en utilisant javascript pour aller chercher une page.

Dans une AJAX Solution, la page utilise javascript pour envoyer une demande de page à une autre page de votre domaine. Javascript obtient alors ce que vous décidez de echo dans la réponse. peut analyser et faire ce qu’il veut à partir de là. Lorsque vous créez la réponse, vous pouvez également effectuer des tâches d’arrière-plan telles que la mise à jour des bases de données.

4
Tyler Carter

Eh bien, vous avez dit sans rediriger. Eh bien c'est un code 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>

essayer :) j'espère que vous l'aimez

2
Louie Jay Jayme

Il n'y a que le meilleur moyen est AJAX comme chacun le suggère dans ses messages. L'alternative consiste à utiliser des IFrames comme ci-dessous:

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

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

Vous obtiendrez maintenant la sortie dans IFrame (vous pouvez placer IFrame à l'endroit souhaité dans la page ou masquer l'événement et le résultat du script).

J'espère que la solution non Ajax est meilleure.

1
AjayR

soit envoyer l'utilisateur à une autre page qui le fait

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

ou le faire avec 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