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

Un consejo para aplicación de gestión, gracias

Estas en el tema de Un consejo para aplicación de gestión, gracias en el foro de Frameworks JS en Foros del Web. Buenas noches: Estaba dudando si hacer la pregunta en este foro o en el de PHP, pero creo que aquí es más apropiado. Les comento, ...
  #1 (permalink)  
Antiguo 31/01/2010, 18:36
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 17 años
Puntos: 2
Un consejo para aplicación de gestión, gracias

Buenas noches:

Estaba dudando si hacer la pregunta en este foro o en el de PHP, pero creo que aquí es más apropiado.

Les comento, quería ver si me pueden orientar, porque quiero hacer una ampliación a una pequeña aplicación de gestión que he hecho para un familiar autónomo y aún me lío un poco con la 'planificación'.

La idea es crear un 'generador de presupuestos', así que había pensado en hacer una especie de carrito de la compra. Me explico, sobre la página que lleva el formulario, tenía pensado colocar una tabla y un un par de inputs. En los inputs añadiríamos los detalles del presupuesto, que se irían cargando en la tabla y finalmente, cuando estuviese todo, enviar el formulario y registrar en base de datos.

He empezado creando una tabla temporal en la bbdd, en la que iría recogiendo cada línea del detalle. Con lo que los inputs estarían en otro form, dentro de la misma página. Este form apuntaría con el action a otra página que cargaría en bbdd, en la tabla temporal y la página volvería sobre la primera, donde la tabla (html) que indicaba antes iría mostrando los datos de esta tabla temporal (Mysql). Todo esto de manera que casi no se apreciase.

Ahí entra en juego jQuery, porque estoy seguro que hay formas de hacer esto muchísimo más eficientes. Llevo poco tiempo usando jQuery y con PHP hago cosas de andar por casa, efectivas para su fin, pero no muy optimizadas a nivel de código, aún (todo se andará ).

Pues en resumen, mi consulta es cómo me recomendaríais plantear la página del form en concreto, considerando que tiene tres partes:
1- para recoger los datos del cliente y fecha
2- otro donde ir añadiendo elementos al presupuestos, con tres/cuatro campos -> detalle, cantidad, precio unitario
3- la última, la tabla en la que se van mostrando los elementos agregados al presupuesto, antes de generarlo.

Pues nada, espero que me puedan dar una orientación y muchas gracias de antemano.

Saludos.
  #2 (permalink)  
Antiguo 01/02/2010, 14:51
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 8 meses
Puntos: 101
Respuesta: Un consejo para aplicación de gestión, gracias

Quizas tu tema sea una pregunta sobre layout, específicamente, y no de programación.

Si usas ajax con jquery no vas a tener problema en construir tu aplicación, dialogando con mysql sin salirte de la pagina. Por lo tanto, podes tener tantas utilidades como quieras en tu diseño web. Y no vas a necesitar hacer una pagina para cada funcionalidad, comprendes?
  #3 (permalink)  
Antiguo 06/02/2010, 16:47
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 17 años
Puntos: 2
Respuesta: Un consejo para aplicación de gestión, gracias

Buenas noches:

Muchas gracias por la respuesta, no he podido verlo antes.

Sí, más o menos lo he entendido. Ahora tengo que organizarme las ideas y plantear el desarrollo., puesto que como decía, no tengo mucha soltura aún con jQuery.

Muchas gracias y a ahora me toca 'darle al coco' y meditarlo.

Saludos.
  #4 (permalink)  
Antiguo 07/02/2010, 10:05
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 8 meses
Puntos: 101
Respuesta: Un consejo para aplicación de gestión, gracias

Cita:
Pues en resumen, mi consulta es cómo me recomendaríais plantear la página del form en concreto, considerando que tiene tres partes:
1- para recoger los datos del cliente y fecha
2- otro donde ir añadiendo elementos al presupuestos, con tres/cuatro campos -> detalle, cantidad, precio unitario
3- la última, la tabla en la que se van mostrando los elementos agregados al presupuesto, antes de generarlo.
Si estas considerando ajax, leete estos tutoriales:

http://www.anieto2k.com/2009/08/18/5...ax-con-jquery/
http://www.cristalab.com/tutoriales/...-jquery-c226l/

Como vas con la web?
  #5 (permalink)  
Antiguo 07/02/2010, 11:01
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 17 años
Puntos: 2
Respuesta: Un consejo para aplicación de gestión, gracias

Hola, muchas gracias.

La verdad que no voy mal, en cuanto a que la parte vital ya la tenía y se la había 'montado' a mi familiar, que era de gestión pura y dura de clientes/hoja de servicios. ;-P

Ahora tengo que retomarlo, aunque estoy teniendo unas semanas un poco movidas y al llegar a casa, no me pongo con ello, así que esta parte, un poco parado.

