elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Envio de datos a la base de datos con AJAX
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Envio de datos a la base de datos con AJAX  (Leído 5,517 veces)
Drakaris

Desconectado Desconectado

Mensajes: 286


Todo lo que puedas imaginar, lo puedes crear.


Ver Perfil
Envio de datos a la base de datos con AJAX
« en: 25 Febrero 2018, 22:19 pm »

Hola. quiero enviar mis datos del formulario a mi DDBB sin recargar la página, para eso necesito AJAX, me busque un tutorial por YouTube y lo hice pero pasa una cosa, y es que me lo ejecuta bien pero no me ejecuta el afterSend. (La funcion de afterSend es que me muestre un popup diciendome que esta guardado en la DDBB.)

Código:
 $(document).ready(function(){
    $("#enviar").click(function(){
      var datos = $("#demo").serialize();
      $.ajax({
        type:"POST",
        url:"verificar_captcha.php",
        data:datos,
        afterSend:function(){
          $(".popup_correctoevento").delay(500).slideDown("slow");
          $(".popup_correctoevento").delay(1000).slideUp("slow");
        }
      })
    });
  });

verificar_captcha.php
Código:
<?php
  session_start( ); // allows us to retrieve our key form the session
  /*
  First encrypt the key passed by the form, then compare it to the already encrypted key stored inside our session variable
          */
  if( md5( $_POST[ 'code' ] ) != $_SESSION[ 'key' ] ) {
  ?>
  <script>
    $(document).ready(function(){
        $(".popup_errorcaptchaevento").delay(500).slideDown("slow");
        $(".popup_errorcaptchaevento").delay(1000).slideUp("slow");
    });
  </script>
  <?php
  } else {
    include('anadirevento.php');
  }
?>

anadirevento.php
Código:
<?php
$servername = "private";
$username = "private";
$password = "private";
$dbname = "private";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Error: " . $conn->connect_error);
}
$fecha = $_POST['databox'];
$tipoEvento = $_POST['tipoEventos'];
$otro = $_POST['otroTipoEventos'];
$materia = $_POST['materiabox'];
$asunto = $_POST['asuntobox'];
$tarea = $_POST['tareabox'];
$evento = $_POST['eventobox'];
mysqli_escape_string($_POST['databox']);
mysqli_escape_string($_POST['tipoEventos']);
mysqli_escape_string($_POST['otroTipoEventos']);
mysqli_escape_string($_POST['materiabox']);
mysqli_escape_string($_POST['asuntobox']);
mysqli_escape_string($_POST['tareabox']);
mysqli_escape_string($_POST['eventobox']);

$sql = " INSERT INTO 1esoacalendar (fecha, tipoevento, otro, materia, asunto, tarea, evento) VALUES ('$fecha','$tipoEvento','$otro','$materia','$asunto','$tarea','$evento')";

if ($conn->query($sql) === TRUE) {
?>
<script>
  $(document).ready(function(){
    $(".popup_correctoevento").delay(500).slideDown("slow");
    $(".popup_correctoevento").delay(1000).slideUp("slow");
  });
</script>
<?
}else{
?>
<script>
  $(document).ready(function(){
    $(".popup_errorevento").delay(500).slideDown("slow");
    $(".popup_errorevento").delay(1000).slideUp("slow");
  });
</script>
<?
}
$conn->close();
?>

Porque no me ejecuta el afterSend?

PD:
Ah!!  Y antes puse success y no afterSend sin ninguna funcion, y me ejecutaba el anadirevento.php pero sin los scripts.¿Porque?

Gracias de antemano.


« Última modificación: 9 Marzo 2018, 20:34 pm por Drakaris » En línea

Lo increible, no es lo que ves, sino como es
Rave1996

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Envio de datos a la base de datos con AJAX
« Respuesta #1 en: 25 Febrero 2018, 23:03 pm »

Hola,
no existe afterSend con la librería jQuery.

Sin embargo, puedes utilizar... complete o done, dependiendo de para que lo necesites.

Un pequeño ejemplo con done...

Código
  1. $(document).ready(function(){
  2. $('#send').click(function(e){
  3. $.ajax({
  4. type: 'POST',
  5. url: 'ejemplo.php',
  6. data: { user: $('#user').val(), pass: $('#pass').val() }
  7. }).done(function(response){
  8. if( response == "ok" )
  9. window.location="ejemplo2.php";
  10. });
  11. });
  12. });
  13.  

y la documentación de la libreria.

Nota: Prueba sustituyendo el $(document).ready... del verificar_catpcha.php por este script

