Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Hace lo que quieres.

Estas en el tema de Hace lo que quieres. en el foro de Frameworks JS en Foros del Web. Hola. Esta es la primera cosa que programo con AJAX, y la verdad le veo una gran utilidad y una función nueva para todos mis ...
  #1 (permalink)  
Antiguo 10/07/2010, 15:23
Avatar de Jota_sk  
Fecha de Ingreso: octubre-2008
Mensajes: 188
Antigüedad: 15 años, 6 meses
Puntos: 0
Hace lo que quieres.

Hola. Esta es la primera cosa que programo con AJAX, y la verdad le veo una gran utilidad y una función nueva para todos mis próximos scripts. He creado un mini script para ver como funciona y eso, pero me estoy armando un lío impresionante, porque aveces actualiza y otras veces no.

El index.php contiene esto

Código PHP:
Ver original
  1. <?php include ("config.php"); ?>
  2. <?php include ("header.php"); ?>
  3. <script type="text/javascript">
  4. function getDataServer(url, vars){
  5.      var xml = null;
  6.      try{
  7.          xml = new ActiveXObject("Microsoft.XMLHTTP");
  8.      }catch(expeption){
  9.          xml = new XMLHttpRequest();
  10.      }
  11.      xml.open("GET",url + vars, false);
  12.      xml.send(null);
  13.      if(xml.status == 404) alert("Url no valida");
  14.      return xml.responseText;
  15. }
  16. </script>
  17. <script type="text/javascript">
  18. function modificar(id){
  19.     var error = getDataServer("modificar.php","?mod="+id);
  20.     if(error){
  21.         alert(error);
  22.     }
  23. //    else{
  24. //        document.getElementById("div_"+id).style.display = "hidden";
  25. //    }
  26. }
  27. </script>
  28. <?php
  29.  
  30. $query = 'SELECT * FROM '.$tabla.'';
  31.  
  32. $result = mysql_query($query,$conn);
  33. while($row = mysql_fetch_array($result)){
  34.     echo '<form id="formulario">';
  35.         if($row['hecha'] == '0'){
  36.             echo '<input type="checkbox" id="'.$row['id'].'" name="'.$row['id'].'" value="'.$row['hecha'].'" onClick="modificar('.$row['id'].');"> '.$row['tarea'].'<br>';
  37.         }else{
  38.             echo '<input type="checkbox" id="'.$row['id'].'"  name="'.$row['id'].'" value="'.$row['hecha'].'" onClick="modificar('.$row['id'].');" checked> '.$row['tarea'].'<br>';
  39.         };
  40.     echo '</form>';
  41. };
  42. ?>
  43. <?php include("footer.php"); ?>

y el archivo modificar.php contiene lo siguiente

Código PHP:
Ver original
  1. <?php include ("config.php"); ?>
  2. <?php
  3.  
  4. if($_GET["mod"]){
  5.     $query = 'SELECT * FROM '.$tabla.' WHERE id = '.$_GET["mod"].';';
  6.     $result = mysql_query($query,$conn);
  7.     while($row = mysql_fetch_array($result)){
  8.         if($row['hecho'] == '0'){
  9.                 $consulta = 'UPDATE tareas SET hecha = "1" WHERE id = '.$_GET["mod"].';';
  10.         };
  11.         if($row['hecho'] == '1'){
  12.                 $consulta = 'UPDATE tareas SET hecha = "0" WHERE id = '.$_GET["mod"].';';
  13.         };
  14.     };
  15.     mysql_query($consulta, $conn);
  16. }
  17.  
  18. ?>

Lo único que quiero que haga el script es que cuando pulse un checbox, modifique en la base de datos el campo "hecho". Si hay un cero, quiero que ponga un uno, si hay un uno quiero que ponga un cero. Simplemente esto. Pero no lo consigue que funcione, o solo me funciona para cambiar a un 1 o para cambiar a un 0. Mi base de datos contiene lo siguiente, por si hay alguna duda.

Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `tareas` (
  2.   `id` INT(11) NOT NULL AUTO_INCREMENT,
  3.   `tarea` text NOT NULL,
  4.   `hecha` VARCHAR(2) NOT NULL,
  5.   `añadida` DATE NOT NULL,
  6.   PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
  8.  
  9. INSERT INTO `tareas` (`id`, `tarea`, `hecha`, `añadida`) VALUES
  10. (1, 'Programar php', '0', '2010-07-10'),
  11. (2, 'Tocar la guitarra', '1', '2010-07-10');
  #2 (permalink)  
Antiguo 14/07/2010, 07:33
Avatar de Jota_sk  
Fecha de Ingreso: octubre-2008
Mensajes: 188
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Hace lo que quieres.

Nadie sabe la solución?
  #3 (permalink)  
Antiguo 14/07/2010, 08:12
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Hace lo que quieres.

Hola

Sin pararme mucho, se me ocurre que puedes pasarle un segundo argumento, el valor del campo, a la función modificar modificar('.$row['id'].',this.value); así te evitas tener que hacer el select

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #4 (permalink)  
Antiguo 14/07/2010, 17:32
Avatar de Potro  
Fecha de Ingreso: abril-2001
Mensajes: 2.249
Antigüedad: 23 años
Puntos: 39
Respuesta: Hace lo que quieres.

Veo que tienes una pagina de header pero si estas poniendo bien todos los requeridos..

Código PHP:
Ver original
  1. // Fecha en el pasado
  2. header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  3. // siempre modificado
  4. header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  5. // HTTP/1.1
  6. header("Cache-Control: no-store, no-cache, must-revalidate");
  7. header("Cache-Control: post-check=0, pre-check=0", false);
  8. // HTTP/1.0
  9. header("Pragma: no-cache");



Tambien la forma de construir tu ajax.. yo uso lo siguiente..



Código Javascript:
Ver original
  1. var peticion = false;
  2.    var  testPasado = false;
  3.    try {
  4.      peticion = new XMLHttpRequest();
  5.      } catch (trymicrosoft) {
  6.    try {
  7.    peticion = new ActiveXObject("Msxml2.XMLHTTP");
  8.    } catch (othermicrosoft) {
  9.   try {
  10.   peticion = new ActiveXObject("Microsoft.XMLHTTP");
  11.   } catch (failed) {
  12.   peticion = false;
  13.   }
  14.   }
  15.   }
  16.   if (!peticion)
  17.   alert("ERROR AL INICIALIZAR!");
__________________
Paginación en FLASH,

http://www.forosdelweb.com/f62/pagin...o-aqui-540241/

Etiquetas: ajax, quieres
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:47.