De todas maneras, digamos que he preparado la v1 y tengo en mente, cuando salgamos de un 'apretón de trabajo', continuar y replantearla entera. Así es como voy aprendiendo. Hago algo funcional, pero luego me gusta darle una vuelta y 'optimizar' el código. Ahora estoy dudando si continúo con la fase de Presupuestos o reviso y optimizo el código.

Ya sé que parece que trabajo el doble (que lo hago), pero creo que así me exijo más y con estos pequeños proyectos para familiares/amigos, se puede permitir.

Voy a echar un vistazo a los tutos que has puesto y a retomar el papel y boli, para replantear por donde seguir.

Muchas gracias de nuevo y seguiré seguramente planteando cuestiones entre los foros PHP y éste.

Saludos.
  #6 (permalink)  
Antiguo 10/02/2010, 13:12
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 17 años
Puntos: 2
Respuesta: Un consejo para aplicación de gestión, gracias

Buenas, he encontrado la solución a mis problemas ;)

Voy a combinar PHP+XAJAX+jQuery

Creo que es la combinación explosiva que estaba buscando.

Hice las pruebas y conseguí lo que buscaba, pero prefiero incluir XAJAX para apoyarme en el proceso en una tabla temporal y poder manejar mejor los datos. De esta manera podría jugar con los 'pincho sin querer p'atrás, ¡¡ahí va!! ¡¡se me borró lo que tenía!! ;) '

Iré contando cosillas si consigo cosas que pueden interesar a novatos o pseudo-novatos, como yo.

Saludos.
  #7 (permalink)  
Antiguo 11/02/2010, 10:46
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 17 años
Puntos: 25
Respuesta: Un consejo para aplicación de gestión, gracias

esto tambien te puede ayudar en algo, dar ideas, etc, etc

http://hector2c.wordpress.com/2010/0...abla-con-ajax/
__________________
blog: hector2c.wordpress.com
email: [email protected]
  #8 (permalink)  
Antiguo 11/02/2010, 15:34
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 17 años
Puntos: 2
Respuesta: Un consejo para aplicación de gestión, gracias

Muchas gracias, voy a echarle un vistazo, parece bastante interesante.
  #9 (permalink)  
Antiguo 14/02/2010, 14:10
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 17 años
Puntos: 2
Pregunta Respuesta: Un consejo para aplicación de gestión, gracias

Buenas noches:

Al final lo estoy haciendo con XAJAX y todo ok, salvo una cosilla.

La inserción en BBDD la hace de maravilla, pero no soy capaz de hacer que se refresque la tabla que recoge los datos de la inserción.

Adjunto una captura y lo comento:


La idea es que tras rellenar el form inferior, se registre en BBDD y actualice automáticamente la tabla de arriba en plan refresh.

He visto varios artículos en la web, casi todos añadiendo líneas. Yo lo tengo montado en plan consulta y rellenando la tabla con un while:
Código PHP:
<?php
            $sql 
"select * from lm_tmppresupuestos";
            
            
$consulta $mysql->consulta($sql);
            
            
            
$total $mysql->num_rows($consulta);
?>                        
                <table id="tb_altaPrto">
                    <thead>
                        <tr>
                            <th width="100px">Rf.</th>
                            <th>Detalle</th>
                            <th width="40px">Cant.</th>
                            <th width="30px">IVA</th>
                            <th width="60px">&euro;/Ud.</th>
                        </tr>
                    </thead>
                    <tfoot>
                        <tr>
                            <th colspan="4">Total elementos a&ntilde;adidos:</th>
                            <th class="al_dch"><?php echo $total?></th>
                        </tr>
                    </tfoot>
                    <tbody>
<?php
            
            
if($total<1) {
?>
                        <tr>
                            <td colspan="5">No hay registrado ning&uacute;n detalle.</td>
                        </tr>
<?php                
            
}else{
                
// Comprobamos total de registros
                // echo $total;
            
                // Se inicia el bucle para mostrar el listado
                
while($resultados $mysql->fetch_array($consulta)) {
?>
                        <tr>
                            <td class="al_ctr"><?php echo $resultados['Referencia']; ?></td>
                            <td><?php echo $resultados['Detalle']; ?></td>
                            <td class="al_dch"><?php echo $resultados['Cantidad']; ?></td>
                            <td class="al_ctr"><?php echo $resultados['IVA']; ?></td>
                            <td class="al_dch"><?php echo $resultados['PrecioUnitario']; ?></td>
                        </tr>
<?php                    
                
}
            }
Lo que no sé cómo hacer es que me vuelva a lanzar la consulta y me refresque la tabla sin recargar toda la página, ya que tiene más elementos.

La función xajax que he creado es:
Código PHP:
function procesarFormPrto($form_entrada) {  
    
extract($form_entrada);
    
    
// conectamos con la BBDD
    
$mysql = new MySQL('localhost','root','','gestionclientes');
    
    
$sql "insert into LM_tmpPresupuestos values ('',
        '"
.$form_entrada["referencia"]."',
        '"
.$form_entrada["detalle"]."',
        '"
.$form_entrada["iva"]."',
        '"
.$form_entrada["precio"]."',
        '"
.$form_entrada["cantidad"]."'
        )"
