Enviar consultas sql por ajax

FaLLeN

Hola jovenes! Vereis, no tengo ni idea de Ajax y siempre que busco tutoriales, todos me suenan a chino.

Cual es la mejor manera de enviar una consulta SQL en PHP por medio de Ajax o jQuery?

Quiero enviar una consulta update por medio de un boton sin recargar la web.

Gracias!

Mujiwara

Con el jQuery montas que cuando hagan click en el botón haga la siguiente acción:

$.ajax({
  url: 'sql.php',
  type: 'GET', // o 'POST',
  data: { campo1: "valor1" },
  success: function(data) {
    alert(data);
  }
});

(Obviamente, faltan mas parámetros dentro del $.ajax)

Dentro del PHP recibes el "data" si es tu caso para ejecutar la sql con variables externas y ya está, no es nada del otro mundo.

En este caso recibes la información por el data de success y en su estructura data, textStatus, jqXHR

2 1 respuesta
FaLLeN

#2 Ahhhh vale, ya entiendo! Voy a probar y comento de nuevo.

Muchas gracias :D

2 respuestas
kraneok

Esto no se debe hacer:


$variable1 = $_POST['variable1'];
$variable2 = $_POST['variable2'];
$variableN = $_POST['variableN'];

//Consulta sql

$ssql = mysql_query("blabla bla from babla where blabla = $variable1");
if(mysql_num_rows($ssql) > 0){
echo 'Ha devuelto algo';
}

Es el código que ha puesto #4.

http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL#PHP

Editado por OleMoudi:

Disculpas por cepillarme tu post, ha sido un error. Le he dado a editar para copiar tu código creyendo que estaba posteando.

1
kraneok

#3 Podrías decir si te sirve o algo?

Gracias, solo por saber.

1 respuesta
JuAn4k4

REST Services

Ajax -> REST Service -> Algo de logica,permisos, etc. -> Data -> sql.

jQuery para ajax va bastante bien.

Ajax esta en tu javascript, se ejecuta en cliente.
SQL se ejecuta en el servidor, al menos deberia.

Por lo que tecnicamente, no llamas a sql desde ajax, me parece que los confundes al estar php tan bien separado.

1 respuesta
FaLLeN

#5 Si claro! En cuanto llegue a casa lo pruebo y te comento!

FaLLeN

#6 Entiendo que uno esta del lado del servidor y otro del lado cliente. Es asi?

En este caso, lo que ajax tiene que hacer es enviar la consulta sin recargar la pagina.

1 respuesta
kraneok

#8 Te funciona eso?

2 respuestas
FaLLeN

#9 Ahora mismo estoy probando, te contesto en 10 min!

FaLLeN

#9 A ver, lo que necesito es que al pulsar en un enlace, ademas de llevarte a la web de destino, ejecute la consulta, que en este caso es un incremento para un numero, en plan contar los clicks que se lleva ese enlace.

Imagino que esto tendre que vincularlo con un onClick en el enlace no?

kraneok
<a href="ddestino" onclick="funcionX();">Pulsa y sube</a>

$.post('destino.php', {variable1: valor1, variable2: valor2, [variable: valor]*}, function(data){
    //En data recibimos lo que el php nos diga
   console.log(data); //Esto escribiría en console Ha devuelto algo, en caso de que la sql fuese cierta
});

Puedes hacerlo de otra manera, si quieres te la pongo.

1 respuesta
FaLLeN

#12 Entiendo entonces que tengo que hacer una funcion tal que asi?

function(){
$.post('destino.php', {variable1: valor1}
});
<a href="ddestino" onclick="funcionX(<?php echo $variable ?>);">Pulsa y sube</a>

A lo mejor es una locura lo que he puesto, pero es que ya te digo, que con Ajax y esas cosas estoy mas verde que nada...

kraneok

Es que te lo estoy escribiendo sin hacer la prueba, voy a hacer el script en mi local y ya te lo paso.

1
Soltrac

A ver anda te pongo un ejemplo muy sencillo para comprobar si un usuario está dado de alta en la base de datos antes de darle a submit.

Vista:

<input type="text" blablabla id="email">

Js:

