-1

Lo que pretendo es que la siguiente función se active cuando el usuario haga click en un botón , la función debe llenar un select con las fechas comprendidas entre dos fechas, pero aún no lo he conseguido.

Esto es lo que tengo:

<?php
    function datefill(){
        $fechaFFase=$date_from;
        $nuevafecha = new DateTime($fechaFFase);
        $hello=$nuevafecha->modify('+15 day');
        $dateini = $dateiniii->format('Y-m-d');
        $datefin = $hello->format('Y-m-d');
        for($i=$dateini;$i<=$datefin;$i = date("Y-m-d", strtotime($i ."+ 1 days"))){
?>
<?php
            <option value="<?php echo $i;?>"><?php echo $i;?></option>
        }
    }
?>

Este es el script del botón que lo debe ejecutar:

<button name="enviardatos" type="submit" onclick="datafill()" class="full-width icon-check animated bounce" ><?php _e( "SEARCH NOW", "trav" ); ?></button>

De antemano agradecería cualquier tipo de ayuda.

lromeraj
  • 1,886
  • 12
  • 30
alvin luperon
  • 1
  • 1
  • 1
  • 1
  • 1
    Para poder resolver tu problema primero debes investigar sobre AJAX, porque como lo quieres hacer no es posible, ya que php es un lenguaje que se interpreta del lado del servidor, por lo que tu función `datefill()` no es alcanzable vía javascript. – Yikarus Apr 19 '17 at 18:40
  • Hola mira si quieres hacer eso la forma mas cómoda de hacer es por jquery o ajas en el enlace que te dejan en el comentario de arriba esta muy bien explicado. – Yoel Rodriguez Apr 19 '17 at 18:53
  • Bueno muchas gracias amigos intentare hacerlo como me sujieren, aunque un amigo me dijo que ajax como que no funciona normal en wordpress y la función la necesito para wordpress. – alvin luperon Apr 19 '17 at 18:56

1 Answers1

3

Recuerda que PHP es un código que se ejecuta en el servidor, y NO en el cliente, y por esa razón NO puedes llamar a una función PHP como si llamases a una función de JS en el cliente.

Puedes hacerlo de dos formas:

Una es esta:

Creas un formulario que contiene los inputs que tu quieras:

HTML:

<form action="tu_archivo.php" method="post">
    Fecha: <input type="date" name="fecha"><br>
    Nombre: <input type="text" name="nombre"><br>
    <input type="submit" value="Enviar">
</form>

Y otra forma sería, (para tu caso la veo la más útil) y es usar Ajax:

HTML:

<input id ="fecha" type="date"><br>
<input id="nombre" type="text">

Y el script:

/*El objeto param contendrá los datos que mandarás al servidor para procesarlos*/
var param = {
    fecha: document.getElementById("fecha").value,
    nombre: document.getElementById("nombre").value
};

$.ajax({
    data: param,
    url: "archivo.php",
    method: "post",
    success: function(data) {
        /*La variable data contiene la respuesta de tu script PHP*/
    }
});

Recuerda que debes incluir la librería de jQuery: <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>

Y tu código PHP debería verse algo así:

<?php
$fecha = $_POST["fecha"];
$nombre = $_POST["nombre"];

/* Ahí ya has recogido los valores del objeto **`param`** que recibió el servidor, esto es un ejemplo lo cual aquí podrás tu manipular los datos como creas conveniente*/

echo ("Fecha: ".$fecha." | Nombre: ".$nombre);
/* Con esto conseguirás que cuando el cliente reciba la respuesta recibirá estos datos */
?>

Una cosa importante, el código PHP que he compartido NO evita la inyección SQL, yo te he puesto un ejemplo muy sencillo para que te hagas una idea básica de como funciona, si quieres saber más sobre la inyección SQL te dejo esta pregunta.

RECOMENDACIÓN: a aparte de todo me da la sensación de que ese código no lo has escrito tú, más que nada lo digo porque (si estoy en lo cierto), copiando poco se aprende, debes comenzar a entender bien como interactúan el cliente y el servidor en aplicaciones Web. Te recomiendo que te hagas un pequeño servidor (privado) y te montes un LAMP completo, te dejo aquí una guía muy buena de como hacerlo.

Espero que te haya servido de ayuda

lromeraj
  • 1,886
  • 12
  • 30