Código
  1. $(function(){
  2. $(".popup_errorcaptchaevento").delay(500).slideDown("slow");
  3. $(".popup_errorcaptchaevento").delay(1000).slideUp("slow");
  4. });
  5.  

Saludos.


« Última modificación: 25 Febrero 2018, 23:27 pm por Rave1996 » En línea

srWhiteSkull


Desconectado Desconectado

Mensajes: 444



Ver Perfil WWW
Re: Envio de datos a la base de datos con AJAX
« Respuesta #2 en: 26 Febrero 2018, 00:31 am »

Citar
, y me ejecutaba el anadirevento.php pero sin los scripts.¿Porque?


Claro, el js que envías primeramente no lo estás tratando y segundo tal como lo tienes lo envías desde php como html. Lo ideal sería que enviaras solo js y la respuesta desde el cliente lo ejecutaras con la función eval() que toma como argumento un string que contenga js y lo ejecuta.

De todas formas, si pretendes hacer lo que citabas en el otro hilo, simplemente tienes qur poner un setTimeout() que cada tiempo haga una consulta por ajax al servidor y el servidor devuelva los datos actualizados, y luego ejecute nuevamente el setTimeout(). Se podría usar setInterval pero tendrías que tener cuidado de no solapar las consultas.

pd intenta prescindir de jquery y usa js para que aprendas, es un consejo.
« Última modificación: 26 Febrero 2018, 00:33 am por srWhiteSkull » En línea

Drakaris

Desconectado Desconectado

Mensajes: 286


Todo lo que puedas imaginar, lo puedes crear.


Ver Perfil
Re: Envio de datos a la base de datos con AJAX
« Respuesta #3 en: 1 Marzo 2018, 23:40 pm »

Hola,
no existe afterSend con la librería jQuery.

Sin embargo, puedes utilizar... complete o done, dependiendo de para que lo necesites.

Un pequeño ejemplo con done...

Código
  1. $(document).ready(function(){
  2. $('#send').click(function(e){
  3. $.ajax({
  4. type: 'POST',
  5. url: 'ejemplo.php',
  6. data: { user: $('#user').val(), pass: $('#pass').val() }
  7. }).done(function(response){
  8. if( response == "ok" )
  9. window.location="ejemplo2.php";
  10. });
  11. });
  12. });
  13.  

y la documentación de la libreria.

Nota: Prueba sustituyendo el $(document).ready... del verificar_catpcha.php por este script

Código
  1. $(function(){
  2. $(".popup_errorcaptchaevento").delay(500).slideDown("slow");
  3. $(".popup_errorcaptchaevento").delay(1000).slideUp("slow");
  4. });
  5.  

Saludos.

Hola Rave1996 he probado con este código:
Código:
  $(document).ready(function(){
    $("#enviar").click(function(){
      var datos = $("#demo").serialize();
      $.ajax({
        url: 'verificar_captcha.php',
        type: 'POST',
        data:datos,
      })
      .done(function(res) {
        if (res != "ok") {
          $(".popup_errorcaptchaevento").delay(500).slideDown("slow");
          $(".popup_errorcaptchaevento").delay(1000).slideUp("slow");
        }else{
          alert("hola");
        }
      })
      return false;
    });
  });

Y no me ejecuta bien la declaración if else, solamente me lo ejecuta el if pero no el else tanto si el
Código:
res
no es igual al
Código:
ok
como si lo es.

Porque no me ejecuta el else?

verificar_captcha.php:
Código:
       <?php

session_start( ); // allows us to retrieve our key form the session

/*

First encrypt the key passed by the form, then compare it to the already encrypted key we have stored inside our session variable

*/

if( md5( $_POST[ 'code' ] ) != $_SESSION[ 'key' ] ) {
?>
<script>
  $(function(){
    $(".popup_errorcaptchaevento").delay(500).slideDown("slow");
    $(".popup_errorcaptchaevento").delay(1000).slideUp("slow");
  });
</script>
<?
}
?>

Gracias de antemano.
En línea

Lo increible, no es lo que ves, sino como es
EFEX


Desconectado Desconectado

Mensajes: 1.171


"Dinero Facil"


Ver Perfil WWW
Re: Envio de datos a la base de datos con AJAX
« Respuesta #4 en: 2 Marzo 2018, 17:17 pm »

Obviamente no tienes ni idea de lo que estas haciendo, no entiendes tampoco los conceptos, ni javascript ni jquery ni php, todo tiene una funcion logica aqui. Copiando, pegando codigo y luego refrescando la pagina no va a funcionar si no sabes lo que haces, tomate tu tiempo para aprender.
En línea

