如何从 HTML 或 Javascript 调用 PHP 文件 [关闭]

Posted

技术标签:

【中文标题】如何从 HTML 或 Javascript 调用 PHP 文件 [关闭]【英文标题】:How to call a PHP file from HTML or Javascript [closed] 【发布时间】:2014-01-05 10:32:02 【问题描述】:

我已经环顾了很长时间,但找不到任何地方可以回答这个看似基本的问题。我不在乎页面是否重新加载或立即显示结果;我只想在我的网站上有一个按钮来运行 php 文件。而已。而且我发现所有网站要么告诉你如何直接在 html 中运行 PHP 代码,要么告诉你使用 ajax。如果有必要,我会使用 ajax,但是在 ajax 存在之前有一段时间使用 PHP,所以我认为有一个更简单的方法。如果我可以在 HTML 中编写代码就好了,为什么我不能在其中引用它的文件或在 javascript 中对其进行简单调用?

如果事实证明 ajax 是唯一的前进方式,我需要知道什么来调用一个 PHP 文件,该文件将在按下按钮时创建一个文本文件?我正在为自己创建一个简单的博客站点,并且我已经获得了该站点的代码和可以将我写在 textarea 中的帖子并立即显示出来的 javascript。我只想将它链接到一个 PHP 文件,该文件将在服务器上创建永久博客文章,这样当我重新加载页面时,文章仍然存在。

感谢您花时间阅读和回答。

【问题讨论】:

听说过 $.ajax() 欢迎来到 StackOveflow。在发布问题之前请花一些时间阅读本指南:***.com/questions/how-to-ask 如果你想避免 AJAX,请使用 iFrame 阅读 HTML 表单,仅此而已。 您正在创建一个使用文本文件进行存储的博客站点...您可能想查看 PHP 的数据库扩展 【参考方案1】:

如何让一个按钮调用PHP?

我不在乎页面是否会立即重新加载或显示结果;

很好!

注意:如果您不想刷新页面,请参阅下面的“好的...但是我该如何使用 Ajax?”。

我只想在我的网站上有一个按钮来运行 PHP 文件。

这可以通过一个带有单个按钮的表单来完成:

<form action="">
  <input type="submit" value="my button"/>
</form>

就是这样。

差不多。另请注意,在某些情况下,ajax 确实是可行的方法。

这取决于你想要什么。一般来说,当您想避免重新加载页面时,您只需要 ajax。你还是说过你不在乎那个。


为什么我不能直接从 JavaScript 调用 PHP?

如果我可以很好地在 HTML 中编写代码,为什么我不能在其中引用文件或在 Javascript 中对其进行简单调用?

因为 PHP 代码不在 HTML just fine 中。这是大多数服务器端脚本语言(包括 PHP、JSP 和 ASP)的工作方式造成的错觉。该代码只存在于服务器上,如果没有某种远程调用,它就无法从客户端(浏览器)访问。

如果您要求浏览器显示页面的源代码,您可以看到这方面的证据。在那里您将看不到 PHP 代码,这是因为 PHP 代码没有发送到客户端,因此无法从客户端执行。这就是为什么您需要进行远程调用才能让客户端触发 PHP 代码的执行。

如果您不使用表单(如上所示),您可以使用名为 Ajax 的小东西从 JavaScript 进行远程调用。您可能还想考虑是否可以直接在 JavaScript 中完成您想要在 PHP 中执行的操作。


如何调用另一个 PHP 文件?

使用表格进行通话。你可以让它引导用户到一个特定的文件:

<form action="myphpfile.php">
  <input type="submit" value="click on me!">
</form>

用户最终会进入页面myphpfile.php。要使其适用于当前页面,请将 action 设置为空字符串(这就是我在早先给您的示例中所做的)。

我只想将它链接到一个 PHP 文件,该文件将在服务器上创建永久博客文章,这样当我重新加载页面时,文章仍然存在。

你想在服务器上进行操作,你应该让你的表单有你需要的字段(即使type="hidden"并使用POST):

