Ver Mensaje Individual
  #4 (permalink)  
Antiguo 18/10/2012, 13:36
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: selects anidados recargando la pagina

Entiendo que seas nuevo, y primero tienes que entender que PHP != HTML, PHP es un lenguaje que corre en el servidor y este genera una salida, es decir el diagrama de proceso es:

- Envio de datos por parte del cliente al servidor
- Servidor detecta que es un script PHP
- Invoca al parser de PHP, ejecuta el script y este devuelve algo
- Servidor envía la respuesta al cliente

Ahora la respuesta que PHP genera puede ser lo que sea, texto, HTML, inclusive contenido binario como imágenes, o vídeos.

Entendiendo eso, puedes ver como para atacar tu problema tienes que hacer dos partes por separado, la primera es tu formulario HTML con Javascript, este debe de ser algo muy independiente a lo del servidor.

Primero estudia y entiende como sirve HTML, como sirven los formularios que es lo que envían al servidor (pares de llaves nombre/valor). Luego ve como se diseñan los selects, con tags <select> cada uno necesita un name que es valor que el servidor recibe.

Ahora integra el Javascript, para accesar a un elemento de tu DOM (HTML) cada select necesita un id, con javascript capturas el evento onChange, y usando AJAX, haces una petición HTTP al servidor (aqui es donde entra PHP), el servidor te contesta con algo, y usas javascript para inyectar la respuesta de forma dinámica al select de regreso.

Lo más común y sencillo creo yo es interactuar con JSON, es decir, el servidor te contesta en un JSON que puedes manipular de forma nativa desde Javascript, puedes usar jQuery creo es lo más sencillo para interactuar, te dejo un ejemplo muy simple para que veas como funciona:
Código HTML:
Ver original
  1.     <head>
  2.         <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
  3.     </head>
  4.     <body>
  5.         <form>
  6.             <select name="select1" id="select1"></select>
  7.             <input type="button" name="fillOptions" id="fillOptions" value="Obtener Opciones">
  8.         </form>
  9.        
  10.         <script type="text/javascript">
  11.             $(document).ready(function() {
  12.                 $('#fillOptions').click(function() { // Aqui usamos el mismo ID del boton
  13.                     $.getJSON('getjson.php', function(json) {
  14.                         $.each(json, function(key, entry) {
  15.                             $('#select1').append($("<option></option>").attr('value', entry.value).text(entry.text));
  16.                         });
  17.                     });
  18.                 });
  19.             });
  20.         </script>
  21.     </body>
  22. </html>

Ahora eso es puro HTML / Javascript, ahora necesitas un archivo PHP (getjson.php) que es lo que el servidor va a responder (en este caso un archivo JSON) un ejemplo:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $options = array(
  4.     array(
  5.         'value' => 'valor1',
  6.         'text' => 'El texto del valor1'
  7.     ),
  8.     array(
  9.         'value' => 'valor2',
  10.         'text' => 'El texto del valor2'
  11.     ),
  12.     array(
  13.         'value' => 'valor3',
  14.         'text' => 'El texto del valor3'
  15.     ),
  16.     array(
  17.         'value' => 'valor4',
  18.         'text' => 'El texto del valor4'
  19.     ),
  20.     array(
  21.         'value' => 'valor5',
  22.         'text' => 'El texto del valor5'
  23.     ),
  24. );
  25.  
  26. header('Content-type: text/json');
  27. echo json_encode($options);

Si ves ese archivo PHP solamente contesta un array JSON que es el que manipulas desde Javascript para llenar el select.

Con este pequeño ejemplo puedes ampliarlo para hacer selects dependientes, solo es enviar el valor del select a tu archivo PHP, y regresar otro JSON con las opciones necesarias para llenar el select que necesites, revisa la documentación de la librería jQuery para envío de valores: $.getJSON.

Saludos.