;
    
    
$consulta $mysql -> consulta($sql);
    
    
// se instancia el objeto para recibir la respuesta
    
$respuesta = new xajaxResponse();
   
   
// devolvemos la respuesta
   
return $respuesta;     

Espero que me puedan orientar, muchas gracias.

Saludos

Última edición por jesusjj; 14/02/2010 a las 14:16
  #10 (permalink)  
Antiguo 15/02/2010, 07:54
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 17 años
Puntos: 25
Pregunta Respuesta: Un consejo para aplicación de gestión, gracias

aaaaaaaaaam...

Código HTML:
$("#div_a_mostar").load("tu_consulta_php.php");
__________________
blog: hector2c.wordpress.com
email: [email protected]
  #11 (permalink)  
Antiguo 15/02/2010, 08:25
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 17 años
Puntos: 2
Respuesta: Un consejo para aplicación de gestión, gracias

Muchas gracias.

No sé si eso me soluciona, ya que la tabla está visible siempre. Sólo necesito 'recargar' la consulta. Además, tendría que hacer la llamada de jQuery, desde xajax y eso, creo que no sé hacerlo aún :S

Creo que lo que comentas, puede salir si lo genero desde un 'include', aunque tampoco estoy seguro.

Lo más eficiente, no estoy seguro, es intentar crear otra función xajax (p.e. function recargaTabla()), para que al hacer el insert, me actualice la tabla. No sé si debería eliminar los registro y volver a generar las filas de nuevo y mostrarlas mediante un 'adding'.

De momento sólo se me ocurre esto.

Muchas gracias de nuevo y no sé, a ver si alguien me dice si voy bien orientado o no.
  #12 (permalink)  
Antiguo 15/02/2010, 09:07
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 8 meses
Puntos: 101
Respuesta: Un consejo para aplicación de gestión, gracias

Como se imprime la tabla original? Con html directamente? o con el metodo .html()?

