Вызов функции PHP из HTML-формы в том же файле?
Я пытаюсь выполнить функцию 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
}
?>
Однако у меня все еще проблема! У кого-нибудь есть идея?
Ответы
Ответ 1
Это невозможно сделать в моде, о котором вы говорите. 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
echos будет возвращено функции JS в переменной result
на test.php
и (в этом случае), отображаемой в окне предупреждения.
getResult.php
<?php
echo "The name you typed is: " . $_REQUEST['user'];
?>
ПРИМЕЧАНИЕ В этом примере используется jQuery, сторонний Javascript Wrapper. Я предлагаю вам сначала развить лучшее понимание того, как эти веб-технологии работают вместе, прежде чем усложнять ситуацию для себя.
Ответ 2
У вас есть большое непонимание того, как работает веб.
В принципе, все происходит так:
- Пользователь (ну, браузер) запрашивает
test.php
с вашего сервера.
- На сервере выполняется
test.php
, все внутри выполняется, и результирующая страница HTML (включая вашу форму) будет отправлена обратно в браузер
- В браузере отображается форма, пользователь может взаимодействовать с ней.
- Пользователь отправляет форму (в URL-адрес, определенный в
action
, который в этом случае является тем же самым файлом), поэтому все начинается с начала (за исключением того, что данные в форме также будут отправлены). Новый запрос на сервер, запуск PHP и т.д. Это означает, что страница будет обновлена.
Вы пытались вызвать test()
из вашего атрибута onclick
. Этот метод используется для запуска клиентской стороны script, которая в большинстве случаев Javascript (код будет запущен в браузере пользователя). Это не имеет ничего общего с PHP, который на стороне сервера, находится на вашем сервере и будет работать только в том случае, если запрос приходит. Пожалуйста, прочитайте Клиентское кодирование на стороне сервера на стороне клиента.
Если вы хотите что-то сделать, не вызывая обновление страницы, вам нужно использовать Javascript для отправки запроса в фоновом режиме на сервер, пусть PHP делает то, что ему нужно, и получает от него ответ. Этот метод в основном называется AJAX, и вы можете найти множество полезных ресурсов на нем с помощью Google (например, Mozilla amazing tutorial).
Ответ 3
Без перезагрузки, использование 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>
Ответ 4
Используйте SAJAX или переключитесь на JavaScript
Sajax - это инструмент с открытым исходным кодом для создания программирование веб-сайтов с использованием Ajax рамки - также известный как XMLHTTPRequest или удаленный скриптинг - как можно проще. Sajax делает это легко вызвать PHP, Perl или Python функции с веб-страниц через JavaScript без выполнения обновление браузера.
Ответ 5
Вот полный php script, чтобы делать то, что вы описываете, хотя и бессмысленно. Вы должны читать на стороне сервера или на стороне клиента. PHP не может работать на стороне клиента, вам нужно использовать javascript для взаимодействия с сервером или установки обновления страницы. Если вы не можете этого понять, вы не сможете использовать мой код (или кому-либо еще) в свою пользу.
Следующий код выполняет вызов AJAX без jQuery и вызывает тот же script, чтобы передать 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 } ?>
Ответ 6
Теперь, как работает PHP. test()
будет выполняться при загрузке страницы, а не при нажатии кнопки отправки.
Для этого вам нужно, чтобы атрибут onclick
выполнял вызов AJAX в файл PHP.
Ответ 7
если вы не хотите использовать Ajax и хотите, чтобы ваша страница перезагружалась.
<?php
if(isset($_POST['user']) {
echo $_POST["user"]; //just an example of processing
}
?>
Ответ 8
Вы можете отправить форму без обновления страницы, но, насколько мне известно, это невозможно без использования вызова JavaScript/AJAX на PHP Script на вашем сервере. В следующем примере используется 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 скрипт
}
});
return false;
});
});
После отправки будет вызываться анонимная функция Javascript, которая просто отправляет запрос в ваш PHP файл (который должен быть в отдельном файле, кстати). data
выше должен быть URL-кодированной строкой запроса, которую вы хотите отправить в файл PHP (в основном все текущие значения полей формы). Они появятся на вашем сервере PHP скрипт в супер-глобальном $_GET
. Ниже приведен пример.
var data = "a=5&b=6&c=7";
Если это ваша строка данных, то PHP Script увидит это как:
echo($_GET['a']); // 5
echo($_GET['b']); // 6
echo($_GET['c']); // 7
Однако вам нужно будет создать данные из полей формы, как они существуют для вашей формы, например:
var data = "user=" + $("#user").val();
(Вам нужно будет пометить каждое поле формы "id", указанный выше "user".)
После запуска PHP Script вызывается функция success
, и любой и весь вывод, созданный PHP скрипт, будет сохранен в переменной html
.
...
success: function(html) {
alert(html);
}
...
Ответ 9
Взгляните на этот пример:
<!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>
Ответ 10
Это лучший способ, который я использую для создания 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>