如何让一个按钮调用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请求。
注意:您可以根据需要将sessions 与ajax 混合使用。
我该如何...
- How do I connect to the database?
- How do I prevent SQL injection?
- Why shouldn't I use Mysql_* functions?
...对于这些或任何其他问题,请提出另一个问题。这对这个来说太过分了。