Foros del Web » Programando para Internet » PHP »

Ayuda_Formulario_PHP

Estas en el tema de Ayuda_Formulario_PHP en el foro de PHP en Foros del Web. Hola Amigos de Foros del Web,espero que se encuentren bien.Paso a explicarles mi situacion:Estoy apoyando a un amigo a realizar un Sistema para una Notaria,el ...
  #1 (permalink)  
Antiguo 09/09/2010, 19:16
 
Fecha de Ingreso: diciembre-2009
Mensajes: 82
Antigüedad: 14 años, 4 meses
Puntos: 0
Ayuda_Formulario_PHP

Hola Amigos de Foros del Web,espero que se encuentren bien.Paso a explicarles mi situacion:Estoy apoyando a un amigo a realizar un Sistema para una Notaria,el cual esta siendo desarrollado en PHP con MySql.Yo estoy encargado de hacer el formulario de Egresos,el cual esta formado por:3 Combo Box(Tipo,Subtipo,Detalle) y dos cajas de texto.Me voy a enfocar en los combo box,ya que de estos viene mi pregunta.

Tomando un simple ejemplo: En el combo box Tipo,tendria que aparecer los siguientes datos:Servicios, Administrativos,Gastos de representación,Bancos,Planilla,IMPUESTOS.Ahora, si escogo del primer combo la opcion Servicios,quiero que en el segundo combo me aparezca lo siguiente:Servicios Publicos,Servicios Profesionales,Publicidad.
Si escogo Servicios Publicos,en el tercer combo tendria que aparecerme lo sgte:Luz,Agua y Alcantarillado,Cable,Internet,Telefonía Fija,Telefonía Móvil, Monitoreo de Alarma y asi sucesivamente con los otros datos.

Las consultas para realizar el ejemplo anterior son las sgtes:
Para Combo Box Tipo: SELECT Nº, GASTO FROM tutabla WHERE filiacion IS NULL
Para Combo Box Subtipo:SELECT t2.Nº, t2.GASTO FROM tutabla t1 INNER JOIN tutabla t2 ON t1.Nº = t2.filiacion WHERE t2.filiacion = 1;
Para Combo Box Detalle:SELECT t2.Nº, t2.GASTO FROM tutabla t1 INNER JOIN tutabla t2 ON t1.Nº = t2.filiacion WHERE t2.filiacion = 2;

Mi pregunta es la siguiente:¿Como hago para que esas consultas sirvan para cualquier caso,es decir,que sirvan para cualquier opcion escogida en cada uno de los combos,y me muestren los datos que deberian ser(eso si dependiendo de la opcion escogida)? ¿En ves de los numeros 1 y 2 tengo que colocar las variables recogidas mediante los selectores? Si es asi,¿Cuales son esas variables en este caso? Por favor,podrian ayudarme??

Para mas informacion les adjuntare el codigo que utilizo:
Formulario:
<form action="#" method="post" onsubmit="return buscarcliente()">
<td width="130" class="ewTableHeader">Tipo : </td>
<td colspan="3"><select id="tiposervicio" onchange='mostrar_descripcion()' name="servicio">
<?php foreach($array_movimientotipo as $a) :?><option value="<?php echo $a['id']?>"><?php echo $a['nombre'] ?></option><?php endforeach;?>
</select>
</td>
</form>
</tr>

<tr>
<td class="ewTableHeader">Sub-Tipo : </td>
<td colspan="3"><select id="movimiento" name="movimiento">
<?php foreach($array_movimientotipo1 as $a) :?><option value="<?php echo $a['id']?>"><?php echo $a['nombre'] ?></option><?php endforeach;?>}
</select>
</td>
</tr>
<tr>
<td class="ewTableHeader">Detalle : </td>
<td colspan="3"><select id="detalle" onchange='mostrar_detalle_servicios()' name="detalle">
<?php foreach($array_movimientotipo2 as $a) :?><option value="<?php echo $a['id']?>"><?php echo $a['nombre'] ?></option><?php endforeach;?>
</select>
</td>
</tr>

Funcion mostrar_descripcion():

function mostrar_descripcion()
{
campo1=$("#campo1").attr("value");
$.ajax({ type: "GET", url: "funciones/operacion/mostrar_descripcion.php?campo1="+campo1,
data: null, success: function(data){
document.getElementById("movimiento").parentNode.i nnerHTML=data;
//calcularmontos_concepto()
} });
}

Funcion mostrar_detalle_servicios():

function mostrar_detalle_servicios()
{

campo2=$("#campo2").attr("value");
$.ajax({ type: "GET", url: "funciones/operacion/mostrar_detalle_servicios.php?campo2="+campo2,
data: null, success: function(data){
document.getElementById("detalle").parentNode.inne rHTML=data;
//calcularmontos_concepto()
} });
}

mostrar_descripcion.php:
<?php session_start();
include "../../movimientotipo.php"; //clase movimientotipo
$o_movimientotipo = new movimientotipo(); //creamos el objeto movimientotipo

$o_movimientotipo->cargar_combo_primera_descripcion();
$array_movimientotipo=$o_movimientotipo->arrayconsulta(); ?>

<select id="movimiento" onChange="mostrar_detalle_servicios()" name="movimiento">
<?php if(count($array_movimientotipo)>0) { ?>
<?php foreach($array_movimientotipo as $a) :?><option value="<?php echo $a['id']?>"><?php echo $a['nombre'] ?></option><?php endforeach; ?>
<?php } ?>
</select>

mostrar_detalle_servicios.php:
<?php session_start();
include "../../movimientotipo.php"; //clase movimientotipo
$o_movimientotipo = new movimientotipo(); //creamos el objeto movimientotipo

