【问题标题】:Calling a PHP function through an HTML Link (no form)通过 HTML 链接调用 PHP 函数(无表单)
【发布时间】:2013-06-25 15:09:08
【问题描述】:

我有一个 PHP 函数,我想将它集成到我的(现有)网页中。此外,我希望它在用户单击页面上的链接时执行。该函数需要接受链接的文本作为输入参数。

我为向 PHP 脚本发送数据所做的研究似乎都涉及使用表单来获取用户输入。该页面不需要接受任何用户输入,只需将链接文本发送到函数并执行该函数。

所以我猜这个问题分为两部分。首先,如何在点击链接时执行 PHP 脚本。其次,如何在不使用表单的情况下将页面信息传递给该函数。如有必要,我愿意使用其他技术,例如 AJAX 或 JavaScript。

编辑:: 特别是我想要做的事情。我有一个 HTML 输出,代表一些源代码的文档。在此输出上是一系列链接(指源代码中的代码结构),单击这些链接后,将调用安装在 Web 服务器上的一些 python 函数(这让我认为它需要通过 PHP 调用)。然而,python 函数需要链接上的名称作为输入参数。

我可以通过让 JavaScript 收集输入并调用 PHP 函数来实现某种交互吗?

抱歉含糊不清,我对 Web 开发非常陌生。如果有任何不清楚的地方,请告诉我。

【问题讨论】:

  • 您的 PHP 脚本可以在不使用表单的情况下从 URL 中读取信息;您可以通过$_GET 访问它,如果您传入一个以& 符号分隔的字段=值项目列表,或者您可以在$_SERVER['QUERY_STRING'] 中获取全部内容
  • 您可以按照 andrewsi 的建议使用 GET 或使用 AJAX 并通过 POST 传递信息。
  • @andrewsi 你应该把它写成答案,因为它是正确的
  • @Naryl AJAX 不必是 POST 才能工作,您可以使用带有 GET、PUT、DELETE、OPTIONS 和其他任何东西的 AJAX。此外,GET 和 POST 有两种不同的语义含义,您应该了解一下。毕竟,为什么我们有两个这么相似?
  • 最大的问题是您是否希望浏览器在操作后保持在同一页面上,或者输出某种结果。根据该答案,您将需要使用 Ajax 或此处提到的更简单的解决方案之一。

标签: php javascript html input


【解决方案1】:

您需要有一个 JS 函数,该函数由 onclick 事件触发,然后发送 AJAX 请求并返回 false(因此它不会被重定向到浏览器中的新页面)。您可以在 jQuery 中执行以下操作:

jQuery:

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

在您的页面正文中:

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

myfile.php 中:

当访问者点击链接时,您可以添加您想要执行的任何功能。示例:

<?php
echo "Hey, this is some text!";
?>

这是一个基本的例子。我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您需要在不离开页面的情况下使用 AJAX 来完成此操作。这是一个使用 jQuery 和 AJAX 的示例(假设您已经包含了 jQuery 库):

    第一个文件:

    <script language="javascript">
    
    $(function(){
        $('#mylink').click(function(){
            $.get('/ajax/someurl', {linkText: $(this).text()}, function(resp){
               // handle response here
            }, 'json');
        });
    
    });
    
    </script>
    
    <a href="#" id="mylink">This text will be passed along</a>
    

    PHP 文件:

    $text = $_REQUEST['linkText'];
    // do something with $text here
    

    【讨论】:

      【解决方案3】:

      如果您熟悉 jQuery,如果您不希望网站重定向但执行您的函数,则可以执行以下操作:

      在你的 html 头中:

      <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
      

      链接:

      <a href="#" onclick="$.get('ajax.php');">Execute function</a>
      

      在 ajax.php 中放入要执行的函数。

      【讨论】:

      • 如果你已经包含了 jQuery,为什么还要使用内联事件绑定? $(function(){$('a.my-link').bind('click', function(){ $.get('ajax.php'); });});
      • 因为它对于新手来说更容易理解并且工作原理相同
      • 确实如此,但通常这是不好的做法
      • 你能否提供一个官方网站的链接,比如 w3c,上面说 html 属性事件处理程序已被弃用,甚至从 html 标准中删除?
      【解决方案4】:

      可能是这样的:

      <a href="#" onclick="return sendText(this);"></a>
      ....
      <script>
      function sendText(e)
      {
       $.ajax({
               url: '/your/url/',
               data: {text: $(e).html()},
               type: 'POST' 
              });
      }
      </script>
      

      【讨论】:

      • 虽然,从技术上讲,这段代码是正确的,javascript 并不意味着jQuery :)
      • 当然,但是对于ajax,最好使用jquery,然后使用自制拐杖
      【解决方案5】:

      您可以为此使用查询字符串。例如,如果您链​​接到此页面:

      example.php?text=hello
      

      (除了放置直接链接,您还可以向该 URL 发送 ajax GET 请求)

      在 example.php 中,您可以像这样获取值 'hello':

      <?php
      $text = $_GET['hello'];
      

      然后调用你的函数:

      myfunction($text); 
      

      请确保在将值传递给函数之前对其进行清理和验证。根据您在该函数中所做的事情,结果可能是致命的!

      此链接可能会有所帮助:

      【讨论】:

        【解决方案6】:

        这是一个过于简单化的示例,说明您正在尝试做的事情..

        您的链接:

        <a href="somefile.php?action=Some+Action">Some Action</a>
        

        您的 PHP 文件:

        <?php
        
        if (isset($_GET['action']))
        {
            // make sure to validate your input here!
            some_function($_GET['action']);
        }
        

        【讨论】:

          【解决方案7】:

          PHP 是一种服务器端语言,即它不在网络浏览器中运行。

          如果您希望浏览器中的功能在单击链接时进行操作,您可能正在谈论执行一些 Javascript。

          您可以使用 Javascript 查找链接节点中包含的文本值并将其发送到服务器,然后让您的 PHP 脚本处理它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-03-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-06-20
            • 2014-12-04
            • 1970-01-01
            相关资源
            最近更新 更多