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

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

<a href=""></a>

还是使用 javascript onclick 事件?

【问题讨论】:

    标签: php javascript html hyperlink anchor


    【解决方案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()?
            猜你喜欢
            • 2012-05-01
            • 2012-11-27
            • 2016-09-30
            • 2014-02-24
            • 1970-01-01
            • 1970-01-01
            • 2012-03-14
            • 2020-10-23
            • 1970-01-01
            相关资源
            最近更新 更多