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
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
require_once('../conex.php');
class Funciones {
function __construct() {
}
public function guarda() {
$guardar = Conex::conex()->query("INSERT INTO tabla (valor1, valor2, valor3) VALUES (:valor1, :valor2, :valor3)');
$guardar->execute($_POST);
}
}
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):
<form role="form" method="POST" action="guarda.php" class="formulario" id="formulario">
y este es el jquery:
$(document).ready(function() {
$(this).on("submit", ".formulario", function(e) {
e.preventDefault();
var enlace = $(this).attr('action');
var formulario = $(this);
$.ajax({
url: enlace,
data: $('#formulario').serialize(),
type: 'post',
success: function(data) {
}
});
})
})
Espero Alguien me pueda ayudar, me atasque aquí ya como tres días, saludos!!
Mod: Temas sobre PHP van al subforo de PHP.
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.
// Si el formulario esta en el mismo archivo simplemente envuelves el código en un if
if (@$_POST['current_email'] && @$_POST['new_email'] && @$_POST['confirm_new_email']) {
$valor1 = filter_input(INPUT_POST, 'valor1', FILTER_SANITIZE_STRING);
$valor2 = filter_input(INPUT_POST, 'valor2', FILTER_SANITIZE_STRING);
$valor3 = filter_input(INPUT_POST, 'valor3', FILTER_SANITIZE_STRING);
if ($valor1 && $valor2 && $valor3) {
// depende de como instancies la clase
$returned = $change_email = $Funciones->guarda($valor1, $valor2, $valor3);
}
else {
// error falta rellenar formulario...
}
// lo que quieras devolver de la función si hay algun problema lo indicas aqui
if ($returned == 'error') {
// error al guardar la info...
}
}
// Aquí puedes poner el formulario html
?>
<form role="form" method="POST" action="guarda.php" class="formulario" id="formulario">
CitarLos 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