<form action="" method="POST">
  <input type="text" value="default value, you can edit it" name="myfield">
  <input type="submit" value = "post">
</form>

我需要知道什么才能调用一个 PHP 文件,该文件将在按下按钮时创建一个文本文件?

见:How to write into a file in PHP


你如何从服务器中的 POST 接收数据?

很高兴你问...既然你是一个newb初学者,我会给你一个小模板你可以遵循:

<?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST')
    
        //Ok we got a POST, probably from a FORM, read from $_POST.
        var_dump($_PSOT); //Use this to see what info we got!
    
    else
    
       //You could assume you got a GET
       var_dump($_GET); //Use this to see what info we got!
    
 ?>
 <!DOCTYPE html>
 <html lang="en">
   <head>
     <meta char-set="utf-8">
     <title>Page title</title>
   </head>
   <body>
     <form action="" method="POST">
       <input type="text" value="default value, you can edit it" name="myfield">
       <input type="submit" value = "post">
     </form>
   </body>
 </html>

注意:你可以删除var_dump,它只是为了调试目的。


我该如何...

我知道下一阶段,你会问如何:

    如何将 PHP 文件中的变量传递给另一个文件? 如何记住用户/进行登录? 如何避免在重新加载页面时出现令人讨厌的消息?

对此只有一个答案:会话。

我将为Post-Redirect-Get提供一个更广泛的模板

<?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST')
    
        var_dump($_PSOT);
        //Do stuff...
        //Write results to session
        session_start();
        $_SESSION['stuff'] = $something;
        //You can store stuff such as the user ID, so you can remeember him.
        //redirect:
        header('Location: ', true, 303);
        //The redirection will cause the browser to request with GET
        //The results of the operation are in the session variable
        //It has empty location because we are redirecting to the same page
        //Otherwise use `header('Location: anotherpage.php', true, 303);`
        exit();
    
    else
    
        //You could assume you got a GET
        var_dump($_GET); //Use this to see what info we got!
        //Get stuff from session
        session_start();
        if (array_key_exists('stuff', $_SESSION))
        
           $something = $_SESSION['stuff'];
           //we got stuff
           //later use present the results of the operation to the user.
        
        //clear stuff from session:
        unset($_SESSION['stuff']);
        //set headers
        header('Content-Type: text/html; charset=utf-8');
        //This header is telling the browser what are we sending.
        //And it says we are sending HTML in UTF-8 encoding
    
 ?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta char-set="utf-8">
    <title>Page title</title>
  </head>
  <body>
    <?php if (isset($something)) echo '<span>'.$something.'</span>'?>;
    <form action="" method="POST">
      <input type="text" value="default value, you can edit it" name="myfield">
      <input type="submit" value = "post">
    </form>
  </body>
</html>

请查看 php.net 以查找您不认识的任何函数调用。另外 - 如果您还没有 - 获取关于 HTML5 的优秀教程。

另外,使用 UTF-8 because UTF-8!


注意事项

我正在为自己创建一个简单的博客站点,并且我已经获得了该站点的代码和可以将我写在文本区域中的帖子并立即显示出来的 javascript。

如果您使用的是 CMS(Codepress、Joomla、Drupal...等)?这会限制你如何做事。

另外,如果您使用的是框架,您应该查看他们的文档或在他们的论坛/邮件列表/讨论页面/联系方式上询问或尝试询问作者。


好的...但是我该如何使用 Ajax?

嗯... Ajax 通过一些 JavaScript 库变得简单。既然你是初学者,我会推荐jQuery。

所以,让我们使用 jQuery 通过 Ajax 向服务器发送一些东西,在这个例子中我将使用 $.post 而不是 $.ajax。