Lo que propone Hector es una llamada vía Ajax a un archivo PHP que genere los nuevos contenidos (consultando a la base de datos). Tras esa llamada solo hay que volcar el nuevo contenido en su lugar:
Cita:
$("#divx".html(respuesta);
  #13 (permalink)  
Antiguo 15/02/2010, 09:36
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 17 años
Puntos: 25
Pregunta Respuesta: Un consejo para aplicación de gestión, gracias

Código PHP:
$("#divx".html(respuesta); 
es
Código PHP:
$("#divx").html(respuesta); 
mmmm, pues, jesusjj, imagina que tienes un archivo php donde vuelves a generar la tabla con los registros...

listar.php
Código PHP:
$sql "select * from tabla";
$tab mysql_query($sql);
while(
$rs_tab=mysql_fetch_assoc($tab)){
/*  generas tu tablita */

y pues, al momento de dar click en el boton añadir detalle, que ejecute un proceso javascript con jquery:

Código PHP:
$("#tu_div").load("listar.php"); 
mmm, espero puedas entenderlo...
__________________
blog: hector2c.wordpress.com
email: [email protected]
  #14 (permalink)  
Antiguo 15/02/2010, 09:59
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 8 meses
Puntos: 101
Respuesta: Un consejo para aplicación de gestión, gracias

Ah! Si. Con eso basta: $("#tu_div").load("listar.php");

Digo, no hay necesidad de usar .html()
  #15 (permalink)  
Antiguo 15/02/2010, 10:08
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 17 años
Puntos: 25
Pregunta Respuesta: Un consejo para aplicación de gestión, gracias

aaaaaaaa, una cosita mas que añadir, ie6 no actualizara adecuadamente el listado (no se si ie7 lo mostrara bien), en mi caso, suelo añadir esto al archivo llamado asincronamente:

Código PHP:
    header ("Expires: Fri, 14 Mar 1980 20:53:00 GMT"); //la pagina expira en fecha pasada
    
header ("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT"); //ultima actualizacion ahora cuando la cargamos
    
header ("Cache-Control: no-cache, must-revalidate"); //no guardar en CACHE
    
header ("Pragma: no-cache"); //PARANOIA, NO GUARDAR EN CACHE 
__________________
blog: hector2c.wordpress.com
email: [email protected]
  #16 (permalink)  
Antiguo 15/02/2010, 10:52
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 17 años
Puntos: 2
Respuesta: Un consejo para aplicación de gestión, gracias

OK, muchas gracias, lo pruebo más tarde, de momento, coloco el código del form, que es el que me falta:

Código PHP:
          <form id="altaDetalle" name="altaDetalle" method="post">
            <
fieldset>
                <
legend>Alta de Detalle</legend>
                <
div>
                    <
label class="etiqueta" for="referencia">Referencia</label>
                    <
input type="text" id="referencia" name="referencia" class="inputfield required" />
                </
div>
                <
div>
                    <
label class="etiqueta" for="detalle">Descripci&oacute;n</label>
                    <
input type="text" id="detalle" name="detalle" class="inputfield required" />
                </
div>
                <
div>
                    <
label class="etiqueta" for="cantidad">Cantidad</label>
                    <
input type="text" id="cantidad" name="cantidad" class="inputfield required inputimporte" />&nbsp;Uds.
                </
div>
                <
div>
                    <
label class="etiqueta" for="iva">Tipo IVA</label>
                    <
input type="text" id="iva" name="iva" class="inputfield required inputimporte" />&nbsp;&#37;
                
</div>
                <
div>
                    <
label class="etiqueta" for="precio">Precio Unitario</label>
                    <
input type="text" id="precio" name="precio" class="inputfield required inputimporte" />&nbsp;&euro;
                </
div>
                <
div  class="div_buttons">
                    <
input type="button" onclick="xajax_procesarFormPrto(xajax.getFormValues('altaDetalle'))" value="a&ntilde;adir detalle" id="anadir" name="anadir" class="buttons" />
                    <
input type="reset" value="limpiar" id="reset" name="reset" class="buttons" />
                </
div>
            </
fieldset>
        </
form

Muchas gracias
  #17 (permalink)  
Antiguo 15/02/2010, 11:24
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 17 años
Puntos: 25
Respuesta: Un consejo para aplicación de gestión, gracias

ammmm, pues, en la funcion xajax_procesarFormPrto(), al final ponle el $("#tu_div").load('la_pagina_requerida.php'); ...

mmm, en tu <table id="tb_altaPrto">, ponlo dentro de un div, cosa que puedes ubicarlo, ese seria tu $("#tu_div")...

mmm, una pregunta... que etiqueta html es ese contenedor "articulos añadidos", "alta de detalle"??? siempre olvido su nombre XD
__________________
blog: hector2c.wordpress.com
email: [email protected]

Última edición por hector2c; 15/02/2010 a las 11:29
  #18 (permalink)  
Antiguo 15/02/2010, 11:54
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 17 años
Puntos: 2
Respuesta: Un consejo para aplicación de gestión, gracias

Muchas gracias:

Ahora mismo lo pruebo.

Cita:
mmm, una pregunta... que etiqueta html es ese contenedor "articulos añadidos", "alta de detalle"??? siempre olvido su nombre XD

Las etiquetas son 'legend' del 'fieldset' ;) :

Código PHP:
<fieldset>
            <
legend>Art&iacute;culos A&ntilde;adidos</legend
Código PHP:
<fieldset>
                <
legend>Alta de Detalle</legend
  #19 (permalink)  
Antiguo 15/02/2010, 15:19
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 17 años
Puntos: 2
Respuesta: Un consejo para aplicación de gestión, gracias

Hola de nuevo, al final, me ha fallado.

He hecho lo siguiente:

He creado un nuevo fichero llamado: lm_tablaDetalle.php, que cargo desde:
Código PHP:
          <fieldset>
            <legend>Art&iacute;culos A&ntilde;adidos</legend>
<?php
        
include("content/php/lm_tablaDetalle.php");
?>            
          </fieldset>
Por otra parte, he añadido la ejecución desde la función xajax:
Código PHP:
<?php

// instanciamos la clase xajax
$xajax = new xajax();
$xajax->setCharEncoding("iso-8859-1"); // le indica la codificación que debe utilizar
//$xajax->decodeUTF8InputOn();            // decodifica los caracteres extraños 




// creamos función para procesar el formulario de detalles
function procesarFormPrto($form_entrada) {  
    
extract($form_entrada);
    
    
// conectamos con la BBDD
    
$mysql = new MySQL('localhost','root','','gestionclientes');
    
    
$sql "insert into LM_tmpPresupuestos values ('',
        '"
.$form_entrada["referencia"]."',
        '"
.$form_entrada["detalle"]."',
        '"
.$form_entrada["iva"]."',
        '"
.$form_entrada["precio"]."',
        '"
.$form_entrada["cantidad"]."'
        )"
;
    
    
$consulta $mysql -> consulta($sql);
    
    
// se instancia el objeto para recibir la respuesta
    
$respuesta = new xajaxResponse();
    
    
// recargamos los valores de la tabla
    
$("#capaTablaDetalle").load("content/php/lm_tablaDetalle.php");
   
   
// devolvemos la respuesta
   
return $respuesta;     
}

function 
mostrarDetallePrto($buscar) {
    
}

// registramos la función xajax
$xajax -> registerFunction("procesarFormPrto");

// el objeto xcajax debe procesar cualquier petición
$xajax -> processRequest();

?>
Por último, en el fichero nuevo, lm_tablaDetalle.php he puesto:
Código PHP:
<div id="capaTablaDetalle">
<?php
            $mysql 
= new MySQL('localhost','root','','gestionClientes');
            
$sql "select * from lm_tmppresupuestos";
            
            
$consulta $mysql->consulta($sql);
            
            
            
$total $mysql->num_rows($consulta);
?>                        
                <table id="tb_altaPrto">
                    <thead>
                        <tr>
                            <th width="100px">Rf.</th>
                            <th>Detalle</th>
                            <th width="40px">Cant.</th>
                            <th width="30px">IVA</th>
                            <th width="60px">&euro;/Ud.</th>
                        </tr>
                    </thead>
                    <tfoot>
                        <tr>
                            <th colspan="4">Total elementos a&ntilde;adidos:</th>
                            <th class="al_dch"><?php echo $total?></th>
                        </tr>
                    </tfoot>
                    <tbody>
<?php
            
            
if($total<1) {
?>
                        <tr>
                            <td colspan="5">No hay registrado ning&uacute;n detalle.</td>
                        </tr>
<?php                
            
}else{
                
// Comprobamos total de registros
                // echo $total;
            
                // Se inicia el bucle para mostrar el listado
                
while($resultados $mysql->fetch_array($consulta)) {
?>
                        <tr>
                            <td class="al_ctr"><?php echo $resultados['Referencia']; ?></td>
                            <td><?php echo $resultados['Detalle']; ?></td>
                            <td class="al_dch"><?php echo $resultados['Cantidad']; ?></td>
                            <td class="al_ctr"><?php echo $resultados['IVA']; ?></td>
                            <td class="al_dch"><?php echo $resultados['PrecioUnitario']; ?></td>
                        </tr>
<?php                    
                
}
            }
?>


<!--
                        <tr>
                           <td class="al_ctr">lo dicho</td> 
                           <td>lo dicho</td>
                           <td class="al_dch">10.000</td>
                           <td class="al_ctr">16</td>
                           <td class="al_dch">21.000,00</td>
                        </tr>
-->
                    </tbody>                    
                </table>
            </div>
Al lanzar me sale el error:
Cita:
Parse error: parse error, expecting `T_VARIABLE' or `'$'' in Z:\wamp\www\LM_GestionClientes\content\php\lm_xaja xFns.php on line 32
Nada, a ver si se os ocurre algo.

Muchas gracias de nuevo.
  #20 (permalink)  
Antiguo 16/02/2010, 09:23
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 8 meses
Puntos: 101
Respuesta: Un consejo para aplicación de gestión, gracias

Es tema de PHP. Pero fijate que hay en la linea 32.
  #21 (permalink)  
Antiguo 16/02/2010, 09:33
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 17 años
Puntos: 2
Respuesta: Un consejo para aplicación de gestión, gracias

Hola, la verdad es que como empecé planteando el tema con jQuery, PHP y derivó en XAJAX, por eso lo planteé aquí. Como al final gira en torno a XAJAX, no sé si éste sería el apartado más adecuado o debería moverse a PHP.

En cuanto a la línea 32, se encuentra dentro de la función XAJAX y es la siguiente:

Código PHP:
$("#capaTablaDetalle").load("content/php/lm_tablaDetalle.php"); 
Esta es la llamada que no sé cómo hacer y es el fallo que produce.

Muchas gracias.

Saludos.
  #22 (permalink)  
Antiguo 16/02/2010, 11:05
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 8 meses
Puntos: 101
Respuesta: Un consejo para aplicación de gestión, gracias

Yo no manejo la librería, pero estas seguro de que estas haciendo bien la consulta a mysql?

Cita:
$mysql = new MySQL('localhost','root','','gestionClientes');
$sql = "select * from lm_tmppresupuestos";
  #23 (permalink)  
Antiguo 16/02/2010, 11:25
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 17 años
Puntos: 2
Respuesta: Un consejo para aplicación de gestión, gracias

Buenas tardes:

Ahora mismo la tabla muestra resultados, con lo que en principio, la consulta no está mal. La duda es cómo hacer para que tras registrar mediante la función XAJAX un nuevo registro, me 'refresque' la tabla.

En la captura de un poco más arriba, se muestra la tabla capturando los datos de prueba de la bbdd con esta consulta.

Creo que uno de los fallos, puede estar en el include, porque en el fichero que llamo, está el div donde debe recargar y no sé si debería hacer el include desde el div. No sé si lo que he hecho mal ha sido meter una 'recarga' tipo jQuery en la función XAJAX, que al final es PHP.

Una de las cosas que se me ocurren, a ver qué opinan, es en el botón que llama a XAJAX hacer una llamada a otra función, dentro del mismo evento onClick, que me recargue la tabla.

Ya echo humo pensando opciones :P

Muchas gracias a todos.

Saludos.
  #24 (permalink)  
Antiguo 16/02/2010, 11:49
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 17 años
Puntos: 25
Pregunta Respuesta: Un consejo para aplicación de gestión, gracias

Código PHP:
$("#tu_div").load("listar.php"); 
-----_____________-----


creo que hay un error de concepto con lo que es ajax... jejeje
__________________
blog: hector2c.wordpress.com
email: [email protected]
  #25 (permalink)  
Antiguo 16/02/2010, 13:21
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 8 meses
Puntos: 101
Respuesta: Un consejo para aplicación de gestión, gracias

Cierto. En tu ejemplo imprimis codigo javascript con PHP. Y no lo estás poniendo dentro de etiquetas <script> sino directamente en el html. Eso da error.

Cita:
// recargamos los valores de la tabla
$("#capaTablaDetalle").load("content/php/lm_tablaDetalle.php");
  #26 (permalink)  
Antiguo 17/02/2010, 08:38
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 17 años
Puntos: 2
Respuesta: Un consejo para aplicación de gestión, gracias

Buenas tardes:

Antes de nada, muchas gracias por vuestra ayuda ;) , ¡¡esto sí es una comunidad!!