$o_movimientotipo->cargar_combo_segunda_descripcion();
$array_movimientotipo=$o_movimientotipo->arrayconsulta(); ?>
<select id="detalle" name="detalle">
<?php if(count($array_movimientotipo)>0) { ?>
<?php foreach($array_movimientotipo as $a) :?><option value="<?php echo $a['id']?>"><?php echo $a['nombre'] ?></option><?php endforeach; ?>
<?php } ?>
</select>

Y por ultimo,la clase donde realizo las consultas a la Base de Datos:
<?php
require_once("conexion.php");

class movimientotipo
{
private $id;
private $nombre;
private $filiacion;
private $devolucion;
private $observacion;
private $tipo;

public function getId() {
return $this->id;
}

public function setId($id) {
$this->id = $id;
}

public function getNombre() {
return $this->nombre;
}

public function setNombre($nombre) {
$this->nombre = $nombre;
}

public function getFiliacion() {
return $this->filiacion;
}

public function setFiliacion($filiacion) {
$this->filiacion = $filiacion;
}

public function getDevolucion() {
return $this->devolucion;
}

public function setDevolucion($devolucion) {
$this->devolucion=$devolucion;
}

public function getObservacion() {
return $this->observacion;
}

public function setObservacion($observacion) {
$this->observacion=$observacion;
}

public function getTipo() {
return $this->tipo;
}

public function setTipo($tipo) {
$this->tipo=$tipo;
}

public function movimientotipo(){
$v= array(0,"","","","","");
$numargs = func_num_args();
if($numargs)
{
for ($i=0; $i<$numargs; $i++) :
$v[$i]=func_get_arg($i);
endfor;
}
$this->id=$v[0];
$this->nombre=$v[1];
$this->filiacion=$v[2];
$this->devolucion=$v[3];
$this->observacion=$v[4];
$this->tipo=$v[5];
}

public function crear(){
conexion::getInstance()->consulta("insert into movimiento_tipo (id,nombre,filiacion,devolucion,observacion,tipo)
values ($this->id,$this->nombre,$this->filiacion,$this->observacion,$this->tipo)");
}

public function listar(){
conexion::getInstance()->consulta("select id,nombre,filiacion,devolucion,observacion,tipo
from movimiento_tipo");
}

public function cargar_combo_movimientotipo(){
conexion::getInstance()->consulta("select id,nombre from movimiento_tipo where nombre = 'Servicios' or nombre = 'Administrativos' or nombre = 'Gastos de Representacion' or nombre = 'Bancos' or nombre = 'Planilla' or nombre = 'Impuestos'");
//conexion::getInstance()->consulta("SELECT id,nombre FROM `movimiento_tipo` WHERE filiacion IS NULL");
}

public function cargar_combo_primera_descripcion()
{
//conexion::getInstance()->consulta(
conexion::getInstance()->consulta("select d2.id,d2.nombre from movimiento_tipo d1 INNER JOIN movimiento_tipo d2 ON d1.id=d2.filiacion where d2.filiacion=$this->d1.filiacion");

}

public function cargar_combo_segunda_descripcion()
{
conexion::getInstance()->consulta("select id,nombre from movimiento_tipo");
}

public function buscar(){
conexion::getInstance()->consulta("select * from movimiento_tipo
where id = $this->id ");
$array=$this->arrayconsulta();
if(count($array >0)){
foreach($array as $v):
$this->id=$v[0];
$this->nombre=$v[1];
$this->filiacion=$v[2];
$this->devolucion=$v[3];
$this->observacion=$v[4];
$this->tipo=$v[5];

endforeach;
}
}

public function actualizar_nombre(){
$sql = "update movimiento_tipo set nombre=$this->nombre
where id = $this->id ";
conexion::getInstance()->consulta($sql);
}


public function arrayconsulta(){ return conexion::getInstance()->arrayconsulta(); }

public function numregistros(){ return conexion::getInstance()->numreg(); }

public function listarnombres(){ return conexion::getInstance()->listarnombres(); }

public function numerocampos(){ return conexion::getInstance()->numerocampos(); }

public function cerrarconexion(){ return conexion::getInstance()->cerrar();}

}
?>
  #2 (permalink)  
Antiguo 09/09/2010, 22:10
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: Ayuda_Formulario_PHP

Caray me líe un poco con tanto código, es un ironía enorme, porque muchos vienen y no traen más que una línea o nada, y tu traes tu clase completica jjejejje pero bueh!

Cita:
Iniciado por miguelangel23 Ver Mensaje
Las consultas para realizar el ejemplo anterior son las sgtes:
Para Combo Box Tipo: SELECT Nº, GASTO FROM tutabla WHERE filiacion IS NULL
Para Combo Box Subtipo:SELECT t2.Nº, t2.GASTO FROM tutabla t1 INNER JOIN tutabla t2 ON t1.Nº = t2.filiacion WHERE t2.filiacion = 1;
Para Combo Box Detalle:SELECT t2.Nº, t2.GASTO FROM tutabla t1 INNER JOIN tutabla t2 ON t1.Nº = t2.filiacion WHERE t2.filiacion = 2;

Mi pregunta es la siguiente:¿Como hago para que esas consultas sirvan para cualquier caso,es decir,que sirvan para cualquier opcion escogida en cada uno de los combos,y me muestren los datos que deberian ser(eso si dependiendo de la opcion escogida)? ¿En ves de los numeros 1 y 2 tengo que colocar las variables recogidas mediante los selectores? Si es asi,¿Cuales son esas variables en este caso? Por favor,podrian ayudarme??
de tus dudas, sinceramente vi que hacía la clase a grandes rasgos así que, según entiendo te regresa el ID seleccionado en el combo..

para hacer lo que necesitas, primero organiza tus tablas con llaves foranes, se trata de que hagas selecciones con respecto a un solo ID, y después como ya viste hacer joins con respecto a las otras.. según entiendo ya hace la selección solo te falta filtrar..

así que creo que podría ser por ese lado..

espero haber entendido bien xDDDD

saludos^^
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #3 (permalink)  
Antiguo 10/09/2010, 07:25
 
Fecha de Ingreso: diciembre-2009
Mensajes: 82
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Ayuda_Formulario_PHP

Hola silvanha, crei conveniente poner casi todo el còdigo para que ustedes puedan entender mi consulta abuu... Ademàs, ya hemos conversado(podria decirse asi) en el foro de mysql,y dejame decirte que me sirviò bastante tu ayuda

Ahora, vengo a molestarlos de nuevo . Con respecto a tu ùltima respuesta, dime, como hago para poder filtrar ?? y asi me aparezcan los datos correctos dependiendo de la opciòn que vaya escogiendo en los combo box. No entiendo como hacer esa parte. Seria estupendo tu ayuda.
  #4 (permalink)  
Antiguo 10/09/2010, 08:41
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: Ayuda_Formulario_PHP

ya.. mira hace un tiempo yo tuve una duda semejante, mírala quizás te oriente =)

esta poooor aquí :P

fijate más o menos por ahí puse incluso la estructura de las tablas..

suerte!! =)
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #5 (permalink)  
Antiguo 10/09/2010, 16:44
 
Fecha de Ingreso: diciembre-2009
Mensajes: 82
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Ayuda_Formulario_PHP

silvanha sinceramente no entiendo mucho esa consulta, además,tu usas mas de una tabla, no se como haria lo que tu haces pero con una tabla, como es mi caso.

Podrias explicarme de una manera detallada que debo de hacer.???
  #6 (permalink)  
Antiguo 10/09/2010, 18:35
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: Ayuda_Formulario_PHP

veamos..

me refiero a que tienes 3 tablas.. tipo, subtipo y detalle.. seleccionas todos los tipos, seleccionando el tipo filtras los subtipos que le corresponden, de ahí del seleccionado filtras los detalles que le corresponden.. hasta ahí todo bien..

ahora para poder saber que subtipos corresponden a un tipo, por ejemplo, necesitas tener en la tabla subtipos una clave foranea que signifique el tipo.. esto para poder filtrarlos.. sería análogo para la tabla detalles..

ahora para saber que variables son las que tienes que recoger.. sería para el primer combo algo como $tipo = $_POST["servicio"], para $subtipo = $_POST["movimiento"] y para el último $detalle = $_POST["detalle"].

Lo que significa que en tus consultas ocupas esos valores recibidos..

espero haberme explicado.. en el caso de la consulta que te mostre, era para que vieras la relación entre las tablas, y como con un solo id, seleccionas todo.. ahí tengo estados, municipios, nombres, apellidos, direcciones y un sin fin de cosas xD lamento haberte liado más.

ahí te leo .. ;)
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #7 (permalink)  
Antiguo 11/09/2010, 14:12
 
