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

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

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

  • Как получить IP-адрес клиента в Laravel 5.1?
  • Можно ли отображать RTF-файл внутри веб-страницы с помощью PHP?
  • Symfony 2 загружает разные шаблоны в зависимости от свойств агента пользователя
  • Как проверить, существует ли уже существующее значение, чтобы избежать дублирования?
  • Массив сравнения 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 Solutions collect form web for “Вызов функции PHP из HTML-формы в том же файле?”

    Это невозможно сделать в моде, о котором вы говорите. 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 мог прочитать эти значения. Anything getResult.php будет возвращен функции JS в переменной result обратно на test.php и (в этом случае), показанном в поле предупреждения.

    getResult.php

     <?php echo "The name you typed is: " . $_REQUEST['user']; ?> 

    ПРИМЕЧАНИЕ. В этом примере используется jQuery, сторонний Javascript Wrapper. Я предлагаю вам сначала лучше понять, как эти веб-технологии работают вместе, прежде чем усложнять для себя дальнейшие действия.

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

    В принципе, все происходит так:

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

    Вы пытались вызвать test() из вашего атрибута onclick . Этот метод используется для запуска клиентского скрипта, который в большинстве случаев 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() будет выполняться при загрузке страницы, а не при нажатии кнопки отправки.

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

    в случае, если вы не хотите использовать Ajax и хотите, чтобы ваша страница перезагружалась.

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

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

    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-файл (который должен быть в отдельном файле, кстати). Приведенные выше 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», указанный выше «user».)

    После выполнения PHP Script Runs вызывается функция 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> 

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

    Вы можете использовать некоторый 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> 
    PHP is the Best Programming Language in the world.