我正在尝试在用户输入文本并按下提交按钮后在同一页面中执行PHP函数。
我想到的第一个是使用表格。当用户提交表单时,PHP函数将在同一页面中执行。用户不会被定向到其他页面。处理将完成并显示在同一页面中(无需重新加载)
以下是我的意见:
在 test.php 文件中:
<form action="test.php" method="post">
<input type="text" name="user" placeholder="enter a text" />
<input type="submit" value="submit" onclick="test()" />
</form>
PHP代码[ test()
函数]在 中位于同一个文件中 :
<?php
function test() {
echo $_POST["user"]; //just an example of processing
}
?>
然而,我仍然遇到问题!有谁有想法?
答案 0 :(得分:26)
这不能以你所谈论的方式完成。 PHP是服务器端,而表单存在于客户端。如果您不想刷新页面,则需要考虑使用Javascript和/或AJAX。
<强> test.php的强>
<form action="javascript:void(0);" method="post">
<input type="text" name="user" placeholder="enter a text" />
<input type="submit" value="submit" />
</form>
<script type="text/javascript">
$("form").submit(function(){
var str = $(this).serialize();
$.ajax('getResult.php', str, function(result){
alert(result); // the result variable will contain any text echoed by getResult.php
}
return(false);
});
</script>
它将调用getResult.php
并将序列化表单传递给它,以便PHP可以读取这些值。任何getResult.php
回声将返回到result
变量中的JS函数,返回test.php
并且(在这种情况下)显示在警告框中。
<强> getResult.php 强>
<?php
echo "The name you typed is: " . $_REQUEST['user'];
?>
注意此示例使用jQuery,第三方Javascript包装器。我建议你先进一步了解这些网络技术如何协同工作,然后再为自己复杂化。
答案 1 :(得分:9)
您对网络的运作方式存在很大的误解。
基本上,事情是这样发生的:
test.php
test.php
运行,内部的所有内容都会被执行,生成的HTML页面(包括您的表单)将被发送回浏览器action
中定义的URL,在这种情况下是相同的文件),所以一切都从头开始(除了表单中的数据也将被发送)。对服务器的新请求,PHP运行等等。这意味着页面将被刷新。您试图从test()
属性中调用onclick
。此技术用于运行客户端脚本,在大多数情况下 Javascript (代码将在用户的浏览器上运行)。这与 PHP (服务器端)无关,它位于您的服务器上,只有在请求进入时才会运行。请阅读Client-side Versus Server-side Coding示例
如果你想在不引起页面刷新的情况下做一些事情,你必须使用Javascript在后台向服务器发送请求,让PHP做它需要做的事情,并从中接收答案。这种技术基本上称为 AJAX ,你可以使用Google找到很多很棒的资源(比如Mozilla's amazing tutorial)。
答案 2 :(得分:6)
没有重新加载,使用html和php只是它不可行,但这可能与你想要的非常相似,但你必须重新加载:
<?php
function test() {
echo $_POST["user"];
}
if (isset($_POST[])){ //If it is the first time, it does nothing
test();
}
?>
<form action="test.php" method="post">
<input type="text" name="user" placeholder="enter a text" />
<input type="submit" value="submit" onclick="test()" />
</form>
答案 3 :(得分:6)
这是一个完整的PHP脚本来执行您所描述的内容,尽管毫无意义。您需要在服务器端与客户端进行阅读。 PHP无法在客户端运行,您必须使用javascript与服务器进行交互,或者使用页面刷新。如果您无法理解,那么您将无法使用我的代码(或任何其他人的代码)来为您带来好处。
以下代码在没有jQuery的情况下执行AJAX调用,并调用相同的脚本将XML流式传输到AJAX。然后,它会在用户框下方的div中插入您的用户名和<br/>
。
在尝试追求像AJAX这样先进的东西之前,请回过头来学习基础知识。你最终只会让自己感到困惑,并可能浪费其他人的钱。
<?php
function test() {
header("Content-Type: text/xml");
echo "<?xml version=\"1.0\" standalone=\"yes\"?><user>".$_GET["user"]."</user>"; //output an xml document.
}
if(isset($_GET["user"])){
test();
} else {
?><html>
<head>
<title>Test</title>
<script type="text/javascript">
function do_ajax() {
if(window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
} else {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var xmlDoc = xmlhttp.responseXML;
data=xmlDoc.getElementsByTagName("user")[0].childNodes[0].nodeValue;
mydiv = document.getElementById("Test");
mydiv.appendChild(document.createTextNode(data));
mydiv.appendChild(document.createElement("br"));
}
}
xmlhttp.open("GET","<?php echo $_SERVER["PHP_SELF"]; ?>?user="+document.getElementById('username').value,true);
xmlhttp.send();
}
</script>
</head>
<body>
<form action="test.php" method="post">
<input type="text" name="user" placeholder="enter a text" id="username"/>
<input type="button" value="submit" onclick="do_ajax()" />
</form>
<div id="Test"></div>
</body>
</html><?php } ?>
答案 4 :(得分:5)
使用SAJAX或切换到JavaScript
Sajax是一个开源工具 使用Ajax编程网站 框架 - 也称为 XMLHTTPRequest或远程脚本 - 尽可能简单。 Sajax成功了 很容易调用PHP,Perl或Python 从您的网页通过 JavaScript没有执行 浏览器刷新。
答案 5 :(得分:3)
这就是PHP的工作方式。 test()
将在加载页面时执行,而不是在单击提交按钮时执行。
要做到这一点,你必须让onclick
属性对PHP文件进行AJAX调用。
答案 6 :(得分:3)
如果您不想使用Ajax,并希望重新加载页面。
<?php
if(isset($_POST['user']) {
echo $_POST["user"]; //just an example of processing
}
?>
答案 7 :(得分:2)
您可以在不刷新页面的情况下提交表单,但据我所知,如果不对服务器上的PHP脚本使用JavaScript / AJAX调用,则不可能。以下示例使用jQuery JavaScript Library。
<强> HTML 强>
<form method = 'post' action = '' id = 'theForm'>
...
</form>
Java脚本
$(function() {
$("#theForm").submit(function() {
var data = "a=5&b=6&c=7";
$.ajax({
url: "path/to/php/file.php",
data: data,
success: function(html) {
.. anything you want to do upon success here ..
alert(html); // alert the output from the PHP Script
}
});
return false;
});
});
提交后,将调用匿名Javascript函数,它只是向PHP文件发送请求(需要在单独的文件中,btw)。上面的data
需要是要发送到PHP文件的URL编码查询字符串(基本上是表单字段的所有当前值)。这些将出现在$_GET
超级全局的服务器端PHP脚本中。下面是一个例子。
var data = "a=5&b=6&c=7";
如果这是您的数据字符串,那么PHP脚本将其视为:
echo($_GET['a']); // 5
echo($_GET['b']); // 6
echo($_GET['c']); // 7
但是,您需要根据表单存在的表单字段构建数据,例如:
var data = "user=" + $("#user").val();
(您需要使用'id'标记每个表单字段,上面的id是'user'。)
PHP脚本运行后,调用success
函数,PHP脚本生成的任何和所有输出都将存储在变量html
中。
...
success: function(html) {
alert(html);
}
...
答案 8 :(得分:2)
看一下这个例子:
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$comment = test_input($_POST["comment"]);
$gender = test_input($_POST["gender"]);
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<h2>PHP Form Validation Example</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name: <input type="text" name="name">
<br><br>
E-mail: <input type="text" name="email">
<br><br>
Website: <input type="text" name="website">
<br><br>
Comment: <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
<?php
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>
</body>
</html>
答案 9 :(得分:1)
这是我用来创建提交而不加载表单的更好方法。
你可以使用一些CSS来按照你想要的方式设计iframe样式。
php结果将被加载到iframe中。
<form method="post" action="test.php" target="view">
<input type="text" name="anyname" palceholder="Enter your name"/>
<input type="submit" name="submit" value="submit"/>
</form>
<iframe name="view" frameborder="0" style="width:100%">
</iframe>