Fecha de Ingreso: diciembre-2009
Mensajes: 82
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Ayuda_Formulario_PHP

Hola silvanha,no tengo tres tablas,solo tengo una tabla donde estan todos los datos.Esta es:
N° GASTO Filiación Devolución Observacion
1 Servicios NULL
2 Servicios Públicos 1
3 Luz 2
4 Agua y Alcantarillado 2
5 Cable 2
6 Internet 2
7 Telefonía Fija 2
8 Telefonía Móvil 2
9 Monitoreo de Alarma 2

10 Servicios Profesionales 1 1
11 Servicios Jurídicos Cevallos 10
12 Servicios Jurídicos Otros 10
13 Servicios Contables 10
14 Servicios Mantenimiento y reparación 10
15 Servicios Informáticos 10 1
16 Publicidad 1 1
17 Diarios 16
18 Revistas 16
19 Televisión 16
20 Paginas Amarillas 16
21 Web 16

22 Administrativos NULL
23 Local 22 1
24 Alquiler 23
25 Decoración y ornato del Local 23
26 Material para Mantenimiento o reparación 23
27 Correspondencia y Traslado 22
28 Flete 27
29 Correos 27
30 Courrier 27
31 Mudanza 27
32 Trámites
33 Registros Públicos
34 Otra entidad
35 Gastos de representación NULL 1
36 Movilidad 35
37 Combustible 36
38 Estacionamiento 36
39 Taxi 36
40 Pasajes 36
41 Repuestos 36
42 Viaticos 35
43 Viáticos Fijos 42
44 Viáticos a rendir cuentas 42 1
45 Alimentos 35
46 Comida de Negocios 45
47 Refrigerio 45
48 Comida en Viaje de trabajo 45
49 Comida para el personal 45
50 Alimentos para celebración Empresa 45
51 Alojamiento 35
52 Alojamiento para empleados 51
53 Alojamiento para invitados 51
54 Bancos NULL
55 BCP 54
56 Depósito a Cta cte MN 570-XXXXXXXX 55
57 Depósito a Cta cte ME 570-XXXXXXXX 55
58 BBVA 54
59 Depósito Cta cte MN 011-XXXXXXXX 58
60 Depósito Cta cte ME 011-XXXXXXXX 58
61 Scotiabank 54
62 Depósito CTA Ahorros xxxxxxx 61
63 Planilla NULL 1
64 Sueldo 63
65 Asignación Temporal 64
66 Adelanto sueldo 64
67 Amortización sueldo 64
68 Sueldo completo 64
69 CTS 63
70 Pago CTS en cuenta de trabajador 69
71 Pago CTS a trabajador 69
72 Liquidación 63
73 Vacaciones 72
74 Liquidación parcial 72
75 Liquidación Total 72
76 AFP 63
77 Horizonte 76
78 Integra 76
79 Profuturo 76
80 Prima 76
81 IMPUESTOS NULL
82 SUNAT 81
83 Pago del Mes 82
84 Fraccionamiento 82
85 Multas 82
86 SATT 81
87 INMUEBLE 86
88 VEHICULO 86
89 MULTAS 86