No he podido probar aún el cambio, porque ayer anduve liado, hoy sin falta lo pruebo.

He pensado crear una función jQuery en plan,

Código PHP:
function recargaTabla() {
$(
"#capaTablaDetalle").load("content/php/lm_tablaDetalle.php");  

Y luego en el button, meter en el evento "onClick":

Código PHP:
<input type="button" onclick="xajax_procesarFormPrto(xajax.getFormValues('altaDetalle')); recargaTabla()" value="a&ntilde;adir detalle" id="anadir" name="anadir" class="buttons" /> 
No sé si esto funcionaría, pero creo que sería una solución, ¿no?

Un saludo
  #27 (permalink)  
Antiguo 17/02/2010, 10:20
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 8 meses
Puntos: 101
Respuesta: Un consejo para aplicación de gestión, gracias

Como sea, pero esa funcion y todo codigo javascript tiene que estar dentro de etiquetas <script type="text/javascript"> (salvo en el caso de los eventos, como el onclick de tu etiqueta input, claro).

Cierto que hoy somos varios resolviendo temas, y proponiendo enfoques. Muy bueno.
  #28 (permalink)  
Antiguo 17/02/2010, 18:11
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 17 años
Puntos: 2
Respuesta: Un consejo para aplicación de gestión, gracias

Buenas:

Me voy a la cama casi que ya, pero os pongo al día de los progresos ;)

