Вызов функции 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>