Foros del Web » Programando para Internet » PHP »

Por favor ayuda

Estas en el tema de Por favor ayuda en el foro de PHP en Foros del Web. Hola buenas, hace un tiempo que ya estoy sin poder avanzar lo que estoy realizando ya que no logro solucionar mi problema con listbox desplegables. ...
  #1 (permalink)  
Antiguo 24/12/2009, 08:02
 
Fecha de Ingreso: septiembre-2006
Mensajes: 97
Antigüedad: 17 años, 7 meses
Puntos: 1
Por favor ayuda

Hola buenas, hace un tiempo que ya estoy sin poder avanzar lo que estoy realizando ya que no logro solucionar mi problema con listbox desplegables.

Se trata de un listbox padre y un listbox hijo.
Cuando despliego el listbox padre y selecciono un valor, la pagina se carga denuevo y genera el codigo id del padre y lo lanzo a un textbox.

Pero no logro realizarlo con el listbox hijo, estoy haciendolo de una u otra forma, pero no entiendo qué pasa.
Ya lo realicé con el padre pero no puedo con el hijo, espero alguien pueda ayudarme ya que estoy sin poder avanzar y paso horas tratando de lograrlo, pero no puedo :(

Código PHP:

<?php
// datos de conexión a la BD.
$servidor ="localhost"// host
$usuario ="root";
$clave ="";
$basedatos ="inventario"// Indicar una Base de datos.





// Conexión a la BD
$conexion mysql_connect($servidor$usuario$clave) or die(mysql_error());
mysql_select_db($basedatos$conexion) or die(mysql_error());


// Obtener el $id_padre del envío a sí mismo del formulario ...

if (isset($_POST['id_equipo']) && ($_POST['id_interno']) )
{
$id_equipo  =$_POST['id_equipo'];
$id_interno $_POST['id_interno'];
}


// Inicio Formulario .. PHP_SELF enviamos a sí mismo (a este script).
echo "<form action='".$_SERVER['PHP_SELF']."' method='POST'>\n\n";


// Formar Selec "Padre".
echo "Tipo de Equipo :<select name='id_equipo' onChange='this.form.submit()'>\n";
echo 
"<option value=''> ------Seleccione------ </option>\n";

$SQLconsulta_equipo="SELECT * FROM equipos";
$consulta_equipo mysql_query($SQLconsulta_equipo,$conexion) or die(mysql_error());

while (
$registro_equipo=mysql_fetch_assoc($consulta_equipo)){
// Se mira si el ID del registro es el mismo q el $id_padre q recibimos si hemos cambiado el select hijo.
// Se selecciona en consecuencia (selected) la opción elegida.
$selected= ($id_equipo == $registro_equipo['id_equipo']) ? 'selected="selected"' '';
echo 
"<option value='".$registro_equipo['id_equipo']."' $selected>".$registro_equipo['nom_equipo']."</option>\n";
}
echo 
"</select>\n\n";

mysql_free_result($consulta_equipo); // Liberar memoria usada por consulta.

// Formar Select "Hijo"


echo "Código de Equipo : <select name='id_interno' onChange='this.form.submit()' >\n";

// Si $id_padre no tiene valor (caso de que no se ha seleccionado ningua opción del select hijo
// se muestra el mensaje de "seleccine un item" (del select padre).
if (!empty($id_equipo))
{

$SQLconsulta_interno="SELECT * FROM cod_internos WHERE id_equipo='$id_equipo'";
$consulta_interno mysql_query($SQLconsulta_interno,$conexion) or die(mysql_error());
// se mira el total de registros de la consulta .. si es 0 se muestra mensaje en el select ..
if (mysql_num_rows($consulta_interno) != 0)
{
while (
$registro_interno=mysql_fetch_assoc($consulta_interno))
{
$selected= ($id_interno == $registro_interno['id_interno']) ? 'selected="selected"' '';
echo 
"<option value='".$registro_interno['id_interno']."' $selected>".$registro_interno['num_equipo']."</option>\n";
}
}
else {
echo 
"<option value=''> No hay registros para este equipo</option>";
}
} else
{
echo 
"<option value=''>Código Equipo</option>";
}


mysql_free_result($consulta_hija); // Liberar memoria usada por consulta.

echo "</select>\n\n";
echo 
"</form>\n";

?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<input name='id_equipo' type='text' value='<?php printf ($id_equipo["id_equipo"]);?>'  />
                <input name='id_interno' type='text' value='<?php printf ($id_interno['id_interno']);?>'  />
</body>
</html>
  #2 (permalink)  
Antiguo 24/12/2009, 08:11
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Por favor ayuda

No entiendo porque "padre" e "hijo" si uno no depende del otro....

No entendi bien que es lo que no te anda... Queres que al seleccionar una opcion del segundo select te realice el submit, y con eso mostrar un dato en el input?
__________________
HV Studio
Diseño y desarrollo web
  #3 (permalink)  
Antiguo 24/12/2009, 08:15
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Por favor ayuda

Primera cosa rara que veo, haces echos antes del <html> ????

Segunda cosa rara: mysql_free_result($consulta_hija); pero no veo crearse $consulta_hija por ninguna parte ????

Tercero.... analiza IF por IF hasta averiguar en "donde no entra", por ejemplo despues de:

if (!empty($id_equipo)) {


Pon

echo "111111111111111111111111111";

Despues de:

if (mysql_num_rows($consulta_interno) != 0) {

Pon:

echo "222222222222222222222";



Y asi averiguas donde se "corta" indebidamente tu codigo y nos lo comunicas asi podemos mirartelo mejor, en vez de todo el codigo :P
  #4 (permalink)  
Antiguo 24/12/2009, 08:16
 
Fecha de Ingreso: septiembre-2006
Mensajes: 97
Antigüedad: 17 años, 7 meses
Puntos: 1
Respuesta: Por favor ayuda

En realidad uno si depende del otro, el segundo se carga segun lo que se ha seleccionado en el primero.

Entonces, lo que yo ya he realizado, es que cuando selecciono el primer listbox, se recargue la pagina, enviando el id del padre a un textbox, que es el que esta mas abajo....

Pero necesito realizar lo mismo, con el listbox hijo....osea, una vez que se selecciona el listbox hijo (o el segundo) cargar la pagina denuevo (eso ya se realiza), pero necesito enviar o printear el id del hijo en un textbox, tal como lo hice con el padre....
Obviamente el id va a ir variando segun el valor que se seleccione...

Aqui tengo la tabla mysql:

BASE DE DATOS PARA IMPORTAR:


-- phpMyAdmin SQL Dump
-- version 3.2.0.1
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tiempo de generación: 17-12-2009 a las 11:55:41
-- Versión del servidor: 5.1.36
-- Versión de PHP: 5.3.0

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de datos: `inventario`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `cod_internos`
--

CREATE TABLE IF NOT EXISTS `cod_internos` (
`id_interno` bigint(20) NOT NULL AUTO_INCREMENT,
`id_equipo` bigint(20) NOT NULL,
`num_equipo` varchar(255) DEFAULT NULL,
`serie_equipo` varchar(255) NOT NULL,
`capran_equipo` varchar(255) NOT NULL,
`marca_equipo` varchar(255) NOT NULL,
`prove_equipo` varchar(255) NOT NULL,
`fadq_equipo` varchar(255) NOT NULL,
`certi_equipo` varchar(255) NOT NULL,
`emp_certi` varchar(255) NOT NULL,
`estado_equipo` varchar(255) NOT NULL,
`obs_equipo` varchar(255) NOT NULL,
PRIMARY KEY (`id_interno`),
UNIQUE KEY `num_equipo` (`num_equipo`),
KEY `id_equipo` (`id_equipo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=529 ;

--
-- Volcar la base de datos para la tabla `cod_internos`
--

INSERT INTO `cod_internos` (`id_interno`, `id_equipo`, `num_equipo`, `serie_equipo`, `capran_equipo`, `marca_equipo`, `prove_equipo`, `fadq_equipo`, `certi_equipo`, `emp_certi`, `estado_equipo`, `obs_equipo`) VALUES
(502, 4, 'ki-1', 'lkjlj', 'lkj', 'lkj', 'ljlkasdlkj', 'lkjasd lk', 'j alksd lkj', 'lkjasd as kj', '', 'lk'),
(503, 1, 'ra-40', '', '', '', '', '', '', '', '', ''),
(504, 4, 'ki-2', '', '', '', '', '', '', '', '', ''),
(505, 3, 'jajaja-20', '', '', '', '', '', '', '', '', ''),
(506, 4, 'ki-3', '', '', '', '', '', '', '', '', ''),
(507, 4, 'ki-4', '', '', '', '', '', '', '', '', ''),
(508, 4, 'ki-5', '', '', '', '', '', '', '', '', ''),
(522, 5, 'ma-2', '867876', '876', '876', '876', '876', '87', '6876', '', '67'),
(523, 6, 'xi-1', '876', '876', '87', '6876', '86', '86', '68', '', '86'),
(524, 3, 'jajaja-21', '', '', '', '', '', '', '', '', ''),
(525, 3, 'jajaja-22', '', '', '', '', '', '', '', '', ''),
(526, 3, 'jajaja-23', 'jiji', 'jiji', 'ji', 'ij', 'ijij', 'ij', 'ij', 'ij', 'ij\r\n'),
(527, 4, 'ki-6', '', '', '', '', '', '', '', '', ''),
(528, 7, 'kjkjk-1', '', '', '', '', '', '', '', '', '');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `equipos`
--

CREATE TABLE IF NOT EXISTS `equipos` (
`id_equipo` bigint(20) NOT NULL,
`nom_equipo` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id_equipo`),
UNIQUE KEY `nom_equipo` (`nom_equipo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Volcar la base de datos para la tabla `equipos`
--

INSERT INTO `equipos` (`id_equipo`, `nom_equipo`) VALUES
(4, 'cuarto'),
(5, 'Maximo'),
(1, 'primero'),
(2, 'segundo'),
(7, 'septimo'),
(6, 'sexto'),
(3, 'tercero');

--
-- Filtros para las tablas descargadas (dump)
--

--
-- Filtros para la tabla `cod_internos`
--
ALTER TABLE `cod_internos`
ADD CONSTRAINT `cod_internos_ibfk_1` FOREIGN KEY (`id_equipo`) REFERENCES `equipos` (`id_equipo`);
  #5 (permalink)  
Antiguo 24/12/2009, 08:32
 
Fecha de Ingreso: septiembre-2006
Mensajes: 97
Antigüedad: 17 años, 7 meses
Puntos: 1
Respuesta: Por favor ayuda

Eso de poner echo antes del html, mientras tanto esta asi, en este post, porque el php lo tengo dentro del html, solo que aqui copié la parte especifica que no me funciona, la parte del listbox padre si me funciona todo perfecto, la del hijo no me funciona, lo que pasa es que el hijo se selecciona correctamente y se carga denuevo la pagina cuando selecciono el valor del listbox hijo, pero no me genera el valor como en el padre....

Chequeo...
  #6 (permalink)  
Antiguo 24/12/2009, 08:36
 
Fecha de Ingreso: septiembre-2006
Mensajes: 97
Antigüedad: 17 años, 7 meses
Puntos: 1
Respuesta: Por favor ayuda

Cuando coloco esos echo "22222" , no los toma.....
Pero esos if los toma bien porque se despliegan correctamente los valores en el listbox hijo.
  #7 (permalink)  
Antiguo 24/12/2009, 08:38
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Por favor ayuda

O los estas poniendo mal o no se esta cumpliendo la condicion, es simple...
__________________
HV Studio
Diseño y desarrollo web
  #8 (permalink)  
Antiguo 24/12/2009, 08:40
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Por favor ayuda

Cita:
Iniciado por Rafagedon Ver Mensaje
Cuando coloco esos echo "22222" , no los toma.....
Pero esos if los toma bien porque se despliegan correctamente los valores en el listbox hijo.

Miralo mejor al VER CODIGO FUENTE DE LA PAGINA, ahi si te deberian salir. Mi post no era para que hicieras eso simplemente, sino una tecnica para que lo uses siempre, y veas cual es la linea exacta donde esta surgiendo el problemilla, saludos
  #9 (permalink)  
Antiguo 24/12/2009, 09:14
 
Fecha de Ingreso: septiembre-2006
Mensajes: 97
Antigüedad: 17 años, 7 meses
Puntos: 1
Respuesta: Por favor ayuda

Bueno, ya arreglé el tema de que no habias visto crearse la consulta hija....
claro, era consulta_interno (no consulta_hija) XD....
por otro lado, viendo el codigo fuente desde el navegador, ahi pude ver que si entra al if el echo "222222222222".....

Por otro lado los valores los rescata bien en los value desde la base de datos....
ahora lo unico que solo me falta hacer es imprimir el valor en el textbox tal como lo hago en el otro y estoy listo, pero en eso estoy.

Mi codigo quedó asi...

Código PHP:


         <?php
// datos de conexión a la BD.
$servidor ="localhost"// host
$usuario ="root";
$clave ="";
$basedatos ="inventario"// Indicar una Base de datos.





// Conexión a la BD
    
$conexion mysql_connect($servidor$usuario$clave) or die(mysql_error());
mysql_select_db($basedatos$conexion) or die(mysql_error());


// Obtener el $id_padre del envío a sí mismo del formulario ...

if (isset($_POST['id_equipo']) && ($_POST['id_interno']) )
{
$id_equipo  =$_POST['id_equipo'];
$registro_interno=$_POST['id_interno'];
}


// Inicio Formulario .. PHP_SELF enviamos a sí mismo (a este script).
echo "<form action='".$_SERVER['PHP_SELF']."' method='POST'>\n\n";


// Formar Selec "Padre".
echo "Tipo de Equipo :<select name='id_equipo' onChange='this.form.submit()'>\n";
echo 
"<option value=''> ------Seleccione------ </option>\n";

$SQLconsulta_equipo="SELECT * FROM equipos";
$consulta_equipo mysql_query($SQLconsulta_equipo,$conexion) or die(mysql_error());

while (
$registro_equipo=mysql_fetch_assoc($consulta_equipo)){
// Se mira si el ID del registro es el mismo q el $id_padre q recibimos si hemos cambiado el select hijo.
// Se selecciona en consecuencia (selected) la opción elegida.
$selected= ($id_equipo == $registro_equipo['id_equipo']) ? 'selected="selected"' '';
echo 
"<option value='".$registro_equipo['id_equipo']."' $selected>".$registro_equipo['nom_equipo']."</option>\n";
}
echo 
"</select>\n\n";

mysql_free_result($consulta_equipo); // Liberar memoria usada por consulta.

// Formar Select "Hijo"


echo "Código de Equipo : <select name='id_interno' onChange='this.form.submit()' >\n";

// Si $id_padre no tiene valor (caso de que no se ha seleccionado ningua opción del select hijo
// se muestra el mensaje de "seleccine un item" (del select padre).
if (!empty($id_equipo))
{
$SQLconsulta_interno="SELECT * FROM cod_internos WHERE id_equipo='$id_equipo'";
$consulta_interno mysql_query($SQLconsulta_interno,$conexion) or die(mysql_error());
// se mira el total de registros de la consulta .. si es 0 se muestra mensaje en el select ..
if (mysql_num_rows($consulta_interno) != 0)
{
while (
$registro_interno=mysql_fetch_assoc($consulta_interno))
{
$selected= ($id_interno == $registro_interno['id_interno']) ? 'selected="selected"' '';
echo 
"<option value='".$registro_interno['id_interno']."' $selected>".$registro_interno['num_equipo']."</option>\n";
}
}
else {
echo 
"<option value=''> No hay registros para este equipo</option>";
}
} else
{
echo 
"<option value=''>Código Equipo</option>";
}



mysql_free_result($consulta_interno); // Liberar memoria usada por consulta.

echo "</select>\n\n";
echo 
"</form>\n";


?>

<html>

<input name='id_equip' type='text' value='<?php echo ($id_equipo["id_equipo"]);?>'  />
            <input name='id_intern' type='text' value='<?php echo ($registro_interno['id_interno']);?>'  />

</html>
  #10 (permalink)  
Antiguo 24/12/2009, 09:16
 
Fecha de Ingreso: septiembre-2006
Mensajes: 97
Antigüedad: 17 años, 7 meses
Puntos: 1
Respuesta: Por favor ayuda

El problema que pasa es que no imprime la variable en el value....

Cuando veo el codigo fuente desde el navegador veo esto....

Código PHP:
<input name='id_equip' type='text' value='4'  /> ESTE ES EL PADRE
<input name='id_intern' type='text' value=''  />  ESTE ES EL HIJO 

osea que al hijo no me llega el valor.....
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

SíEste tema le ha gustado a 1 personas




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