Creé una nueva función XAJAX y la registré. Llamé a esta función desde el evento onClick y muestra la tabla :D. Pongo los códigos y comento los nuevos problemas.

Nueva función (Se encuentra en un fichero aparte que cargo al principio):

Código PHP:
function recargaTabla() {
    
    // se instancia el objeto para recibir la respuesta
    $respuesta2 = new xajaxResponse();
      
    // conectamos con la BBDD
    $mysql = new MySQL('localhost','root','','gestionClientes');
    $sql = "select * from LM_tmpPresupuestos";
            
    $consulta = $mysql->consulta($sql);
                     
    $total = $mysql->num_rows($consulta);
    
    ob_start();

?>    
    <table id="tb_altaPrto">
                    <thead>
                        <tr>
                            <th width="100px">Rf.</th>
                            <th>Detalle</th>
                            <th width="40px">Cant.</th>
                            <th width="30px">IVA</th>
                            <th width="60px">&euro;/Ud.</th>
                        </tr>
                    </thead>
                    <tfoot>
                        <tr>
                            <th colspan="4">Total elementos a&ntilde;adidos:</th>
                            <th class="al_dch"><?php echo $total?></th>
                        </tr>
                    </tfoot>
                    <tbody>
<?php                    
    
if($total<1) {
?>
                        <tr>
                            <td colspan="5">No hay registrado ning&uacute;n detalle.</td>
                        </tr>
<?php                
            
}else{
                
// Comprobamos total de registros
                // echo $total;
            
                // Se inicia el bucle para mostrar el listado
                
while($resultados $mysql->fetch_array($consulta)) {
?>
                        <tr>
                            <td class="al_ctr"><?php echo $resultados['Referencia']; ?></td>
                            <td><?php echo $resultados['Detalle']; ?></td>
                            <td class="al_dch"><?php echo $resultados['Cantidad']; ?></td>
                            <td class="al_ctr"><?php echo $resultados['IVA']; ?></td>
                            <td class="al_dch"><?php echo $resultados['PrecioUnitario']; ?></td>
                        </tr>
<?php                    
                
}
            }
?>
                    </tbody>                    
                </table>
<?php             
    
    
// Cerramos la captura del texto
    
$respuesta2 -> assign('capaTablaDetalle''innerHTML'ob_get_clean());
    
    
// devolvemos la respuesta
    
return $respuesta2;

}

Llamadas desde el onClick:

Código PHP:
<input type="button" onclick="xajax_procesarFormPrto(xajax.getFormValues('altaDetalle')); xajax_recargaTabla(); return false;" value="a&ntilde;adir detalle" id="anadir" name="anadir" class="buttons" /> 
El tema, es que cuando le doy al botón, llama a la primera función, la encargada de registrar en BBDD el registro. Al llamar a la segunda, aún no captura los datos registrados, así que si es el primero, me muestra la tabla vacía e imagino, a falta de hacer más pruebas, que siempre irá un registro por detrás.

