Вызов функции PHP из HTML-формы в том же файле?

Я пытаюсь выполнить функцию PHP на той же странице после того, как пользователь вводит текст и нажимает кнопку "Отправить".

первое, о чем я думаю, это использование форм. Когда пользователь отправляет форму, функция PHP будет выполнена на той же странице. Пользователь не будет перенаправлен на другую страницу. Обработка будет выполнена и отображена на той же странице (без перезагрузки)

вот что я достигаю:

на

10 ответов


это не может быть сделано так, как вы говорите. PHP является серверной стороной, в то время как форма существует на стороне клиента. Вам нужно будет изучить использование Javascript и / или AJAX, если вы не хотите обновлять страницу.


у вас есть большое непонимание того, как работает web.

в основном, все происходит таким образом:

  • пользователь (ну, браузер) запрашивает test.php с сервера
  • на сервере test.php запускается, все внутри выполняется, и результирующая HTML-страница (которая включает вашу форму) будет отправлена обратно в браузер
  • браузер отображает форму, пользователь может взаимодействовать с ним.
  • пользователь отправляет форму URL, определенный в action, который в данном случае является одним и тем же файлом), поэтому все начинается с самого начала (кроме данных в форме также будет отправлено). Новый запрос на сервер, запуск PHP и т. д. Это означает, что страница будет обновляться.

вы пытались вызвать test() из своего . Этот метод используется для запуска на стороне клиента скрипт, который в большинстве случаев в JavaScript (код будет выполнен в браузере пользователя). Что ничего общего с PHP, которая составляет на стороне сервера, находится на вашем сервере и будет работать только если запрос приходит. Пожалуйста, прочитайте клиентское и серверное кодирование например.

если вы хотите что-то сделать, не вызывая обновления страницы, Вы должны использовать Javascript для отправки запроса в фоновом режиме на сервер, позволить PHP делать то, что ему нужно, и получить от него ответ. Этот метод в основном называется AJAX, и вы можете найти множество ресурсов с помощью Google (например,удивительный учебник Mozilla).


без перезагрузки, используя только html y 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>

вот PHP-скрипт, чтобы сделать то, что вы описываете, хотя и бессмысленно. Вам нужно прочитать на стороне сервера и на стороне клиента. PHP не может работать на стороне клиента, вы должны использовать javascript для взаимодействия с сервером или мириться с обновлением страницы. Если вы не можете этого понять, вы не сможете использовать мой код (или чей-либо еще) в своих интересах.

следующий код выполняет вызов AJAX без jQuery и вызывает тот же скрипт для потоковой передачи 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 } ?>

использовать SAJAX или переключиться на JavaScript

Sajax-это инструмент с открытым исходным кодом, чтобы сделать Программирование сайтов с помощью Ajax рамки - также известный как XMLHttpRequest или удаленные сценарии - как можно проще. Sajax делает его легко вызвать PHP, Perl или Python функции с ваших веб-страниц через JavaScript без выполнения обновление браузера.


вот как работает PHP. test() будет выполняться при загрузке страницы, а не при нажатии кнопки Submit.

чтобы делать такие вещи, вы должны иметь onclick атрибут выполните вызов AJAX для файла PHP.


Если вы не хотите использовать Ajax и хотите перезагрузить свою страницу .

<?php
if(isset($_POST['user']) {
echo $_POST["user"]; //just an example of processing
}    
?>

вы можете отправить форму без обновления страницы, но, насколько мне известно, это невозможно без использования JavaScript/AJAX вызова PHP-скрипта на вашем сервере. В следующем примере используется библиотека JavaScript jQuery.

HTML-код

<form method = 'post' action = '' id = 'theForm'>
...
</form>

Java Script

$(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-файл (который нужно будет быть в отдельные, кстати). The data выше должна быть строка запроса в кодировке URL, которую вы хотите отправить в файл PHP (в основном все текущие значения полей формы). Они появятся на вашем серверном PHP-скрипте в $_GET супер глобальный. Пример ниже.

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", вышеуказанный идентификатор - "пользователь".)

после запуска скрипта PHP,success вызывается функция, и все выходные данные, созданные PHP-скриптом, будут сохранены в переменной html.

...
success: function(html) {
    alert(html);
}
...

взгляните на этот пример:

<!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>

Это лучший способ, который я использую для создания отправки без загрузки в форме.

вы можете использовать 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>