Ver Mensaje Individual
  #11 (permalink)  
Antiguo 15/05/2009, 10:09
matak
 
Fecha de Ingreso: julio-2008
Ubicación: Alcañiz-Teruel-España
Mensajes: 182
Antigüedad: 16 años, 4 meses
Puntos: 5
Respuesta: Problema Ajax y MySQL

Buenas BlogInn,

Te he preparado un pequeño ejemplo a ver si es lo que buscas...Si me das tu correo electrónico te lo envío asi tienes los fuentes y no tienes que montarlo. De todas formas lo voy a explicar asi si le sirve a alguién más pues mucho mejor.

me he creado una base de datos de prueba

prueba.sql -->.sql file generado con Navicat 8

Código mysql:
Ver original
  1. /*
  2. MySQL Data Transfer
  3. Source Host: xxx.xxx.xxx.xxx
  4. Source Database: prueba
  5. Target Host: xxx.xxx.xxx.xxx
  6. Target Database: prueba
  7. Date: 15/05/2009 17:26:14
  8. */
  9.  
  10. SET FOREIGN_KEY_CHECKS=0;
  11. -- ----------------------------
  12. -- Table structure for videos
  13. -- ----------------------------
  14. DROP TABLE IF EXISTS `videos`;
  15. CREATE TABLE `videos` (
  16.   `titulo` varchar(255) collate latin1_spanish_ci default NULL,
  17.   `reproductor` text collate latin1_spanish_ci,
  18.   PRIMARY KEY  (`id`)
  19. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci;
  20.  
  21. -- ----------------------------
  22. -- Records
  23. -- ----------------------------
  24. INSERT INTO `videos` VALUES ('1', 'Jota de Pepe Cester', '<object width=\"425\" height=\"344\"><param name=\"movie\" value=\"http://www.youtube.com/v/JUVehl6mf-c&hl=es&fs=1\"></param><param name=\"allowFullScreen\" value=\"true\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://www.youtube.com/v/JUVehl6mf-c&hl=es&fs=1\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"425\" height=\"344\"></embed></object>');
  25. INSERT INTO `videos` VALUES ('2', 'Aguilas', '<object width=\"425\" height=\"344\"><param name=\"movie\" value=\"http://www.youtube.com/v/wRS53F8nGsg&hl=es&fs=1\"></param><param name=\"allowFullScreen\" value=\"true\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://www.youtube.com/v/wRS53F8nGsg&hl=es&fs=1\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"425\" height=\"344\"></embed></object>');
  26. INSERT INTO `videos` VALUES ('3', 'Jotas de Jorge Sanchez\r\n', '<object width=\"425\" height=\"344\"><param name=\"movie\" value=\"http://www.youtube.com/v/12ZgKrRn8dU&hl=es&fs=1\"></param><param name=\"allowFullScreen\" value=\"true\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://www.youtube.com/v/12ZgKrRn8dU&hl=es&fs=1\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"425\" height=\"344\"></embed></object>');

primero de todo me creo la función que generará el objeto ajax

Código javascript:
Ver original
  1. //Funcion que crea el objeto ajax
  2. function objetoAjax(){
  3.     var xmlhttp=false;
  4.     try {
  5.         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  6.     } catch (e) {
  7.         try {
  8.            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  9.         } catch (E) {
  10.             xmlhttp = false;
  11.     }
  12.     }
  13.  
  14.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  15.         xmlhttp = new XMLHttpRequest();
  16.     }
  17.     return xmlhttp;
  18. }

Ahora implementamos la función que enviará la petición asincrona al servidor, nota que 'ajax' la creamos como vble global inicializada a null. De esta forma podemos controlar su estado para poder realizar peticiones simultaneas. En este caso no creo que se te de el caso, pero para futuros proyectos si reutilizas este código te permitirá hacer multiple procesos ajax sin que se machaquen unos a otros

Código javascript:
Ver original
  1. var ajax=null; //vble global
  2.  
  3. function peticion(url,divcontenido){
  4.     if (ajax==null) {
  5.       objDestino=document.getElementById(divcontenido)
  6.       ajax=objetoAjax();
  7.       ajax.open("POST", url, true);
  8.       ajax.onreadystatechange=function() {
  9.           if (ajax.readyState==4) {
  10.               objDestino.innerHTML = ajax.responseText
  11.               ajax = null
  12.           }else{
  13.             objDestino.innerHTML = '<img src="wait.gif" /><font style="font-family:Verdana;font-weight:bold;font-size-16pt;">Cargando Video...</font>'
  14.           }
  15.       }
  16.       ajax.send(null)
  17.     }else{
  18.       setTimeout("f1('"+url+"','"+divcontenido+"')",10)      
  19.     }
  20. }

Fíjate que en la función mientras la petición no esta en el estado 4 coloco una imagen en el contenido

Código javascript:
Ver original
  1. if (ajax.readyState==4) {
  2.     objDestino.innerHTML = ajax.responseText
  3.     ajax = null
  4. }else{
  5.     objDestino.innerHTML = '<img src="wait.gif" /><font style="font-family:Verdana;font-weight:bold;font-size-16pt;">Cargando Video...</font>'
  6. }

esto es puramente estetico y simplemente avisa al cliente de que se esta cargando el video. En mi caso wait.gif es un aspa que da vueltas coon un texto que dice 'Cargando video...'