Al principio, al entrar en la página, tampoco me muestra la tabla vacía, con el 'if' de si no hay registros. Hasta que no pincho en el botón, no aparece.

Como 'apaño', se me ocurre poner un botón refrescar, que es una auténtica chapuza, pero sería efectivo y funcional hasta que dé con cómo cargar y refrescar la tabla en tiempo real.

Saludos y buenas noches.
  #29 (permalink)  
Antiguo 18/02/2010, 08:58
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 17 años
Puntos: 2
Respuesta: Un consejo para aplicación de gestión, gracias

Buenas de nuevo:

Creo que tengo la solución, aunque no podré probarla hasta esta noche o mañana. Creo que voy a llamar a la función recargaTabla(), desde la misma procesarFormPrto(). De esta manera, al finalizar la carga de en BBDD, actualizaría la tabla y tendría mayor control, que haciendo las dos llamadas desde el evento.

En xajax creo que hay una función para recargar el xml:

Código PHP:
loadXML 

Según el tuto que hay en el link de abajo, hacen algo parecido, y en extremo es muy parecido al funcionamiento de este foro al incluir una respuesta rápida.

http://forums.devshed.com/php-develo...le-485341.html

Pues nada, si consigo que funcione OK, os lo pongo por aquí por si le puede servir a alguien.

Saludos.
  #30 (permalink)  
Antiguo 23/02/2010, 08:29
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 17 años
Puntos: 2
Respuesta: Un consejo para aplicación de gestión, gracias

Buenas tardes:

Ya lo hice funcionar y va muy bien, sólo me falta añadirle el validator y la animación típica de AJAX, mientras piensa (aunque va muy rápido )

He combinado jQuery, con XAJAX y es como mejor funciona.

Para jQuery he utilizado lo siguiente:

Código:
// carga de tabla de datos            
        if ($("#capaTablaDetalle")) {
            $("#capaTablaDetalle").load(xajax_recargaTabla());
        }
Supongo que la validación la haré también con jQuery.

Para XAJAX:

Código PHP:
<?php

// instanciamos la clase xajax
$xajax = new xajax();
$xajax->setCharEncoding("iso-8859-1"); // le indica la codificación que debe utilizar
//$xajax->configure(decodeUTF8Input,'true'); // decodifica los caracteres extraños 

// ============================================================================================

// -> FUNCIÓN PARA INSERTAR LOS DATOS EN BBDD

function procesarFormPrto($form_entrada) {  
    
extract($form_entrada);
    
    
    
// conectamos con la BBDD
    
$mysql = new MySQL('localhost','root','','gestionclientes');
    
    
$sql "insert into LM_tmpPresupuestos values ('',
        '"
.$form_entrada["referencia"]."',
        '"
.$form_entrada["detalle"]."',
        '"
.$form_entrada["iva"]."',
        '"
.$form_entrada["precio"]."',
        '"
.$form_entrada["cantidad"]."'
        )"
;
    
    
$consulta $mysql -> consulta($sql);
    
    
// se instancia el objeto para recibir la respuesta
    
$respuesta = new xajaxResponse();
    
    
// recargamos la tabla
    
$respuesta -> loadCommands(recargaTabla());
         
    
// devolvemos la respuesta
    
return $respuesta;     
}

// ============================================================================================

// -> FUNCIÓN PARA RECARGAR Y MOSTRAR LA TABLA

function recargaTabla() {
    
    
// se instancia el objeto para recibir la respuesta
    
$respuesta = new xajaxResponse();
      
    
// conectamos con la BBDD
    
$mysql = new MySQL('localhost','root','','gestionClientes');
    
$sql "select * from LM_tmpPresupuestos";
            
    
$consulta $mysql->consulta($sql);
                     
    
$total $mysql->num_rows($consulta);
    
    
ob_start();    
    
    if (
$total>0) {
        
// echo "<div class='al_dch borde_punteado'><a href='' onClick='xajax_vaciarTabla();' style='display: inline-block; margin-bottom: 3px;'>[ vaciar tabla ] <img src='images/borrar.png' height='15px' alt='vaciar tabla' title='vaciar tabla' /></a></div>";
        
echo "<div class='al_dch borde_punteado'><input type='image' src='images/borrar.png' onClick='xajax_vaciarTabla();' title='vaciar tabla' /></div>";
    }

?>    
    <table id="tb_altaPrto">
                    <thead>
                        <tr>
                            <th width="100px">Rf.</th>
                            <th>Detalle</th>
                            <th width="40px">Cant.</th>
                            <th width="30px">IVA</th>
                            <th width="60px">&euro;/Ud.</th>
                        </tr>
                    </thead>
                    <tfoot>
                        <tr>
                            <th colspan="4">Total elementos a&ntilde;adidos:</th>
                            <th class="al_dch"><?php echo $total?></th>
                        </tr>
                    </tfoot>
                    <tbody>
<?php                    
    
if($total<1) {
?>
                        <tr>
                            <td colspan="5">No hay registrado ning&uacute;n detalle.</td>
                        </tr>
<?php                
            
}else{
                
// Comprobamos total de registros
                // echo $total;
            
                // Se inicia el bucle para mostrar el listado
                
while($resultados $mysql->fetch_array($consulta)) {
?>
                        <tr>
                            <td class="al_ctr"><?php echo utf8_decode($resultados['Referencia']); ?></td>
                            <td><?php echo utf8_decode($resultados['Detalle']); ?></td>
                            <td class="al_dch"><?php echo $resultados['Cantidad']; ?></td>
                            <td class="al_ctr"><?php echo $resultados['IVA']; ?></td>
                            <td class="al_dch"><?php echo $resultados['PrecioUnitario']; ?></td>
                        </tr>
<?php                    
                
}
            }
?>
                    </tbody>                    
                </table>
<?php             
    
    
// Cerramos la captura del texto
    
$respuesta -> assign('capaTablaDetalle''innerHTML'ob_get_clean());        
    
    
// devolvemos la respuesta
    
return $respuesta;

}