Ahora,como te decia antes,tengo tres combos:Tipo,Subtipo,Detalle.En el primer combo tendrian que aparecer,segun la tabla anterior,los sgtes datos:Servicios,Administrativos,Gastos de representación,Bancos,Planilla,IMPUESTOS. Ahora,tomando un ejemplo, si yo escogiera la opcion Servicios(1), en el segundo combo tendria que aparecerme los sgtes datos:Servicios Públicos(1),Servicios Profesionales(1),Publicidad(1).Luego,si yo escogo Servicios Publicos(2),en el tercer combo tendrian que aparecerme las sgtes opciones:Luz(2),Agua y Alcantarillado(2),Cable(2),Internet(2),Telefonía Fija(2),Telefonía Móvil(2),Monitoreo de Alarma(2);Si hubiera escogido en el segundo combo Servicios Profesionales(10),en el tercer combo tendria que aparecerme Servicios Jurídicos Cevallos(10),Servicios Jurídicos Otros(10),Servicios Contables(10),Servicios Mantenimiento y reparación(10),Servicios Informáticos(10).Por ultimo,si hubiera escogido Publicidad(16),en el tercer combo tendrian q aparecerme las sgtes opciones:Diarios(16),Revistas(16),Televisión(16),P aginas Amarillas(16),Web(16).

Los numeros que estan entre los parentesis,son aquellos numeros de la columna N°. Asi sucesivamente con los demas datos.Dependiendo lo que escoga en el primer combo,va mostrarme opciones en el segundo,y depende de este ultimo,de la opcion que escoga,para q me muestre los datos en el tercer combo.

A mi parecer,todo va a depender de la columna N°,pero no se como hacer.
Espero que me puedas ayudar.
  #8 (permalink)  
Antiguo 12/09/2010, 17:51
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: Ayuda_Formulario_PHP

Ahora si pinta mejor la cosa, veeess, con todo el chorro de código no te estaba apoyando bien .. ups!

Bien, entonces necesitas hacer una seleccion en terminos de lo que seleccionas, la verdad lo veo cañon, porque tienes todo en la misma tabla, eso quiere decir que para cada selección necesitas saber los campos que vas a mostrar con consultas especificas..

Para evitar hacer todo se me ocurren dos cosas, primero que dividas tu tabla en opciones especificas de acuerdo a lo que necesitas (asi como me lo explicaste) o dos que crees una tabla auxiliar que relacione, pondrias en un atributo el servicio y en el otro separado por comas o como se te hicera más comodo, los campos inclusive con numeros de las columnas que le corresponde mostrar..

espero haberme explicado

saludos!!
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #9 (permalink)  
Antiguo 13/09/2010, 12:38
 
Fecha de Ingreso: diciembre-2009
Mensajes: 82
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Ayuda_Formulario_PHP

Hola silvanha,gracias por estarme ayudando en esta pequeña incertidumbre,con respecto a tu ultima respuesta,te adjunto las capturas de pantalla de la tabla q he creado en mi base de datos,asi es como he especificado cada una de las opciones mmmmmmm,no se si estara bien de esa manera

Las capturas de imagen las he subido a Image-Shared, ya que no se si aqui se pueden agregar imagenes xd.Aqui van las url,estan en orden ok.

Código:
http://www.image-share.com/ijpg-356-100.html
http://www.image-share.com/ijpg-356-101.html
http://www.image-share.com/ijpg-356-102.html
http://www.image-share.com/ijpg-356-103.html
http://www.image-share.com/ijpg-356-104.html
http://www.image-share.com/ijpg-356-105.html
Ojala que este bien asi,para ver si me sigues apoyando.
  #10 (permalink)  
Antiguo 15/09/2010, 09:31
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: Ayuda_Formulario_PHP

lamento la demora, andaba fuera de casa.. :D

veamos.. ya vi tus capturas, y lo dicho tienes todo en una tabla.. si me explique bien en lo de arriba, intenta hacerlo así.. yo creo que te puede funcionar, solo sería cosa de masticar bien como hacer esa auxiliar.. (creo que es la mejor opción)..
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #11 (permalink)  
Antiguo 15/09/2010, 18:44
 
Fecha de Ingreso: diciembre-2009
Mensajes: 82
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Ayuda_Formulario_PHP

No problem silvanha,he estado intentando hacer usando esa tabla y agregando algo en el codigo que te puse la vez pasada, pero ahora,me sale el sgte error
Código:
Unknown column 'undefined' in 'where clause'
cuando selecciono algo en el primer combo. Es decir,cuando entro a la pagina me salen los tres combos,de los cuales,el primero me sale con los datos q quiero,los otros dos me salen vacios,cuando selecciono una opcion en el primer combo,el segundo combo se me borra y me arroja el error que te mencioné abuuu.

