Foros del Web » Programando para Internet » PHP »

Updatepanel en php

Estas en el tema de Updatepanel en php en el foro de PHP en Foros del Web. Hola a todos! Primero de todo querría felicitaros por todo lo que aportáis en este foro a los que, como yo, no hace mucho que ...
  #1 (permalink)  
Antiguo 18/03/2012, 21:53
 
Fecha de Ingreso: marzo-2012
Mensajes: 2
Antigüedad: 12 años, 8 meses
Puntos: 0
Pregunta Updatepanel en php

Hola a todos! Primero de todo querría felicitaros por todo lo que aportáis en este foro a los que, como yo, no hace mucho que nos introdujimos en la programación. He aprendido muchísimo a través de vuestras preguntas y respuestas y ahora veo el momento de publicar una pregunta, pues no sé consigo encontrar la solución por mi mismo.

Mi duda es la siguiente, tengo una página principal en la que quiero mostrar una serie de resultados extraídos de MYSQL. Al inicio de la página presento un formulario con 6 botones seleccionables y en función del botón seleccionado cambio la query y se actualiza la página con los nuevos resultados, aquí copio el formulario:

<form name="nombre_categoria" method="POST" id="buscador">
<input class="radio" name="guardados" value="0" type="radio" />
<input class="radio" name="guardados" value="1" type="radio" />
<input class="radioDemo" name="guardados" value="2" type="radio" />
<input class="radioDemo" name="reto" value="mes" type="radio" />
<input class="radioDemo" name="reto" value="semana" type="radio" />
<input class="radioDemo" name="reto" value="dia" type="radio" />
</form>

El formulario lo trato con PHP para determinar la query a ejecutar en la base de datos. Aquí pego el código:

if (($_POST["reto"])!="0"){
$reto=$_POST['reto'];

$query1 = "SELECT * FROM `problemas` WHERE `problema_id` IN (SELECT `problema_id` FROM `retos` WHERE `tipo`='$reto')";
verProblemas();

}else{
if(($_POST["guardados"])!="0") {
$guardados=$_POST['guardados'];

if ($guardados!=0){

if ($guardados==1){
$query1 = "SELECT * FROM `problemas` WHERE `problema_id` IN (SELECT `problema_id` FROM `problemas_guardados` WHERE
`solver`='$usuario')";
verProblemas();

}else{
$query1 = "SELECT * FROM `problemas` WHERE `problema_id` NOT IN (SELECT `problema_id` FROM `problemas_guardados` WHERE
`solver`='$usuario')";
verProblemas();

}
}
}
else{
$query1 = "SELECT * FROM `problemas`";
verProblemas();
}
}

Después utilizo el siguiente código para guardar los resultados obtenidos:

