Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Ethgar en 24 Noviembre 2015, 18:56 pm



Título: Llamar funcion de una clase php desde jquery
Publicado por: Ethgar en 24 Noviembre 2015, 18:56 pm
Buenas tardes, he tenido la necesidad de ejecutar una función desde jquery, lo explico un poco más;
 Tengo un archivo "Funciones.php" donde tengo obviamente mis funciones, y tengo un archivo en el que tengo un formulario, el cual mandaría la información a guardar, utilizando jquery logro enviar el formulario a un archivo externo (Sin funciones), el cual recibe el post y lo guarda, tuve que hacerlo así por que no he podido lograr que mande el formulario a una función; les dejo el siguiente código que es lo que tengo:

archivo funciones.php
Código
  1. <?php
  2. ini_set('display_errors', '1');
  3. require_once('../conex.php');
  4.  
  5. class Funciones {
  6. function __construct() {
  7.  
  8. }
  9.       public function guarda() {
  10.            $guardar = Conex::conex()->query("INSERT INTO tabla (valor1, valor2, valor3) VALUES (:valor1, :valor2, :valor3)');
  11.           $guardar->execute($_POST);
  12.      }
  13. }
  14.  


archivo que contiene el formulario
solo pondré el encabezado del form y el jquery que utilizo  (en el action del form puse el archivo que actualmente tengo para recibir el form):

Código
  1. <form role="form"  method="POST" action="guarda.php" class="formulario" id="formulario">
  2.  


y este es el jquery:

Código
  1. $(document).ready(function() {
  2. $(this).on("submit", ".formulario", function(e) {
  3. e.preventDefault();
  4. var enlace = $(this).attr('action');
  5. var formulario = $(this);
  6. $.ajax({
  7. url: enlace,
  8.         data: $('#formulario').serialize(),
  9.         type: 'post',
  10.         success: function(data) {
  11.             }
  12. });
  13.  
  14. })
  15.  
  16.  
  17.  
  18.  
  19. })
  20.  


Espero Alguien me pueda ayudar, me atasque aquí ya como tres días, saludos!!

Mod: Temas sobre PHP van al subforo de PHP.


Título: Re: Llamar funcion de una clase php desde jquery
Publicado por: gAb1 en 26 Noviembre 2015, 16:46 pm
Los formularios no se pueden (o deben) procesar directamente, primero hay que hacer ciertas comprobaciones y si todo esta correcto entonces se llama a la función para que procese los datos.

En el archivo Guarda.php (el que veo en el action del formulario y el del jquery supongo) tienes que llamar a la función guarda().

Primero declaras las variables del post y luego las envias como parametros al llamar la función.

Código
  1. // Si el formulario esta en el mismo archivo simplemente envuelves el código en un if
  2. if (@$_POST['current_email'] && @$_POST['new_email'] && @$_POST['confirm_new_email']) {
  3.  
  4.    $valor1 = filter_input(INPUT_POST, 'valor1', FILTER_SANITIZE_STRING);
  5.    $valor2 = filter_input(INPUT_POST, 'valor2', FILTER_SANITIZE_STRING);
  6.    $valor3 = filter_input(INPUT_POST, 'valor3', FILTER_SANITIZE_STRING);
  7.  
  8.    if ($valor1 && $valor2 && $valor3) {
  9.        // depende de como instancies la clase
  10.        $returned = $change_email = $Funciones->guarda($valor1, $valor2, $valor3);
  11.    }
  12.    else {
  13.        // error falta rellenar formulario...
  14.    }
  15.  
  16.    // lo que quieras devolver de la función si hay algun problema lo indicas aqui
  17.    if ($returned == 'error') {
  18.        // error al guardar la info...
  19.    }
  20. }
  21.  
  22. // Aquí puedes poner el formulario html
  23. ?>
  24.  
  25. <form role="form"  method="POST" action="guarda.php" class="formulario" id="formulario">


Título: Re: Llamar funcion de una clase php desde jquery
Publicado por: #!drvy en 26 Noviembre 2015, 18:04 pm
Citar
Los formularios no se pueden (o deben) procesar directamente, primero hay que hacer ciertas comprobaciones y si todo esta correcto entonces se llama a la función para que procese los datos.

En este caso parece que utiliza sentencias preparadas (http://php.net/manual/es/pdo.prepared-statements.php) y por tanto se evita directamente cualquier SQLi.

@Ethgar, probablemente quieras implementarte una pequeña API para controlar eventos solicitados vía ajax.

Saludos