// ============================================================================================

// -> FUNCIÓN PARA VACIAR LA TABLA MEDIANTE TRUNCATE

function vaciarTabla() {
    
     
// se instancia el objeto para recibir la respuesta
    
$respuesta = new xajaxResponse();
      
    
// conectamos con la BBDD
    
$mysql = new MySQL('localhost','root','','gestionClientes');
    
$sql "truncate table LM_tmpPresupuestos";
            
    
$consulta $mysql->consulta($sql);
    
    
// recargamos la tabla
    
$respuesta -> loadCommands(recargaTabla());
    
    
// devolvemos la respuesta
    
return $respuesta;
}

// ============================================================================================

function limpiaCampos() {
    
    
// se instancia el objeto para recibir la respuesta
    
$respuesta = new xajaxResponse();
    
    
// se vacían los campos del formulario
    
$respuesta -> script("xajax.$('altaDetalle').btnLimpiar.click();");
    
    
// devolvemos la respuesta
    
return $respuesta;
}

// ============================================================================================


// ============================================================================================

// registramos la función xajax
$xajax -> registerFunction("procesarFormPrto");
$xajax -> registerFunction("recargaTabla");
$xajax -> registerFunction("vaciarTabla");
$xajax -> registerFunction("limpiaCampos");

// el objeto xcajax debe procesar cualquier petición
$xajax -> processRequest();

?>
Por último, la llamada desde HTML:

Código HTML:
<!-- Creo capa contenedora para zona inferior -->
        <div id="dv_prto">
          <h3>Desglose Presupuesto</h3>

<!-- Tabla de detalle. Recoge los valores de la tabla 'lm_tmppresupuestos' -->          
          <fieldset>
            <legend>Art&iacute;culos A&ntilde;adidos</legend>
            <div id="capaTablaDetalle">
                <a name="lnk_tablaDetalle"></a>
            </div>       
          </fieldset>  
          
<!-- Formulario de Registro de detalles. Registra valores en la tabla 'lm_tmppresupuestos' mediante XAJAX -->
          <form id="altaDetalle" name="altaDetalle" method="post">
            <fieldset>
                <legend>Alta de Detalle</legend>
                <div>
        			<label class="etiqueta" for="referencia">Referencia</label>
        			<input type="text" id="referencia" name="referencia" class="inputfield" />
    			</div>
                <div>
        			<label class="etiqueta" for="detalle">Descripci&oacute;n</label>
        			<input type="text" id="detalle" name="detalle" class="inputfield required" />
    			</div>
                <div>
        			<label class="etiqueta" for="cantidad">Cantidad</label>
        			<input type="text" id="cantidad" name="cantidad" class="inputfield required inputimporte" />&nbsp;Uds.
    			</div>
                <div>
        			<label class="etiqueta" for="iva">Tipo IVA</label>
        			<input type="text" id="iva" name="iva" class="inputfield required inputimporte" />&nbsp;%
    			</div>
                <div>
        			<label class="etiqueta" for="precio">Precio Unitario</label>
        			<input type="text" id="precio" name="precio" class="inputfield required inputimporte" />&nbsp;&euro;
    			</div>
                <div  class="div_buttons">
        			
                    <input type="button" onclick="xajax_procesarFormPrto(xajax.getFormValues('altaDetalle')); xajax_limpiaCampos(); return false;" value="a&ntilde;adir detalle" id="anadir" name="anadir" class="buttons" />
        			<input type="reset" value="limpiar" id="btnLimpiar" name="btnLimpiar" class="buttons" />
    			</div>
            </fieldset>
        </form>
        </div>        
        </div> 
Ahora ando liado haciendo la segunda parte, he montado un procedimiento almacenado que no consigo cargarlo, pero esa es otra historia y corresponde a otro foro. Cuando llegue a casa, buscaré información, porque me da un time out, pero no estoy seguro al 100% de que no tenga algún error.

Un saludo, muchas gracias y espero que les sea de utilidad

Etiquetas: consejo, gracias
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 20:21.