$result= mysql_query($query1) or die (mysql_error());
else{
$i=1;
while ($row1 = mysql_fetch_array($result)) {
$reward[$i]=$row1['recompensa'];
$categorie[$i]=$row1['nombre_categoria'];
$title[$i]=$row1['titulo'];
$timetogo[$i]=tiempoRestante($row1['final']);
$referencia[$i]=$row1['problema_id'];
$query2="SELECT * FROM `Soluciones` WHERE `solver`='$solver' AND `id_problema` IN (SELECT `problema_id` FROM `problemas` WHERE `titulo`='$title[$i]') HAVING `version`='1' ORDER BY `titulo` DESC;";
$result2 = mysql_query($query2) or die(mysql_error());
$soluciones[$i]= mysql_num_rows($result2);
$i++;
}

Y finalmente muestro los resultados mediante un FOR y HTML:

for($o=1;$o<$i;$o++){
?>

<div class="problem_element">
<div class="reward"><?echo $reward[$o]?>€</div>
<div class="categorie"><?echo $categorie[$o]?></div>
<div class="timetogo"><?echo $timetogo[$o]?></div>
<div class="element_title"><span><?echo $title[$o] ?></span></div>

<div class="recieved"><? echo $soluciones[$o]?><img class='icon_table_active' src='http://localhost/images/yellowbulb.png'></div>
<div class="options"><a href='/../problemas_guardados/guardar_problema.php?identificador=<?echo $referencia[$o];?>'><img class='icon_table_active' src='http://localhost/images/TC.png'></a><a href="http://localhost/soluciones_enviadas/soluciones_enviadas.php?referencia=<?echo $referencia[$o]?>"><img class='icon_table_active' src='http://localhost/images/bulb.png'></a></div>

<div class="voter"> <?php echo ThumbsUp::item($referencia[$o])->template('up_down') ?> </div>

</div>
<?
}

Con esto consigo mostrar los resultados en función del valor seleccionado en los input (es más un filtro que una búsqueda). Lo que me pasa es que cuando se realiza el post la pantalla se recarga entera, con el respectivo "pantallazo blanco" del refresh entre situación anterior a la búsqueda y posterior. Conozco el updatePanel que se utiliza en ASP para recargar únicamente la sección que muestra los resultados en el submit, pero no consigo encontrar algo parecido que me funcione en PHP.

Si me pudierais hacer alguna recomendación os lo agradecería porque quizá voy muy mal encaminado para conseguir este efecto o tengo que trabajar con ajax o cambiar el display de los elementos con jquery... estoy un poco perdido y me iría muy bien el consejo de un experto para no terminar haciendo una chapuza.

PD: No sé si he acertado al poner el tema en la categoría PHP, pero cómo no sé bien con qué lenguaje resolver el problema... Espero no haberme extendido demasiado, pero como he visto tantos post en los que faltaba información para contestar he querido poner todo lo que tenía al respecto.

Gracias de antemano por las respuestas! Un saludo.
  #2 (permalink)  
Antiguo 19/03/2012, 07:09
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Updatepanel en php

Lo que necesitas es implementar la técnica AJAX donde la petición y respuesta es manejada por javascript, tal cual lo debe hacer el updatepanel de asp
Existen framework javascript que te pueden facilitar la tarea, como jquery, mootools, prototype, ente otros; aunque no estaría mal que conocieras la técnica desde 0.

PD: utilice la herramienta highlight para mostrar código html
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 19/03/2012, 07:18
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 9 meses
Puntos: 89
Respuesta: Updatepanel en php

como mensiono maycolalvarez , lo que necesitas es Jquery+PHP
Jquery te brinda herramientas segun tu nivel de programacion, puedes armar lo que necesitas en PHP y Jquery solo lo inserta o puedes armar con Jquery con los datos necesarios enviados por PHP.

Hay muchos muchos muchos tutos en la web, claro que no va a salir en el primer intento,
Te recomiendo Jquery ya que su forma de programacion esta orientada a PHP. por ejemplos acepta el $ para distingir las variables! XD
__________________
Mono programando!
twitter.com/eguimariano
  #4 (permalink)  
Antiguo 19/03/2012, 09:56
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Updatepanel en php

Cita:
Iniciado por SirDuque Ver Mensaje
como mensiono maycolalvarez , lo que necesitas es Jquery+PHP
Jquery te brinda herramientas segun tu nivel de programacion, puedes armar lo que necesitas en PHP y Jquery solo lo inserta o puedes armar con Jquery con los datos necesarios enviados por PHP.

Hay muchos muchos muchos tutos en la web, claro que no va a salir en el primer intento,
Te recomiendo Jquery ya que su forma de programacion esta orientada a PHP. por ejemplos acepta el $ para distingir las variables! XD
Aclaremos conceptos: jQuery no está orientado a PHP, ni a ningún script del server en particular, recuerde que jQuery es un Framework para Javascript y el uso del shorthand $() es ampliamente popular en FW de javascript, el hecho de que en PHP las variables se declaren con $ es mera coincidencia, en PHP es para declarar variables, en jQuery es para acceder al CORE del Framework, 2 cosas completamente diferentes.

lo que necesita el usuario es AJAX, que es la técnica esencial para no recargar la página y poder hacer peticiones al servidor, la misma puede ser implementada sin ningún FW, e incluso hasta con un iframe se puede hacer.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 19/03/2012, 14:01
 
Fecha de Ingreso: marzo-2012
Mensajes: 2
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Updatepanel en php

Cita:
Iniciado por maycolalvarez Ver Mensaje
Lo que necesitas es implementar la técnica AJAX donde la petición y respuesta es manejada por javascript, tal cual lo debe hacer el updatepanel de asp
Existen framework javascript que te pueden facilitar la tarea, como jquery, mootools, prototype, ente otros; aunque no estaría mal que conocieras la técnica desde 0.

PD: utilice la herramienta highlight para mostrar código html
Hola maycolalvarez,

Finalmente he estado buscando sobre los FW que me has indicado y he podido resolver el problema! :)

Ahora lo que me queda es combinar esto con el envío automático al hacer click en el input pero lo resolveré, lo que más me preocupaba era conseguir recargar únicamente la sección y he utilizado prototype que era el que me pareció más simple de utilizar.

Aquí dejo el código tal y como lo tengo:

En el head:

Código Javascript:
Ver original
  1. <script type="text/javascript" src="http://localhost/login/prototype.js"></script>
  2. <script type="text/javascript">
  3. function protoSend(){
  4. var params = Form.serialize($('buscador'));
  5. alert(params);
  6. new Ajax.Updater('problems_wrapper', 'busqueda.php', {asynchronous:true, parameters:params});
  7. }
  8. </script>

El formulario:

