Solución:
Esto no se puede hacer de la manera de la que estás hablando. PHP es lado del servidor tiempo la forma existe en el lado del cliente. Deberá considerar el uso de JavaScript y / o Ajax si no desea actualizar la página.
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>
Llamará getResult.php
y pasarle el formulario serializado para que PHP pueda leer esos valores. Cualquier cosa getResult.php
Los ecos volverán a la función de JavaScript en el result
variable de nuevo en test.php
y (en este caso) se muestra en un cuadro de alerta.
getResult.php
<?php
echo "The name you typed is: " . $_REQUEST['user'];
?>
NOTA
Este ejemplo usa jQuery, un contenedor de JavaScript de terceros. Le sugiero que primero desarrolle una mejor comprensión de cómo estas tecnologías web funcionan juntas antes de complicarse aún más las cosas.
Tiene un gran malentendido sobre cómo funciona la web.
Básicamente, las cosas suceden de esta manera:
- Solicitudes del usuario (bueno, el navegador)
test.php
desde tu servidor - En el servidor
test.php
se ejecuta, todo lo que hay dentro se ejecuta y una página HTML resultante (que incluye su formulario) se enviará de vuelta al navegador - El navegador muestra el formulario, el usuario puede interactuar con él.
- El usuario envía el formulario (a la URL definida en
action
, que es el mismo archivo en este caso), por lo que todo comienza desde el principio (excepto que también se enviarán los datos del formulario). Nueva solicitud al servidor, PHP se ejecuta, etc. Eso significa que la página se actualizará.
Estabas intentando invocar test()
de tu onclick
atributo. Esta técnica se utiliza para ejecutar un lado del cliente script, que en la mayoría de los casos Javascript (el código se ejecutará en el navegador del usuario). Eso no tiene nada que ver con PHP, cual es lado del servidor, reside en su servidor y solo se ejecutará si llega una solicitud. Por ejemplo, lea Codificación del lado del cliente versus Codificación del lado del servidor.
Si desea hacer algo sin provocar una actualización de la página, debe usar Javascript para enviar una solicitud en segundo plano al servidor, dejar que PHP haga lo que debe hacer y recibir una respuesta. Esta técnica se llama básicamente AJAX, y puedes encontrar muchos recursos geniales usando Google (como el increíble tutorial de Mozilla).
Sin recargar, usar HTML y PHP solo no es posible, pero esto puede ser muy similar a lo que quieres, pero tienes que recargar:
<?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>