<?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST')
    
        var_dump($_PSOT);
        header('Location: ', true, 303);
        exit();
    
    else
    
        var_dump($_GET);
        header('Content-Type: text/html; charset=utf-8');
    
 ?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta char-set="utf-8">
    <title>Page title</title>
    <script>
        function ajaxmagic()
        
            $.post(                             //call the server
                "test.php",                     //At this url
                
                    field: "value",
                    name: "John"
                                               //And send this data to it
            ).done(                             //And when it's done
                function(data)
                
                    $('#fromAjax').html(data);  //Update here with the response
                
            );
        
    </script>
  </head>
  <body>
    <input type="button" value = "use ajax", onclick="ajaxmagic()">
    <span id="fromAjax"></span>
  </body>
</html>

上面的代码会向页面test.php发送一个POST请求。

注意:您可以根据需要将sessionsajax 混合使用。


我该如何...

    How do I connect to the database? How do I prevent SQL injection? Why shouldn't I use Mysql_* functions?

...对于这些或任何其他问题,请提出另一个问题。这对这个来说太过分了。

【讨论】:

你的答案应该移到 StackTutorial :D【参考方案2】:

我只想在我的网站上有一个按钮来运行 PHP 文件

<form action="my.php" method="post">
    <input type="submit">
</form>

然而,一般来说,除非您将新数据发送到服务器进行存储,否则您只需使用链接即可。

<a href="my.php">run php</a>

(尽管您应该使用从用户的角度描述发生的事情的链接文本,而不是服务器)


我正在为自己创建一个简单的博客站点,并且我已经获得了该站点的代码和可以将我写在文本区域中的帖子并立即显示出来的 javascript。我只想将它链接到一个 PHP 文件,该文件将在服务器上创建永久博客文章,这样当我重新加载页面时,文章仍然存在。

这是骗人的。

首先,您确实需要使用表单和 POST(因为您要发送要存储的数据)。

然后您需要将数据存储在某个地方。这通常使用数据库来完成。阅读 PHP 的 PDO 库。这是与数据库交互的标准方式。

然后您需要再次将数据拉回。这里最简单的方法是使用查询字符串将数据库行的主键与您希望显示的条目一起传递。

<a href="showBlogEntry.php?entry_id=123">...</a>

确保您还阅读了 SQL 注入和 XSS。

【讨论】:

【参考方案3】:

正如您在问题中已经说过的那样,您有不止一种选择。一个非常基本的方法是在方法属性中使用引用 PHP 文件的标记。然而,尽管听起来很深奥,但 AJAX 是一种更完整的方法。考虑到 AJAX 调用(结合 jQuery)可以很简单:

$.post("yourfile.php", data : "This can be as long as you want");

而且你得到一个更灵活的解决方案,例如在服务器请求完成后触发一个函数。希望这会有所帮助。

【讨论】:

【参考方案4】:

您只需要将表单数据发布到插入php文件功能,见下文:)

class DbConnect

// Database login vars
private $dbHostname = '';
private $dbDatabase = '';
private $dbUsername = '';
private $dbPassword = '';
public $db = null;

public function connect()


    try
    
        $this->db = new PDO("mysql:host=".$this->dbHostname.";dbname=".$this->dbDatabase, $this->dbUsername, $this->dbPassword);
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    catch(PDOException $e)
    
        echo "It seems there was an error.  Please refresh your browser and try again. ".$e->getMessage();
    


public function store($email)

    $stm = $this->db->prepare('INSERT INTO subscribers (email) VALUES ?');
    $stm->bindValue(1, $email);

    return $stm->execute();


【讨论】:

以上是关于如何从 HTML 或 Javascript 调用 PHP 文件 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Ajax 或 JavaScript 调用 Struts1 Action?

我可以在不使用 javascript 的情况下从带有 href 或其他内容的 .html 文件调用 .java 文件吗[关闭]

如何从客户端javascript调用节点函数? (HTML)

使用 node.js 从 C++ 调用 JavaScript

如何从 html / javascript 调用 MainViewController.h 方法? (IOS 电话间隙)

如何从Javascript调用Objective-C方法并将数据发送回iOS中的Javascript?