A cotinuacion te pongo el codigo en el cual he ido agregando algunas cositas ok.

Formulario:
Código:
<tr cellspacing="0" class="ewTable">
                <form action="#" method="post" onsubmit="return buscarcliente()">
                <td width="130" class="ewTableHeader">Tipo : </td>
                <td colspan="3"><select  id="tiposervicio" onchange='mostrar_descripcion()' name="servicio">                
                    <?php foreach($array_movimientotipo as $a) :?><option  value="<?php echo $a['id']?>"><?php echo $a['nombre'] ?></option><?php endforeach;?>
                    </select>
                </td>
                </form>
            </tr>
            
            <!--<tr>
                <td class="ewTableHeader">Campo 1 : </td>
                <td colspan="3"><select  id="area" onchange='mostrar_conceptos()' name="concepto">                
                    <?php foreach($array_categoria as $a) :?><option  value="<?php echo $a['id']?>"><?php echo $a['nombre'] ?></option><?php endforeach;?>
                    </select>
                </td>
            </tr>-->
            <tr>
                <td class="ewTableHeader">Sub-Tipo : </td>
                <td colspan="3"><select  id="movimiento"  name="movimiento">                
                    <?php foreach($array_movimientotipo1 as $a) :?><option  value="<?php echo $a['id']?>"><?php echo $a['nombre'] ?></option><?php endforeach;?>}
                    </select>
                </td>
            </tr>
Function mostrar_descripcion():(javascript)
Código:
function mostrar_descripcion()
{
	campo1=$("#campo1").attr("value");
	$.ajax({ type: "GET", url: "funciones/operacion/mostrar_descripcion.php?campo1="+campo1,
	data: null,	  success: function(data){ 
	document.getElementById("movimiento").parentNode.innerHTML=data;
	//calcularmontos_concepto()
	}	});
}
mostrar_descripcion.php:
Código:
<?php	session_start();
include "../../movimientotipo.php"; //clase movimientotipo
$o_movimientotipo = new movimientotipo();  //creamos el objeto movimientotipo

if(conexion::is_administrador()==1){ 
$o_movimientotipo->setFiliacion($_GET['campo1']);
}
else {
$o_movimientotipo->setFiliacion($_SESSION['ssrol']); }

$o_movimientotipo->cargar_combo_primera_descripcion();
$array_movimientotipo=$o_movimientotipo->arrayconsulta();	?>

<select id="movimiento"  onChange="mostrar_detalle_servicios()" name="movimiento">
<?php if(count($array_movimientotipo)>0) { ?>
<?php foreach($array_movimientotipo as $a) :?><option  value="<?php echo $a['id']?>"><?php echo $a['nombre'] ?></option><?php endforeach; ?> 
<?php } ?>
</select>
function mostrar_detalle_servicios() (javascript)
Código:
function mostrar_detalle_servicios()
{
	
	campo2=$("#campo2").attr("value");
	$.ajax({ type: "GET", url: "funciones/operacion/mostrar_detalle_servicios.php?campo2="+campo2,
	data: null,	  success: function(data){ 
	document.getElementById("detalle").parentNode.innerHTML=data;
	//calcularmontos_concepto()
	}	});
}
mostrar_detalle_servicios.php
Código:
<?php	session_start();
include "../../movimientotipo.php"; //clase movimientotipo
$o_movimientotipo = new movimientotipo();  //creamos el objeto movimientotipo

if(conexion::is_administrador()==1){ 
$o_movimientotipo->setFiliacion($_GET['campo2']);
}
else {
$o_movimientotipo->setFiliacion($_SESSION['ssrol']); }

$o_movimientotipo->cargar_combo_segunda_descripcion();
$array_movimientotipo=$o_movimientotipo->arrayconsulta();	?>
<select id="detalle" name="detalle">
<?php if(count($array_movimientotipo)>0) { ?>
<?php foreach($array_movimientotipo as $a) :?><option  value="<?php echo $a['id']?>"><?php echo $a['nombre'] ?></option><?php endforeach; ?> 
<?php } ?>
</select>
Por ultimo,mi clase movimientotipo.php,en la cual se encuentran las funciones en las cuales hago la consulta correspondiente.En este caso,la consulta que me arroja el error que te mencione antes se encuentra en la funcion cargar_combo_primera_descripcion():
Código:
<?php
	require_once("conexion.php");

class movimientotipo
{
	private $id;
	private $nombre;
	private $filiacion;
	private $devolucion;
	private $observacion;
	private $tipo;
	
	public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getNombre() {
        return $this->nombre;
    }

    public function setNombre($nombre) {
        $this->nombre = $nombre;
    }

    public function getFiliacion() {
        return $this->filiacion;
    }

    public function setFiliacion($filiacion) {
        $this->filiacion = $filiacion;
    }
	
	public function getDevolucion() {
		return $this->devolucion;
	}
	
	public function setDevolucion($devolucion) {
		$this->devolucion=$devolucion;
	}
	
	public function getObservacion() {
		return $this->observacion;
	}
	
	public function setObservacion($observacion) {
		$this->observacion=$observacion;
	}
	
	public function getTipo() {
		return $this->tipo;
	}
	
	public function setTipo($tipo) {
		$this->tipo=$tipo;
	}
	
	public function movimientotipo(){
		$v= array(0,"","","","","");
		$numargs = func_num_args();
		if($numargs)
		{
			for ($i=0; $i<$numargs; $i++) :
				$v[$i]=func_get_arg($i);
			endfor;
		}
		$this->id=$v[0];
		$this->nombre=$v[1];
        $this->filiacion=$v[2];
		$this->devolucion=$v[3];
		$this->observacion=$v[4];
		$this->tipo=$v[5];
    }
	
