我已经看了很久了,我找不到能回答这个看似基本问题的地方。我不关心页面是否重新加载或立即显示结果;我只想在我的网站上有一个按钮来运行PHP文件。而已。我发现所有网站都会告诉您如何直接在HTML中运行PHP代码或告诉您使用ajax。如果事实证明是必要的话我会使用ajax,但是在使用PHP之前有一段时间存在ajax,所以我认为有一种更简单的方法。如果我可以在HTML中编写代码就好了,为什么我不能在那里引用它的文件或者在Javascript中对它进行简单的调用?
如果事实证明ajax是前进的唯一方法,那么我需要知道什么才能调用一个PHP按钮来创建一个文本文件?我正在为自己制作一个简单的博客网站,我已经获得了该网站的代码和javascript,可以将我在textarea
写的帖子立即显示出来。我只是想将它链接到一个PHP文件,该文件将在服务器上创建永久博客帖子,这样当我重新加载页面时,帖子仍然存在。
感谢您花时间阅读和回答。
答案 0 :(得分:53)
我不关心页面是否会立即重新加载或显示结果;
好!
注意:如果您不想刷新页面,请参阅下面的“ Ok ...但我如何使用Ajax?”。
我只想在我的网站上设置一个按钮来运行PHP文件。
可以使用带有单个按钮的表单来完成:
<form action="">
<input type="submit" value="my button"/>
</form>
就是这样。
差不多。另请注意,有些情况下,ajax确实是最佳选择。
这取决于你想要什么。一般而言,当您想要避免重写页面时,您只需要ajax。你还是说你不关心那个。
如果我可以在HTML中编写代码就好了,为什么我不能在那里引用它的文件或在Javascript中对它进行简单的调用?
因为PHP代码不在HTML just fine
中。这是大多数服务器端脚本语言工作方式(包括PHP,JSP和ASP)的错觉。该代码仅存在于服务器上,并且在没有某种远程调用的情况下,客户端(浏览器)无法访问该代码。
如果您要求浏览器显示页面的源代码,您可以看到此证据。那里你不会看到PHP代码,因为PHP代码没有发送到客户端,因此无法从客户端执行。这就是为什么你需要做一个远程调用才能让客户端触发PHP代码的执行。
如果您不使用表单(如上所示),您可以使用名为 Ajax 的小东西从JavaScript进行远程调用。您可能还想考虑是否可以直接在JavaScript中完成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。
我很高兴你问...因为你是 newb begginer,我会给你一个你可以遵循的模板:
<?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
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,可以将我在textarea中写的帖子立即显示出来。
如果您使用的是CMS(Codepress,Joomla,Drupal等)?这使你对如何做事情产生了一些限制。
此外,如果您使用的是框架,您应该查看他们的文档或在他们的论坛/邮件列表/讨论页面/联系人处询问或尝试询问作者。
嗯......某些JavaScript库使Ajax变得简单。由于你是一个初学者,我会建议你jQuery。
所以,让我们通过Ajax使用jQuery向服务器发送一些东西,在这个例子中我将使用$.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
混合使用。
...对于这些或任何其他,请提出另一个问题。这对于这个来说太过分了。
答案 1 :(得分:0)
我只想在我的网站上创建一个运行PHP文件的按钮
<form action="my.php" method="post">
<input type="submit">
</form>
但是,一般来说,除非您要将新数据发送到服务器进行存储,否则您只需使用链接。
<a href="my.php">run php</a>
(虽然您应该使用链接文字来描述从用户的角度发生的事情,而不是服务器)
我正在为自己创建一个简单的博客网站,我已经获得了网站的代码和javascript,可以将我在textarea中写的帖子立即显示出来。我只想将它链接到一个PHP文件,该文件将在服务器上创建永久博客帖子,这样当我重新加载页面时,帖子仍然存在。
这是诡计。
首先,您需要使用表单和POST(因为您要发送要存储的数据)。
然后你需要将数据存储在某个地方。这通常使用数据库完成。阅读PHP的PDO库。这是与数据库交互的标准方法。
然后你需要再次取出数据。这里最简单的方法是使用查询字符串传递数据库行的主键以及要显示的条目。
<a href="showBlogEntry.php?entry_id=123">...</a>
确保您还阅读了SQL注入和XSS。
答案 2 :(得分:0)
正如您在问题中所述,您有多种选择。一个非常基本的方法是使用在method属性中引用PHP文件的标记。然而,尽管听起来很神秘,但AJAX是一种更完整的方法。考虑到AJAX调用(与jQuery结合使用)可以简单如下:
$.post("yourfile.php", {data : "This can be as long as you want"});
您可以获得更灵活的解决方案,例如在服务器请求完成后触发功能。希望这会有所帮助。
答案 3 :(得分:0)
您只需将表单数据发布到插入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();
}
}