Seguimos pues construyendo el select para seleccionar los vídeos y creamos un objeto contenedor, que en este caso es in <div> donde se cargarán los videos.

Código html:
Ver original
  1. <select id="videos" name="videos" onchange="if (this.value=='X') document.getElementById('reproductor').innerHTML=''; else peticion('cargarvideo.php?id='+this.value,'reproductor');">
  2. <option value='X'>&nbsp;&nbsp;[Seleccione un Vídeo...]&nbsp;&nbsp;</option>
  3. <?PHP
  4. $sql = 'SELECT * FROM `videos`';
  5. $consulta=mysql_query($sql,$db) or die ();
  6. while ($row=mysql_fetch_array($consulta))
  7. {
  8.    echo '<option value='.$row["id"].'>'.$row["titulo"].'</option>';
  9. }
  10. ?>
  11. <div id="reproductor">
  12. </div>

Solo faltaría el archivo php que procesará el servidor en la petición

cargarvideo.php
Código php:
Ver original
  1. <?PHP
  2. header('Content-Type: text/xml; charset=ISO-8859-1'); //Para visualizar correctamente caracterés especiales
  3.  
  4.   $db = mysql_connect($host,$usser,$pass) or die ("No se puede conectar con el servidor");
  5.  
  6.   mysql_select_db('prueba') or die ("No se puede seleccionar la base de datos");
  7.  
  8.   $sql = "SELECT * FROM videos WHERE id='".$_REQUEST['id']."'";
  9.  
  10.   $consulta=mysql_query($sql,$db) or die (mysql_error($db));
  11.  
  12.   $row=mysql_fetch_array($consulta);
  13.  
  14.   echo $row['reproductor'];
  15. ?>

todo junto quedaría

index.php
Código html:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  4.  
  5. <meta http-equiv="Content-Language" content="es">
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
  7. <SCRIPT LANGUAGE="JavaScript">
  8.  
  9. var ajax=null; //vble global
  10.  
  11. //Funcion que crea el objeto ajax
  12. function objetoAjax(){
  13.     var xmlhttp=false;
  14.     try {
  15.         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  16.     } catch (e) {
  17.         try {
  18.            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  19.         } catch (E) {
  20.             xmlhttp = false;
  21.     }
  22.     }
  23.  
  24.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  25.        xmlhttp = new XMLHttpRequest();
  26.     }
  27.     return xmlhttp;
  28. }
  29.  
  30. function peticion(url,divcontenido){
  31.     if (ajax==null) {
  32.       objDestino=document.getElementById(divcontenido)
  33.       ajax=objetoAjax();
  34.       ajax.open("POST", url, true);
  35.       ajax.onreadystatechange=function() {
  36.           if (ajax.readyState==4) {
  37.               objDestino.innerHTML = ajax.responseText
  38.               ajax = null
  39.           }else{
  40.             objDestino.innerHTML = '<img src="wait.gif" /><font style="font-family:Verdana;font-weight:bold;font-size-16pt;">Cargando Video...</font>'
  41.           }
  42.       }
  43.       ajax.send(null)
  44.     }else{
  45.       setTimeout("f1('"+url+"','"+divcontenido+"')",10)      
  46.     }
  47. }
  48. <?PHP
  49.  
  50. $db = mysql_connect($host,$usser,$pass) or die ("No se puede conectar con el servidor");
  51.  
  52. mysql_select_db('prueba') or die ("No se puede seleccionar la base de datos");
  53. ?>
  54. </head>
  55. <select id="videos" name="videos" onchange="if (this.value=='X') document.getElementById('reproductor').innerHTML=''; else peticion('cargarvideo.php?id='+this.value,'reproductor');">
  56. <option value='X'>&nbsp;&nbsp;[Seleccione un Vídeo...]&nbsp;&nbsp;</option>
  57. <?PHP
  58. $sql = 'SELECT * FROM `videos`';
  59. $consulta=mysql_query($sql,$db) or die ();
  60. while ($row=mysql_fetch_array($consulta))
  61. {
  62.    echo '<option value='.$row["id"].'>'.$row["titulo"].'</option>';
  63. }
  64. ?>
  65. <div id="reproductor">
  66. </div>
  67. </body>
  68. </html>

cargarvideo.php
Código php:
Ver original
  1. <?PHP
  2. header('Content-Type: text/xml; charset=ISO-8859-1'); //Para visualizar correctamente caracterés especiales
  3.  
  4.   $db = mysql_connect($host,$usser,$pass) or die ("No se puede conectar con el servidor");
  5.  
  6.   mysql_select_db('prueba') or die ("No se puede seleccionar la base de datos");
  7.  
  8.   $sql = "SELECT * FROM videos WHERE id='".$_REQUEST['id']."'";
  9.  
  10.   $consulta=mysql_query($sql,$db) or die ();
  11.  
  12.   $row=mysql_fetch_array($consulta);
  13.  
  14.   echo $row['reproductor'];
  15. ?>

Lo dicho, si quieres que te envie los fuentes y demás dime tu e-mail

Ya me dirás si te funciona. yo le he probado y me ha funcionado

Saludos
__________________
Si quieres puedes y si puedes debes. Imposible is nothing!!!