Código HTML:
Ver original
  1. <form name="buscador" method="POST" id="buscador" onSubmit="protoSend();return false;" action="busqueda.php">
  2.                                  
  3.     <input class="radioDemo" name="guardados" value="0" type="radio" />
  4.     <input class="radioDemo" name="guardados" value="1" type="radio"  />
  5.     <input class="radioDemo" name="guardados" value="2" type="radio" />
  6.     <input class="radioDemo" name="reto" value="mes" type="radio" />
  7.     <input class="radioDemo" name="reto" value="semana" type="radio"  />
  8.     <input class="radioDemo" name="reto" value="dia" type="radio" />
  9.     <input type="submit" value="enviar">
  10.                
  11. </form>

En el script busqueda.php:

Código PHP:
Ver original
  1. if (($_POST["reto"])!="0" & ($_POST["reto"])!=NULL ){  
  2.     $reto=$_POST['reto'];
  3.    
  4.     $query1 = "SELECT * FROM `problemas` WHERE `problema_id` IN (SELECT `problema_id` FROM `retos` WHERE `tipo`='$reto')";
  5.     verProblemas();
  6.    
  7. }else{
  8.     if(($_POST["guardados"])!=NULL ) {
  9.         $guardados=$_POST['guardados'];
  10.    
  11.  
  12.  if ($guardados!=0){
  13.      
  14.  
  15.             if ($guardados==1){
  16.                     $query1 .= "SELECT * FROM `problemas` WHERE `problema_id` IN (SELECT `problema_id` FROM `problemas_guardados` WHERE `solver`='$usuario')";
  17.                     verProblemas();
  18.                    
  19.             }else{
  20.                     $query1 .= "SELECT * FROM `problemas` WHERE `problema_id` NOT IN (SELECT `problema_id` FROM `problemas_guardados` WHERE `solver`='$usuario')";
  21.                     verProblemas();
  22.                    
  23.             }        
  24.  }else{
  25.      $query1 = "SELECT * FROM `problemas`";
  26.      verProblemas();
  27.  }
  28.  }}
  29. function verProblemas(){  
  30. ?>
  31.                  <div id="problems_wrapper">
  32.                  
  33.                    
  34.                  
  35.                  
  36.            
  37. <?
  38. }
  39. $result= mysql_query($query1) or die (mysql_error());
  40.  
  41. $n=mysql_num_rows($result);
  42. if ($n==0){
  43.    
  44.         ?>sin resultados<?
  45.                    
  46.    
  47. }else{
  48.     $i=1;
  49. while ($row1 = mysql_fetch_array($result)) {
  50.         $reward[$i]=$row1['recompensa'];
  51.         $categorie[$i]=$row1['nombre_categoria'];
  52.         $title[$i]=$row1['titulo'];
  53.         $timetogo[$i]=tiempoRestante($row1['final']);  
  54.         $referencia[$i]=$row1['problema_id'];
  55.         $query2="SELECT * FROM `Soluciones` WHERE `solver`='$solver' AND `id_problema` IN (SELECT `problema_id` FROM `problemas` WHERE `titulo`='$title[$i]') HAVING `version`='1' ORDER BY `titulo` DESC;";
  56.         $result2 = mysql_query($query2) or die(mysql_error());
  57.         $soluciones[$i]=  mysql_num_rows($result2);
  58.                    
  59.           echo "<div class='problem_element'>";
  60.           echo "<div class='reward'>";
  61.           echo "$reward[$i]€";
  62.           echo "</div>";
  63.           echo "<div class='categorie'>";
  64.           echo "$categorie[$i]";
  65.           echo "</div>";
  66.           echo "<div class='timetogo'>";
  67.           echo "$timetogo[$i]";
  68.           echo "</div>";
  69.           echo "<div class='element_title'><span>";
  70.           echo "$title[$i]";
  71.           echo "</span></div>";
  72.           echo "<div class='recieved'>";
  73.           echo "$soluciones[$i]";
  74.           echo "<img class='icon_table_active' src='http://localhost/images/yellowbulb.png'></div>";
  75.           echo "<div class='options'><a href='/../problemas_guardados/guardar_problema.php?identificador=";
  76.           echo "$referencia[$i]";
  77.           echo "'><img class='icon_table_active' src='http://localhost/images/TC.png'></a><a href='http://localhost/soluciones_enviadas/soluciones_enviadas.php?referencia=<?echo $referencia[$i]?>'><img class='icon_table_active' src='http://localhost/images/bulb.png'></a></div>";
  78.           echo "<div class='voter'>";
  79.          
  80.            echo "</div>";
  81.            echo "</div>";  
  82.            $i++;
  83.        }
  84. }

Si tenéis alguna recomendación más lo agradeceré!

Muchas gracias por la ayuda, os debo una :)

Etiquetas: ajax, filtrar, framwork, jquery, updatepanel
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 13:33.