Drakaris

Desconectado Desconectado

Mensajes: 286


Todo lo que puedas imaginar, lo puedes crear.


Ver Perfil
Re: Envio de datos a la base de datos con AJAX
« Respuesta #5 en: 5 Marzo 2018, 19:09 pm »

Obviamente no tienes ni idea de lo que estas haciendo, no entiendes tampoco los conceptos, ni javascript ni jquery ni php, todo tiene una funcion logica aqui. Copiando, pegando codigo y luego refrescando la pagina no va a funcionar si no sabes lo que haces, tomate tu tiempo para aprender.
Hola, es verdad, no entendía lo que hacia así que me tomé mi tiempo, es que las prisas...

Y ahora lo entiendo. Este código:

Código:
<script type="text/javascript">
$(document).ready(function() {
$("#enviar").click(function(){
var datos=$('#demo').serialize();
$.ajax({
type:"POST",
url:"anadirevento.php",
data:datos,
success:function(r){
if (r==1){
$(".popup_correctoevento").delay(500).slideDown("slow");
$(".popup_correctoevento").delay(1000).slideUp("slow");
}else{
$(".popup_errorevento").delay(500).slideDown("slow");
$(".popup_errorevento").delay(1000).slideUp("slow");
}
}
});
return false;
});
});
</script>
anadirevento.php
Código:
<?php
$servername = "";
$username = "";
$password = "";
$dbname = "";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Error: " . $conn->connect_error);
}
$fecha = $_POST['databox'];
$tipoEvento = $_POST['tipoEventos'];
$otro = $_POST['otroTipoEventos'];
$materia = $_POST['materiabox'];
$asunto = $_POST['asuntobox'];
$tarea = $_POST['tareabox'];
$evento = $_POST['eventobox'];
mysqli_escape_string($_POST['databox']);
mysqli_escape_string($_POST['tipoEventos']);
mysqli_escape_string($_POST['otroTipoEventos']);
mysqli_escape_string($_POST['materiabox']);
mysqli_escape_string($_POST['asuntobox']);
mysqli_escape_string($_POST['tareabox']);
mysqli_escape_string($_POST['eventobox']);

$sql = " INSERT INTO 1esoacalendar (fecha, tipoevento, otro, materia, asunto, tarea, evento) VALUES ('$fecha','$tipoEvento','$otro','$materia','$asunto','$tarea','$evento')";
echo mysqli_query($conn,$sql);
$conn->close();
?>

Eso ya lo conseguí, pero realmente no quería hacer eso, sino hacer una función que cuando clique en el boton #enviar me haga una condición if que sí algún campo de texto está vacío me muestre el pop-up que informe de algún campo vacío y sino que me ejecute dos funciones AJAX, me informe y creo que se hace con la función when(), por la cual cosa hice esto:
Código:
$(document).ready(function() {
var data1 = $("#data");
var tipoEventos1 = $("#tipoEventos");
var materia1 = $("#materia");
var tarea1 = $("#tarea");
var captcha1 = $("#captcha");
function validar12(resp){
          if (resp!=1){
            $(".popup_errorcaptchaevento").delay(500).slideDown("slow");
            $(".popup_errorcaptchaevento").delay(1000).slideUp("slow");
          }
        }
        function send(r){
          if(r==1){
            $(".popup_correctoevento").delay(500).slideDown("slow");
            $(".popup_correctoevento").delay(1000).slideUp("slow");          
          }else{
            $(".popup_errorevento").delay(500).slideDown("slow");
            $(".popup_errorevento").delay(1000).slideUp("slow");            
          }
}
$("#enviar").click(function(){
if(data1.val() === "" || tipoEventos1.val() === "" || materia1.val() === "" || tarea1.val() === "" || captcha1.val() === ""){
$(".popup_validar").delay(500).slideDown('slow');
$(".popup_validar").delay(1000).slideUp('slow');
}else{
$.when($.ajax("verificar_captcha.php"),$.ajax("anadirevento.php"))
.then(validar12(),send());
}
 return false;    
});
});
Código:
      <?php
          session_start( ); // allows us to retrieve our key form the session
          /*
          First encrypt the key passed by the form, then compare it to the already encrypted key we have stored inside our session variable
          */
          echo md5($_POST["code"]) == $_SESSION["key"];
        ?>