	public function crear(){
		conexion::getInstance()->consulta("insert into movimiento_tipo (id,nombre,filiacion,devolucion,observacion,tipo)
        values ($this->id,$this->nombre,$this->filiacion,$this->observacion,$this->tipo)");
	}

	public function listar(){
		conexion::getInstance()->consulta("select id,nombre,filiacion,devolucion,observacion,tipo
        from movimiento_tipo");
	}
public function cargar_combo_movimientotipo(){
		conexion::getInstance()->consulta("select id,nombre from movimiento_tipo where nombre = 'Servicios' or nombre = 'Administrativos' or nombre = 'Gastos de Representacion' or nombre = 'Bancos' or nombre = 'Planilla' or nombre = 'Impuestos'");
		//conexion::getInstance()->consulta("SELECT id,nombre FROM `movimiento_tipo` WHERE filiacion IS NULL");
	}
	
	public function cargar_combo_primera_descripcion()
	{
		conexion::getInstance()->consulta("select d2.id,d2.nombre from movimiento_tipo d1 INNER JOIN movimiento_tipo d2 ON d1.id=d2.filiacion where d2.filiacion = $this->filiacion");//esta es mi consulta q te digo
		
	}

	public function cargar_combo_segunda_descripcion()
	{
		conexion::getInstance()->consulta("select id,nombre from movimiento_tipo");//consulta de prueba nada mas
	}
	
	public function buscar(){
		conexion::getInstance()->consulta("select * from movimiento_tipo
        where id = $this->id  ");
		$array=$this->arrayconsulta();
		if(count($array >0)){
			foreach($array as $v):
				$this->id=$v[0];
				$this->nombre=$v[1];
				$this->filiacion=$v[2];
				$this->devolucion=$v[3];
				$this->observacion=$v[4];
				$this->tipo=$v[5];
				
			endforeach;
		}
	}

	public function actualizar_nombre(){
		$sql = "update movimiento_tipo  set nombre=$this->nombre
                where id = $this->id ";
		conexion::getInstance()->consulta($sql);
	}

public function arrayconsulta(){	return conexion::getInstance()->arrayconsulta();	}

	public function numregistros(){		return conexion::getInstance()->numreg();	}

	public function listarnombres(){	return conexion::getInstance()->listarnombres();	}

	public function numerocampos(){		return conexion::getInstance()->numerocampos();		}

	public function cerrarconexion(){	return conexion::getInstance()->cerrar();}
	
}
?>
¿Porque me saldra ese error?? Espero que me sigas ayudando como lo has estado haciendo hasta el momento.Gracias
  #12 (permalink)  
Antiguo 15/09/2010, 20:01
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: Ayuda_Formulario_PHP

ya le voy entendiendo a tu tabla.. ese error te lo esta marcando en alguna consulta.. al parecer seleccionas algo que no "existe"..

checa este topic.. creo que tiene lo que necesitas..

intentalo y me dices..
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #13 (permalink)  
Antiguo 16/09/2010, 03:04
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Ayuda_Formulario_PHP

Hola
bueno, viendo el post más reciente, ese error es porque no existe una columna en la tabla llamada undefined

así, la función jquery? (imagino) llamada mostrar_descripcion no esta asignando un valor correcto a la variable campo1, pues busca un campo llamado campo1 en el formulario, pero yo no lo veo..... o falta el attr en el select? o esta incorrecto el #campo1??

bueno, solucionando eso, debería funcionar la consulta
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #14 (permalink)  
Antiguo 16/09/2010, 18:18
 
Fecha de Ingreso: diciembre-2009
Mensajes: 82
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Ayuda_Formulario_PHP

Muchas gracias silvanha y mortiprogramador por la ayuda prestada. A ti silvanha, gracias por haberme mandado ese topic,por este pude entender un poco más la consulta,la cual la modifique y mejoré por los ejemplos que decian en tu topic

A ti mortiprogramador, tambien te doy gracias ya que era verdad lo que dijiste, me faltaba cambiar el nombre del "id" de mi select(tiposervicio) por el nombre de "campo1".De esa manera funcionó mi consulta y me mostró las opciones que deberian mostrarme. Lo mismo era para el tercer combo,cambiar el nombre del "id",hacer la consulta parecida y listo.Ya me funcionan los tres combos.

Pero,ahora,les pido de nuevo su ayuda. Como les mencioné ya me aparecen las opciones q deberian mostrarme en los combos al momento de seleccionar.En lo que quiero q me ayuden,ustedes dos o otras personas de este gran foro es en lo sgte:
Ustedes saben que tengo tres combos,lo q quiero es que cuando yo seleccione en el primer combo una opcion,por ejemplo,Servicios,en el segundo combo me aparezcan las opciones de Servicios Públicos,Servicios Profesionales,Publicidad(ya me sale esto,pero lo escribo para que me puedan entender ) y ademas, automaticamente,en el tercer combo me aparezcan las opciones que le corresponden,en este caso de ejemplo, a Servicios Publicos (me aparece primero en el segundo combo),las cuales son: Luz,Agua y Alcantarillado,Cable,Internet,Telefonía Fija,Telefonía Móvil,Monitoreo de Alarma.

Y asi sucesivamente debe funcionar con las demas opciones de mi tabla.

¿Cómo haria eso?? Espero me haya dejado entender.

A continuacion les dejo las url's de las capturas de imagen que hize de mi tabla,en la cual se encuentran los datos.
Código:
http://www.image-share.com/ijpg-356-100.html
http://www.image-share.com/ijpg-356-101.html
http://www.image-share.com/ijpg-356-102.html
http://www.image-share.com/ijpg-356-103.html
http://www.image-share.com/ijpg-356-104.html
http://www.image-share.com/ijpg-356-105.html
Además,les vuelvo a adjuntar el codigo,el cual ya me muestras las opciones correspondientes para cada combo:
Formulario:
Código:
<tr cellspacing="0" class="ewTable">
				<form action="#" method="post" onsubmit="return buscarcliente()">
				<td width="130" class="ewTableHeader">Tipo : </td>
				<td colspan="3"><select  id="movimiento1" onchange='mostrar_descripcion()' name="servicio">				
					<?php foreach($array_movimientotipo as $a) :?><option  value="<?php echo $a['id']?>"><?php echo $a['nombre'] ?></option><?php endforeach;?>
					</select>
				</td>
				</form>
			</tr>
			
			<!--<tr>
				<td class="ewTableHeader">Campo 1 : </td>
				<td colspan="3"><select  id="area" onchange='mostrar_conceptos()' name="concepto">				
					<?php foreach($array_categoria as $a) :?><option  value="<?php echo $a['id']?>"><?php echo $a['nombre'] ?></option><?php endforeach;?>
					</select>
				</td>
			</tr>-->
			<tr>
				<td class="ewTableHeader">Sub-Tipo : </td>
				<td colspan="3"><select  id="movimiento2" onchange='mostrar_detalle_servicios()' name="movimiento">				
					<?php foreach($array_movimientotipo1 as $a) :?><option  value="<?php echo $a['id']?>"><?php echo $a['nombre'] ?></option><?php endforeach;?>}
					</select>
				</td>
			</tr>
			<tr>
				<td class="ewTableHeader">Detalle : </td>
				<td colspan="3"><select  id="detalle" name="detalle">
					<?php foreach($array_movimientotipo2 as $a) :?><option  value="<?php echo $a['id']?>"><?php echo $a['nombre'] ?></option><?php endforeach;?>
					</select>
				</td>
			</tr>
Function mostrar_descripcion():(javascript)
Código:
function mostrar_descripcion()
{
	movimiento1=$("#movimiento1").attr("value");
	$.ajax({ type: "GET", url: "funciones/operacion/mostrar_descripcion.php?movimiento1="+movimiento1,
	data: null,	  success: function(data){ 
	document.getElementById("movimiento2").parentNode.innerHTML=data;
	//calcularmontos_concepto()
	}	});
}
mostrar_descripcion.php:
Código:
<?php	session_start();
include "../../movimientotipo.php"; //clase movimientotipo
$o_movimientotipo = new movimientotipo();  //creamos el objeto movimientotipo

if(conexion::is_administrador()==1){ 
$o_movimientotipo->setFiliacion($_GET['movimiento1']);
}
else {
$o_movimientotipo->setFiliacion($_SESSION['ssrol']); }

$o_movimientotipo->cargar_combo_primera_descripcion();
$array_movimientotipo=$o_movimientotipo->arrayconsulta();	?>

<select id="movimiento2" onchange='mostrar_detalle_servicios()' name="movimiento">
<?php if(count($array_movimientotipo)>0) { ?>
<?php foreach($array_movimientotipo as $a) :?><option  value="<?php echo $a['id']?>"><?php echo $a['nombre'] ?></option><?php endforeach; ?> 
<?php } ?>
</select>
function mostrar_detalle_servicios() (javascript)
Código:
function mostrar_detalle_servicios()
{
	
	movimiento2=$("#movimiento2").attr("value");
	$.ajax({ type: "GET", url: "funciones/operacion/mostrar_detalle_servicios.php?movimiento2="+movimiento2,
	data: null,	  success: function(data){ 
	document.getElementById("detalle").parentNode.innerHTML=data;
	//calcularmontos_concepto()
	}	});
}
mostrar_detalle_servicios.php
Código:
<?php	session_start();
include "../../movimientotipo.php"; //clase movimientotipo
$o_movimientotipo = new movimientotipo();  //creamos el objeto movimientotipo

if(conexion::is_administrador()==1){ 
$o_movimientotipo->setFiliacion($_GET['movimiento2']);
}
else {
$o_movimientotipo->setFiliacion($_SESSION['ssrol']); }

$o_movimientotipo->cargar_combo_segunda_descripcion();
$array_movimientotipo=$o_movimientotipo->arrayconsulta();	?>
<select id="detalle" name="detalle">
<?php if(count($array_movimientotipo)>0) { ?>
<?php foreach($array_movimientotipo as $a) :?><option  value="<?php echo $a['id']?>"><?php echo $a['nombre'] ?></option><?php endforeach; ?> 
<?php } ?>
</select>
Por ultimo,mi clase movimientotipo.php,en la cual se encuentran las funciones en las cuales hago la consulta correspondiente.
Código:
<?php
	require_once("conexion.php");

class movimientotipo
{
	private $id;
	private $nombre;
	private $filiacion;
	private $devolucion;
	private $observacion;
	private $tipo;
	
	public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getNombre() {
        return $this->nombre;
    }

    public function setNombre($nombre) {
        $this->nombre = $nombre;
    }

    public function getFiliacion() {
        return $this->filiacion;
    }

    public function setFiliacion($filiacion) {
        $this->filiacion = $filiacion;
    }
	
	public function getDevolucion() {
		return $this->devolucion;
	}
	
	public function setDevolucion($devolucion) {
		$this->devolucion=$devolucion;
	}
	
	public function getObservacion() {
		return $this->observacion;
	}
	
	public function setObservacion($observacion) {
		$this->observacion=$observacion;
	}
	
	public function getTipo() {
		return $this->tipo;
	}
	
	public function setTipo($tipo) {
		$this->tipo=$tipo;
	}
	
	public function movimientotipo(){
		$v= array(0,"","","","","");
		$numargs = func_num_args();
		if($numargs)
		{
			for ($i=0; $i<$numargs; $i++) :
				$v[$i]=func_get_arg($i);
			endfor;
		}
		$this->id=$v[0];
		$this->nombre=$v[1];
        $this->filiacion=$v[2];
		$this->devolucion=$v[3];
		$this->observacion=$v[4];
		$this->tipo=$v[5];
    }
	
	public function crear(){
		conexion::getInstance()->consulta("insert into movimiento_tipo (id,nombre,filiacion,devolucion,observacion,tipo)
        values ($this->id,$this->nombre,$this->filiacion,$this->observacion,$this->tipo)");
	}

	public function listar(){
		conexion::getInstance()->consulta("select id,nombre,filiacion,devolucion,observacion,tipo
        from movimiento_tipo");
	}

	public function cargar_combo_movimientotipo(){
		conexion::getInstance()->consulta("select id,nombre from movimiento_tipo where nombre = 'Servicios' or nombre = 'Administrativos' or nombre = 'Gastos de Representacion' or nombre = 'Bancos' or nombre = 'Planilla' or nombre = 'Impuestos'");
		//conexion::getInstance()->consulta("SELECT id,nombre FROM `movimiento_tipo` WHERE filiacion IS NULL");
	}
	
	public function cargar_combo_primera_descripcion()
	{
		$sql="select d2.id,d2.nombre from movimiento_tipo d1 INNER JOIN movimiento_tipo d2 ON d1.id=d2.filiacion where d2.filiacion = $this->filiacion";
		conexion::getInstance()->consulta($sql);
	}
	
	public function cargar_combo_segunda_descripcion()
	{
		$sql="select d2.id,d2.nombre from movimiento_tipo d1 INNER JOIN movimiento_tipo d2 ON d1.id=d2.filiacion where d2.filiacion = $this->filiacion";
		conexion::getInstance()->consulta($sql);
	}
	
	public function buscar(){
		conexion::getInstance()->consulta("select * from movimiento_tipo
        where id = $this->id  ");
		$array=$this->arrayconsulta();
		if(count($array >0)){
			foreach($array as $v):
				$this->id=$v[0];
				$this->nombre=$v[1];
				$this->filiacion=$v[2];
				$this->devolucion=$v[3];
				$this->observacion=$v[4];
				$this->tipo=$v[5];
				
			endforeach;
		}
	}

	public function actualizar_nombre(){
		$sql = "update movimiento_tipo  set nombre=$this->nombre
                where id = $this->id ";
		conexion::getInstance()->consulta($sql);
	}

public function arrayconsulta(){	return conexion::getInstance()->arrayconsulta();	}

	public function numregistros(){		return conexion::getInstance()->numreg();	}

	public function listarnombres(){	return conexion::getInstance()->listarnombres();	}

	public function numerocampos(){		return conexion::getInstance()->numerocampos();		}

	public function cerrarconexion(){	return conexion::getInstance()->cerrar();}
	
}
?>
  #15 (permalink)  
Antiguo 16/09/2010, 19:24
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: Ayuda_Formulario_PHP

Si te estoy entendiendo bien, necesitas aparecer los combos con respecto al número de servicios que tienes.. en ese caso creo que necesitas hacer una consulta para cada uno

Creo que si ya tienes los primeros tres.. necesitas ver cuantas más opciones puedes formular, que en teoría sería exactamente lo mismo..

Si ya viste que son varias, te recomiendo que entonces, crees funciones más genéricas.. para que solo seleccionando el primero salgan los demás.. creo que es una cuestión de inventarte tu propio algoritmo de selección ..
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #16 (permalink)  
Antiguo 16/09/2010, 20:19
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Ayuda_Formulario_PHP

bueno , de nada, en cuanto a lo que dices, si entiendo bien,
pues en el segundo combo puedes, una vez se haga el proceso (complete)
que haga la carga del tercero, intenta eso y comentas
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #17 (permalink)  
Antiguo 17/11/2010, 09:39
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Ayuda_Formulario_PHP

tengo un problema con los combos dependientes en un formulario y quisiera q me ayudaran.. lo q pasa es tengo cajas de textos donde indico nombte apellido y otros.. y cuando seleciono los combobox depedientes me borra lo de las cajkas de texto.. q pasara alli..?? ayuda
  #18 (permalink)  
Antiguo 17/11/2010, 19:10
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Ayuda_Formulario_PHP

Cita:
Iniciado por samba02092010 Ver Mensaje
tengo un problema con los combos dependientes en un formulario y quisiera q me ayudaran.. lo q pasa es tengo cajas de textos donde indico nombte apellido y otros.. y cuando seleciono los combobox depedientes me borra lo de las cajkas de texto.. q pasara alli..?? ayuda
y de casualidad los combos en el onchange tienen un location o submit?
si es así, entonces lo que hace falta es capturar los datos
de los nombres, apellidos, etc ya sea por get o post, y
asignarle eso a los campos en su propiedad value

la primera vez no mostrara nada (cuando recien se ejecuta la página)
pues al inicio las variables get o post de esos campos no
tienen valor, pero luego, cuando cambie algún combo
ya lo tendrán
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Etiquetas: Ninguno
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 12:20.