当用户点击链接时如何运行 PHP 代码?

Posted

技术标签:

【中文标题】当用户点击链接时如何运行 PHP 代码?【英文标题】:How do I run PHP code when a user clicks on a link? 【发布时间】:2010-11-19 19:52:00 【问题描述】:

我想让一个页面在用户点击一个链接时运行一些 php 代码,而不是重定向它们。这可能与

<a href=""></a>

还是使用 javascript onclick 事件?

【问题讨论】:

【参考方案1】:

是的,您需要有一个由 onclick 触发的 javascript 函数,该函数执行 AJAX 页面加载然后返回 false,这样它们就不会在浏览器中被重定向。如果您的项目可以接受,您可以在 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() 方法)。

【讨论】:

您应该也应该从函数中返回 false,因此不遵循 HREF。 2 年后,现在我意识到是什么让这个答案如此出色! @Parrots :如果我想将 ID 传递给 somepage.php,我该如何实现?假设我将“a”链接更改为 onclick="doSomething();"以及如何将其传递给 php 页面?谢谢 @nasty 将其存储在会话变量中,或将其作为 url 的一部分传递。【参考方案2】:

正如其他人建议的那样,使用 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

【讨论】:

没有理由仅仅因为他没有使用 jQuery 而对他投反对票。不过,可能应该有人编辑帖子以修复链接。 感谢贾斯汀,修复了链接。我只是添加了指向 jquery 的链接,但没有添加实际代码,以防万一它不是一个选项。不是每个人都能使用 Jquery,不管他们多么想(愚蠢的法律合同!) 您至少应该在您的函数中添加非 jquery AJAX 代码示例,因为您只是在记录他已经知道的 javascript 的 onclick 功能:P【参考方案3】:

如果你还没有安装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>

【讨论】:

如果你不使用jquery,你是一个初学者吗?我喜欢使用 Javascript,它不喜欢它,因为我很笨 我猜你是个东西 :) 哈哈哈 事后看来,+1。我已经意识到 jQ 有多少冗余依赖,尤其是看到 Web 标准已经走了多远。【参考方案4】:

我知道这篇文章很旧,但我只是想添加我的答案!

您说要在不指导的情况下注销用户...此方法确实重定向,但它将用户返回到他们所在的页面!这是我的实现:

// 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 获取文件名的代码不是 bug 证明。例如,如果查询字符串中包含未转义的“/”,它将失败。

但是有很多脚本可以从 url 获取文件名!

编码愉快!

亚历克斯

【讨论】:

【参考方案5】:

除非您使用 AJAX,否则当用户单击链接而不离开页面时,您无法运行 PHP。 PHP是一种服务器端脚本语言,意味着浏览器看到页面的那一秒,里面没有PHP。

与 Javascript 不同,PHP 完全在服务器上运行,如果它在后面咬它们,浏览器将不知道如何解释它。调用 PHP 代码的唯一方法是通过刷新页面或使用 javascript 获取页面来发出页面请求。

在 AJAX 解决方案中,基本上页面使用 javascript 将页面请求发送到您域中的另一个页面。然后,Javascript 在响应中获取您决定 echo 的任何内容,它可以解析它并从那里做它想做的事情。在创建响应时,您还可以执行任何后端操作,例如更新数据库。

【讨论】:

"除非您使用 AJAX,否则当用户单击链接时,您无法运行 PHP。"嗯? 正是我所说的。除非您请求新页面,否则您无法运行 PHP。 PHP 仅在请求页面时运行。 是的,但是您可以请求没有 AJAX 的 PHP 页面。 AJAX 只允许您在不离开您所在页面的情况下请求它。您的措辞听起来像是 PHP 的 所有 使用都需要 AJAX。 好的,我修正了措辞。我认为他试图不离开页面是理所当然的,但我想有些人不想思考。【参考方案6】:

你说的没有重定向。好吧,它是一个 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>

试一试 :) 希望你喜欢

【讨论】:

顺便说一下这个whatever 【参考方案7】:

正如每个人都在帖子中建议的那样,唯一更好的方法是 AJAX。 另一种方法是使用 IFrame,如下所示:

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

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

现在您将在 IFrame 中获得输出(您可以将 IFrame 放置在页面中任何您需要的位置,或者隐藏它以及脚本的结果)。

希望非 Ajax 解决方案更好。

【讨论】:

【参考方案8】:

要么将用户发送到另一个页面

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

【讨论】:

【参考方案9】:
<a href='javascript:void(0)' id='yourId'>Click Me</a>

$(document).ready(function()        
    $("#yourId").click(function() 
       $.get("yourpage.php");
       return false;;
    );
);

【讨论】:

【参考方案10】:

这应该也可以

<a href="#" onclick="callFunction();">Submit</a>

<script type="text/javascript">

function callFunction()

  <?php require("functions.php");  ?>

</script>

谢谢,

牛头人

【讨论】:

如何通过 javascript 点击触发 php require()?

以上是关于当用户点击链接时如何运行 PHP 代码?的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序在本地运行时如何修复 PHP 上的重定向错误

当用户关闭页面时,如何阻止服务器发送的事件脚本运行? PHP

如何在不点击链接的情况下在 javascript 中打开新页面

当 API 需要证书和用户/密码时,如何从 HTML 页面(使用链接到 javascript 代码的按钮)运行对 API 的发布请求?

当用户点击 Flutter App 中的 Firebase 通知时如何打开链接?

如何在用户更新订阅条时设置重定向链接