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

iTu*_*rki 13 html php 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>
Run Code Online (Sandbox Code Playgroud)

PHP代码[ test()function ] 也在同一个文件中:

<?php
    function test() {
        echo $_POST["user"]; // Just an example of processing
    }
?>
Run Code Online (Sandbox Code Playgroud)

但是,我还是遇到了问题!有谁有想法?

Dut*_*432 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>
Run Code Online (Sandbox Code Playgroud)

它将调用getResult.php并传递序列化的表单,以便PHP可以读取这些值.任何getResult.php回声都将返回到result变量中的JS函数,test.php并且(在这种情况下)显示在警告框中.

getResult.php

<?php
    echo "The name you typed is: " . $_REQUEST['user'];
?>
Run Code Online (Sandbox Code Playgroud)

注意此示例使用jQuery,第三方Javascript包装器.我建议你先进一步了解这些网络技术如何协同工作,然后再为自己复杂化.


kap*_*apa 9

你对网络的运作方式有很大的误解.

基本上,事情就是这样发生的:

  • 用户(以及浏览器)test.php从您的服务器请求
  • 在服务器上test.php运行,执行内部的所有内容,生成的HTML页面(包括您的表单)将被发送回浏览器
  • 浏览器显示表单,用户可以与之交互.
  • 用户提交表单(到定义的URL action,在这种情况下是相同的文件),所以一切都从头开始(除了表格中的数据也将被发送).对服务器的新请求,PHP运行等等.这意味着页面将被刷新.

您试图test()onclick属性中调用.此技术用于运行客户端脚本,在大多数情况下,Javascript(代码将在用户的浏览器上运行).这与服务器端的PHP无关,它驻留在您的服务器上,只有在请求进入时才会运行.例如,请阅读客户端与服务器端编码.

如果你想在不引起页面刷新的情况下做一些事情,你必须使用Javascript在后台向服务器发送请求,让PHP做它需要做的事情,并从中获得答案.这种技术基本上称为AJAX,你可以使用Google找到很多很棒的资源(比如Mozilla的惊人教程).


小智 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>
Run Code Online (Sandbox Code Playgroud)


ado*_*ppy 6

这是一个完整的PHP脚本来做你正在描述的,尽管毫无意义.您需要在服务器端与客户端进行阅读.PHP无法在客户端运行,您必须使用javascript与服务器进行交互,或者使用页面刷新.如果您无法理解,那么您将无法使用我的代码(或任何其他人)来为您带来好处.

以下代码在没有jQuery的情况下执行AJAX调用,并调用相同的脚本将XML流式传输到AJAX.然后它会<br/>在用户框下方插入您的用户名和一个div.

在尝试追求像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 } ?>
Run Code Online (Sandbox Code Playgroud)


Car*_*oso 5

使用SAJAX或切换到JavaScript

Sajax是一个开源工具,使用Ajax框架(也称为XMLHTTPRequest或远程脚本)使编程网站尽可能简单.Sajax可以轻松地通过JavaScript从您的网页调用PHP,Perl或Python函数,而无需执行浏览器刷新.

  • @ 2rk嗯,webprogramming是一个专业,而不是像"嘿让我们建立一个网站"这样简单.如果您想创建网站,首先您必须学习如何做到这一点.然后每天学习和学习新东西. (2认同)