从同一文件中的HTML表单调用PHP函数?

时间:2011-05-11 16:07:16

标签: php html forms post

我正在尝试在用户输入文本并按下提交按钮后在同一页面中执行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
    }    
    ?>

然而,我仍然遇到问题!有谁有想法?

10 个答案:

答案 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>