Cuando dejo un input vacío me lanza el popup de advertencia bien, y cuando relleno todo, y doy click en enviar, me lannza el popup de error de captcha, siempre, auque el captcha lo tenga bien y además no me guarda los datos en la base de datos.

Nosé donde esta el problema, ¿Es lógico lo que he planteado?.

PD: Además leí el api de jquery de la función when() y, si no recuerdo mal, creo que decía que solamente en la parte de .then(),se ejecuta la primera función, y si es así nosé como hacer para que me ejecute ambas.

Gracias de antermano.
« Última modificación: 5 Marzo 2018, 19:15 pm por Drakaris » En línea

Lo increible, no es lo que ves, sino como es
EFEX


Desconectado Desconectado

Mensajes: 1.171


"Dinero Facil"


Ver Perfil WWW
Re: Envio de datos a la base de datos con AJAX
« Respuesta #6 en: 5 Marzo 2018, 22:53 pm »

Código
  1. ...
  2. $.when($.ajax("verificar_captcha.php"),$.ajax("anadirevento.php"))
  3. .then(validar12(),send());
  4. ...

Creo que el error se debe a validar12(), debe pasarse como una referencia a una funcion(validar12) en .then y como es una funcion sin argumentos siempre se cumplira la condicion.

Código
  1. ...
  2. .then(validar12);  //Nota que es sin los parentesis.
  3. ...

Creo que no es valido usar send() despues de validar12, segun la documentacion la sagunda funcion se reserba en caso de que alguno de las peticiones ajax no pudieron realizarse.

Ademas, deberias plantear si de verdad necesitas un captcha, por que estas tratando de validar el captcha pero a la vez subes la consulta, osea que el captcha no sirve para nada. Fijate en la consola, F12 > Network, veras como se disparan las dos consultas ajax cuando apretas el boton. Deberias ser.. verificar campos vacios > verificar captcha > añadir evento.
En línea

Drakaris

Desconectado Desconectado

Mensajes: 286


Todo lo que puedas imaginar, lo puedes crear.


Ver Perfil
Re: Envio de datos a la base de datos con AJAX
« Respuesta #7 en: 9 Marzo 2018, 20:33 pm »

Código
  1. ...
  2. $.when($.ajax("verificar_captcha.php"),$.ajax("anadirevento.php"))
  3. .then(validar12(),send());
  4. ...

Creo que el error se debe a validar12(), debe pasarse como una referencia a una funcion(validar12) en .then y como es una funcion sin argumentos siempre se cumplira la condicion.

Código
  1. ...
  2. .then(validar12);  //Nota que es sin los parentesis.
  3. ...

Creo que no es valido usar send() despues de validar12, segun la documentacion la sagunda funcion se reserba en caso de que alguno de las peticiones ajax no pudieron realizarse.

Ademas, deberias plantear si de verdad necesitas un captcha, por que estas tratando de validar el captcha pero a la vez subes la consulta, osea que el captcha no sirve para nada. Fijate en la consola, F12 > Network, veras como se disparan las dos consultas ajax cuando apretas el boton. Deberias ser.. verificar campos vacios > verificar captcha > añadir evento.

Hola. Ya lo conseguí, era más fácil de lo que creía, al final no lo hice con when(), así que lo hice con condiciones if else, este es el código:
Código:
$(document).ready(function() {
$("#enviar").click(function(){
var datos=$('#demo').serialize();
var fecha2 = $("#data");
var tipo2 = $("#tipoEventos");
var otro2 = $("#otroTipoEventos");
var materia2 = $("#materia");
var tarea2 = $("#tarea");
$.ajax({
        type:"POST",
        url:"verificar_captcha.php",
        data:datos,
        success:function(resp){
          if (resp!=1){
            $(".popup_errorcaptchaevento").delay(500).slideDown("slow");
            $(".popup_errorcaptchaevento").delay(1000).slideUp("slow");
          }else{
            $(".popup_correctoevento").delay(500).slideDown("slow");
            $(".popup_correctoevento").delay(1000).slideUp("slow");
          $.ajax({
          type:"POST",
          url:"anadirevento.php",
          data:datos,
          success:function(r){
          if (r!=1){
              $(".popup_errorevento").delay(500).slideDown("slow");
              $(".popup_errorevento").delay(1000).slideUp("slow");
          }
          }
          })
          }
        }
})
return false;
});
});
No puse el popup de aviso de campos vacíos, ya que no me lo ejecutaba, y además no era de gran importancia, era más un detalle.

Gracais por vuestra atención.
En línea

Lo increible, no es lo que ves, sino como es
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines