Cómo llamar a una función PHP con solo hacer clic en un botón


151

He creado una página llamada functioncalling.php que contiene dos botones, Enviar e Insertar . Como principiante en PHP, quiero probar qué función se ejecuta cuando se hace clic en un botón. Quiero que la salida aparezca en la misma página. Entonces creé dos funciones, una para cada botón. El código fuente de functioncalling.php es el siguiente:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <body>
        <form action="functioncalling.php">
            <input type="text" name="txt" />
            <input type="submit" name="insert" value="insert" onclick="insert()" />
            <input type="submit" name="select" value="select" onclick="select()" />
        </form>

        <?php
            function select(){
               echo "The select function is called.";
            }
            function insert(){
               echo "The insert function is called.";
            }
        ?>

El problema aquí es que no obtengo ningún resultado después de hacer clic en cualquiera de los botones.

¿Dónde exactamente me estoy equivocando?


10
PHP se ejecuta en el servidor. Sus controladores de clics se ejecutan en el cliente. No puede ejecutar funciones PHP con solo hacer clic en un botón como este. Sin embargo, puedes hacerlo en Javascript.

1
Las preguntas que solicitan código deben demostrar una comprensión mínima del problema que se está resolviendo. Incluya las soluciones intentadas, por qué no funcionaron y los resultados esperados.

44
Gracias por responder. ¿Podría decirme cómo exactamente llamo a estas funciones PHP desde JavaScript?
Navaja

Respuestas:


93

Sí, necesitas Ajax aquí. Consulte el código a continuación para obtener más detalles.

 

Cambia tu marcado así

<input type="submit" class="button" name="insert" value="insert" />
<input type="submit" class="button" name="select" value="select" />

 

jQuery:

$(document).ready(function(){
    $('.button').click(function(){
        var clickBtnValue = $(this).val();
        var ajaxurl = 'ajax.php',
        data =  {'action': clickBtnValue};
        $.post(ajaxurl, data, function (response) {
            // Response div goes here.
            alert("action performed successfully");
        });
    });
});

En ajax.php

<?php
    if (isset($_POST['action'])) {
        switch ($_POST['action']) {
            case 'insert':
                insert();
                break;
            case 'select':
                select();
                break;
        }
    }

    function select() {
        echo "The select function is called.";
        exit;
    }

    function insert() {
        echo "The insert function is called.";
        exit;
    }
?>

Este código no funciona para mí: Error de referencia no capturado: $ no está definido
Benjamin

¿Incluyó la biblioteca JQuery antes de usar este código?
Roopendra

9
Lo hice, pero me di cuenta de que //code.jquery.com/...etc no se carga en localhost, ¡https: // sí! El código funciona bien, lo siento, mi error.
Benjamin

1
¡Hermoso! Exactamente lo que estaba buscando.

1
Me encanta el controlador de clase de botón. Felicitaciones por el código genérico que funciona en muchos escenarios.
Pablo Contreras

64

Los clics en los botones son del lado del cliente, mientras que PHP se ejecuta del lado del servidor , pero puede lograr esto usando Ajax :

$('.button').click(function() {
  $.ajax({
    type: "POST",
    url: "some.php",
    data: { name: "John" }
  }).done(function( msg ) {
    alert( "Data Saved: " + msg );
  });
});

En su archivo PHP:

<?php
    function abc($name){
        // Your code here
    }
?>

55
Gracias por dar la solución. En el fragmento de código AJAX que me ha proporcionado, ¿cómo llamo a las funciones de PHP en la propiedad .done?
Navaja

una vez que usa ajax para llamar al archivo php, ¿hay alguna forma de llamar a la función php específica? ¿o tendré que poner cada uno en un archivo diferente?
Lordbug

1
también use JS preventdefault para evitar que el formulario se envíe para que la página no se vuelva a cargar. w3schools.com/jsref/…
csandreas1

Como principiante, quiero aclarar mi duda. Si se evita que esas páginas se desarrollen donde los códigos HTML y PHP se fusionan en una sola página con HTML que sirve para la interacción del cliente como formularios y PHP que sirve como respuesta a dichos formularios HTML, como imprimir algunos resultados en función de si un botón en un se hace clic en el formulario?
KPMG

¿Cómo se supone que esto funcione? Puse una declaración de eco en el cuerpo de la función abc, y puse puntos de interrupción tanto en la línea de declaración de función como en la llamada de eco en la función. Cuando hago clic en el botón, se golpea el primer punto de interrupción (es decir, se declara la función) pero el que está en el cuerpo nunca golpea, lo que considero que la función nunca se llama.
Shaggydog

41

Debe hacer que el botón llame a la misma página y, en una sección de PHP, compruebe si se presionó el botón:

HTML:

<form action="theSamePage.php" method="post">
    <input type="submit" name="someAction" value="GO" />
</form>

PHP:

<?php
    if($_SERVER['REQUEST_METHOD'] == "POST" and isset($_POST['someAction']))
    {
        func();
    }
    function func()
    {
        // do stuff     
    }
?>

17

No puede llamar a funciones PHP como hacer clic en un botón desde HTML. Porque HTML está en el lado del cliente mientras PHP ejecuta el lado del servidor.

O necesita usar algo de Ajax o hacerlo como en el fragmento de código a continuación.

<?php
    if ($_GET) {
        if (isset($_GET['insert'])) {
            insert();
        } elseif (isset($_GET['select'])) {
            select();
        }
    }

    function select()
    {
       echo "The select function is called.";
    }

    function insert()
    {
       echo "The insert function is called.";
    }
?>

Debe publicar los datos de su formulario y luego verificar el botón apropiado en el que se hace clic.


¿Y si quiero dar un parámetro a la función?
Nick Alexander

Puede pasar argumentos a funciones como otras funciones en php
Jason W

14

Para mostrar $ mensaje en su entrada:

<?php
    if(isset($_POST['insert'])){
        $message= "The insert function is called.";
    }
    if(isset($_POST['select'])){
        $message="The select function is called.";
    }
?>


<form  method="post">
    <input type="text" name="txt" value="<?php if(isset($message)){ echo $message;}?>" >
    <input type="submit" name="insert" value="insert">
    <input type="submit" name="select" value="select" >
</form>

Para usar functioncalling.php como un archivo externo, debe incluirlo de alguna manera en su documento HTML.


8

Prueba esto:

if($_POST['select'] and $_SERVER['REQUEST_METHOD'] == "POST"){
    select();
}
if($_POST['insert'] and $_SERVER['REQUEST_METHOD'] == "POST"){
    insert();
}

1
esta es la mejor respuesta en lugar de usar marcos estúpidos
vincent thorpe

7

Puede escribir así en JavaScript o jQuery Ajax y llamar al archivo

$('#btn').click(function(){
  $.ajax({
    url:'test.php?call=true',
    type:'GET',
    success:function(data){
    body.append(data);
    }
  });
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script>
<form  method='get' >

  <input type="button" id="btn" value="click">
</form>

<?php
    if(isset($_GET['call'])){

        function anyfunction(){
            echo "added";

            // Your funtion code
        }
    }
?>



4

Estaba atrapado en esto y lo resolví con un campo oculto:

<form method="post" action="test.php">
    <input type="hidden" name="ID" value"">
</form>

En valuepuedes agregar lo que quieras agregar.

En test.php puede recuperar el valor a través de $_Post[ID].


¿No debería IDser citado en $_Post[ID]? ¿PHP admite palabras simples, como en Perl?
Peter Mortensen

3

Use una llamada recursiva donde la acción del formulario se llama a sí misma. Luego agregue código PHP en la misma forma para atraparlo. En foo.phpsu formulario llamará foo.phpalpost

<html>
    <body>
        <form action="foo.php" method="post">

Una vez que se haya enviado el formulario, se llamará a sí mismo ( foo.php) y puede atraparlo a través de la variable predefinida de PHP $_SERVERcomo se muestra en el código a continuación

<?php
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        echo "caught post";
    }
?>
        </form>
    </body>
</html>

2

Aquí hay un ejemplo que podría usar:

<html>
    <body>
        <form action="btnclick.php" method="get">
            <input type="submit" name="on" value="on">
            <input type="submit" name="off" value="off">
        </form>
    </body>
</html>
<?php
    if(isset($_GET['on'])) {
        onFunc();
    }
    if(isset($_GET['off'])) {
        offFunc();
    }

    function onFunc(){
        echo "Button on Clicked";
    }
    function offFunc(){
        echo "Button off clicked";
    }
?>

0

Simplemente puedes hacer esto. En php, puede determinar el clic del botón mediante el uso de

if(isset($_Post['button_tag_name']){
echo "Button Clicked";
}

Por lo tanto, debe modificar su código de la siguiente manera:


<?php

if(isset($_Post['select']){
 echo "select button clicked and select method should be executed"
}
if(isset($_Post['insert']){
 echo "insert button clicked and insert method should be executed"
}

        ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <body>
        <form action="functioncalling.php">
            <input type="text" name="txt" />
            <input type="submit" name="insert" value="insert" onclick="insert()" />
            <input type="submit" name="select" value="select" onclick="select()" />
        </form>

<script>
//This will be processed on the client side
function insert(){
  window.alert("You click insert button");
}

function select(){
  window.alert("You click insert button");
}
</script>
</body>
</html>


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.