jQuery.noConflict()(function($){
$('#email').blur(function() {
   var email = $('#email').val();
   $.post('/email_taken.php', { 'email':email },
		
   // Respuesta del servidor
   function (result) 
   {	
	 // bad_email es un div que contendrá el mensaje de error. Lo limpiamos por si estaba relleno antes.
	 $('#bad_email').replaceWith('');
	
  // Si el resultado es TRUE....
  if (result) 
      {
     $('#email').after('<div id="bad_email">' + 'Email en uso chaval!!" + </div>');
      }
}
);
})

Controlador:

$email = $_POST('email'));

// Comprobaciones de seguridad....

// Comprobación en base de datos ....

if (ExisteEnDB())
   echo '1';
1 1 respuesta
FaLLeN

#15 Ahi esto:

var email = $('#email').val();

recoge el valor del campo con la etiqueta #email?

Si lo mio es un href plano, que no es un imput, y cada href tendra su id, como puedo enviarlo?

1 respuesta
Soltrac

#16 Ponle al A un id y no le pases parámetros...


<a href id="pepe"> </a>

Y cambias el blur() por click() en el jQuery y no esperes ni respuesta ni nada pq no te hace falta.

1 respuesta
FaLLeN

#17 No se que hago mal, pero tengo esto:

<script>
    $('#prueba').click(function () {
  alert("Has hecho clic");  
}); </script>
<a href="#" id="prueba">PRUEBA</a>

Para hacer la prueba, y cuando pulso en el link, no hace absolutamente nada! Sin embargo si cambio el click por un load(), cuando me carga la web, si me salta el alert

1 respuesta
Soltrac

#18 Entonces es q hace el href antes q el js, no es q hagas nada mal.

1 respuesta
FaLLeN

#19 Madre mia! Esto es un follon jajaja!

Lo voy a hacer con una pagina intermedia que rediriga en plan "casi" invisible y que alli me haga el incremento

Gracias por la ayuda!

1 respuesta
Soltrac

#20 No uses ajax, haz un button q haga un post y este haga un redirect si necesitas hacer eso q pides.

1 respuesta
FaLLeN

#21 Si ya esta!

JuAn4k4
$(document).ready(function() { // Esto es para esperar a que el html este cargado.


 $("a.prueba").on("click", function(e) {
   e.preventDefault(); // Previene el comportamiento por defecto del link (Ir a href)
   var a = $(this); // El objeto que se ha clickado. "a", transformado a jQuery object $(..)
   var url = a.attr("href"); // Atributo href de "a" -> El link
   // Llamamos por ajax al servidor
   $.ajax({
      url: url,
      success: function (data) {
         // Ponemos la respuesta del servidor en un div. (Solo si es html o jsonp o un simple string) y no deberia incluir cabeceras.
         if (data)
             $("#where").append($(data));
      }
    }); 

 });


});
<a href="...." class="prueba">click meh</a>
<div id="where"></div>

Y si, javascript se ejecuta en el cliente, especificamente en el explorador, y realiza una llamada a tu servidor (ajax) de forma asincrona, para que cuando los datos esten listos (que provinenen del servidor), ejecutes otro trozo de codigo javascript en el cliente, y el usuario no tenga que refrescar la pagina.

Refrescar la pagina al fin y al cabo es otro Request/Response, solo que este lo ejecuta el explorador de forma integra y al fin y al cabo es mas coñazo para el usuario, (No siempre!).

Si vas a hacer paginas con mucho ajax, te recomendaria que usaras tambien jQuery History, para que al darle para alante y para atras en la historia del explorador el usuario no diga : LJ@KJ$@(*5h@$!

Tunnecino

Yo suelo trabajar con json. Devuelvo lo que quiera en json y lo parseo en el js.

11 meses después
aka_

Tengo una pregunta, ya tengo el formulario y todo lo que necesito para el registro, pero me gustaria saber como paso los valores de cada input para que ejecute el codigo php...

<form action="" method="post">
Usuario: <input type="text" id="us_m"><br>
Password: <input type="password" id="l_km"><br>
<input type="submit" id="prolength">
</form>

<script>
//aqui me gustaria incluir las acciones de Jquery o Ajax para que verifique si los valores de esos inputs ya están registrados, y si hay mas input que haga las mismas consultas.
</script>

1 respuesta
kraneok

#25
En jquery

$( 'input[type=submit]' ).click( function(){ 

$user = $( 'input[type=text]' ).val();
$pass = $( 'input[type=password]' ).val(); // Recibimos variables

$params = { 'user' : $user, 'pass' : $pass }; // Las empaquetamos

$.ajax({
url: 'check.php', // Archivo de destino
type: 'POST',  // Tipo, creo que es mejor GET, que alguien corrobore
data: $params // Datos a enviar
}).done( function(data)
{
 // Aqui se modifica la web según lo que venga en data, un TRUE o FALSE según exista o no
});
});
aka_

Muchisimas gracias amigo...

Usuarios habituales

  • aka_
  • kraneok
  • Tunnecino
  • JuAn4k4
  • FaLLeN
  • Soltrac
  • Mujiwara