Foros del Web » Programando para Internet » PHP »

recoger datos de un select option

Estas en el tema de recoger datos de un select option en el foro de PHP en Foros del Web. Pues eso que como recojo los datos de un select option???? OJO TIENE TRUCO LO QUE TENGO ES ESTO: formulario llamada a funcion que me ...
  #1 (permalink)  
Antiguo 11/05/2005, 10:10
 
Fecha de Ingreso: abril-2005
Mensajes: 171
Antigüedad: 19 años
Puntos: 0
recoger datos de un select option

Pues eso que como recojo los datos de un select option????

OJO TIENE TRUCO LO QUE TENGO ES ESTO:

formulario
llamada a funcion que me rellena el select option
boton
fin formulario

El truco esta en que la funcion se encarga de poner el select option con los datos que hay en la BD.

GRACIAS
  #2 (permalink)  
Antiguo 11/05/2005, 15:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno .. sería ideal que pongas el código que usas .. Pero en principio .. se genere ese <select> de HTML desde PHP integro (generando ese código HTML) .. o vía javascript dinámicamente (en el cliente) u otros métodos (Remote Scripting?.. Ajax? ..) .. usaras un formulario con su <form .. .> y su action que apuntará a tu script PHP de proceso (sea si mismo u otro) .. la variable que recibirá PHP será la que definas en tu:

<select name="nombre_del_select">

.. Obtendras la opción que selecciones con el valor que su "value":

<option value="nose">nose</option>

Y por el método que definas en tu formulario en su "method"

Un saludo,
  #3 (permalink)  
Antiguo 12/05/2005, 04:25
 
Fecha de Ingreso: abril-2005
Mensajes: 171
Antigüedad: 19 años
Puntos: 0
Vale hay va mi codigo porque recojo el valor y me da un error.

Código PHP:
function select_option($n){
/*dependiendo del valor de n los rellena con unos datos u otros
codigo en el que comprubo si hay datos o no y algunas formas de rellenar
n==1, n==2 son iguales o similares a la forma donde estoy yo que es  la queos pongo*/
if ($n==3){ // si n=3 rellena los select option de los formularios de informe       
       
echo ("<select name=\"slct_emple[]\">");
       echo (
"<option value=\"informe\">Informe global</option>");
       
$consulta=("SELECT dni,nombre,apellidos FROM personal");
       
$resultado=mysql_query($consulta);
       while (
$datos=mysql_fetch_Array($resultado)) {
                      echo (
"<option value=\"$datos[dni]\">$datos[nombre] $datos[apellidos]</option>");
        }
              echo (
"</select>");
        }
//if valor n=3       
}//fin función select_option 
Espero que no haya borrado ninguna linea importante al ponerlo aqui.

En la pagina donde esta el formulario tengo basicamente lo puesto en en anterior post pero os lo repito aqui con codigo: :-p

Código PHP:
<form action="informe.php" method="post">
<?php
       
include ('conexion.php');
       include (
'libreria.php');[COLOR=DarkGreen]//es donde esta la funcion select option[/COLOR]
       
select_option(3);
       
mysql_close($conexion);
?>
<input type="submit" name="enviar persona" value="Continuar">
</form>
Y en la pagina tratamiento lo siguiente:

Código PHP:
<?php.....codigo
if (isset($_POST['enviar_persona'])){
    
$consulta=("SELECT f.nombre FROM funciones f, persofun pf
                WHERE  pf.dni='"
.$_POST['$datos[dni]']."'  and f.codFuncion=pf.codFuncion");
$resultado=mysql_query($consulta);
echo (
"EMPLEADO");
while (
$datos=mysql_fetch_Array($resultado)) {
    echo (
"$datos[nombre]>");
}        
?>
El error que me muestra es el siguiente:

EMPLEADO //es lo del echo que he puesto yo
PHP Notice: Undefined index: $datos[dni] in C:\Informe.php on line 8 //es la pagina de tratamiento


Mi duda es si recojo bien el valor del select option (q creo q si ) q pasa???
y si lo recojo mal pues como se recoje teniedo en cuenta q esta en una funcion.

GRACIAS A TODOS Y SOBRE TODO A TI QUE SI LEES ESTO DE AQUI ES Q TE HAS LEIDO ESTE "ROLLO" ENTERO

Última edición por draco23800; 12/05/2005 a las 09:50
  #4 (permalink)  
Antiguo 12/05/2005, 09:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si tu usas notación "nombre[]":
<select name=\"slct_emple[]\">

Ese "select" junto con otros que puedas generar así ya no son "simples" .. son arrays .. y como tales tienes que recogerlos.

Código PHP:
foreach ($_POST['slct_emple'] as $select_valor){
   echo 
$select_valor."<br>";

No sé si generas N de esos selects para "slct_emple" ..pero si opcionalmente vas a poder generar +1 de esos select debes usar "[]" como nombre del mismo y procesarlo como ves ahí. Si usas más campos de ese formulario tipo "array" ([]) .. y usas el mismo indice para todos .. en lugar de un bucle foreach() deberías usar uno tipo for() para usar el mismo indice en todos al accederlo en "paralelo".

Por otro lado .. sobre el problema concreto:
$_POST['$datos[dni]']."

eso no es correcto .. Realmente no sé de donde sale "$datos[dni]"? .. Pero un array bidimiensinal se acede tipo:

$_POST['datos']['dni'] .. pero no conozco de donde "sale" .. así que no sé si es correcto lo que te propongo para tu caso particular.

Un saludo,

PD: usa el botón "PHP" para colorear el código .. se lee mejor.
  #5 (permalink)  
Antiguo 12/05/2005, 09:57
 
Fecha de Ingreso: abril-2005
Mensajes: 171
Antigüedad: 19 años
Puntos: 0
$datos[dni] sale de esta linea:

echo ("<option value=\"$datos[dni]\">$datos[nombre] $datos[apellidos]</option>"); que esta en la linea 11 de la funcion contando los comentarios
segun esta en el post.

Como los recogeria si <select name=\"slct_emple[]\"> lo cambio por: <select name=\"emple\">??????


Gracias
  #6 (permalink)  
Antiguo 12/05/2005, 10:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero .. cual es el objetivo de lo que quieres hacer?

Sabes lo que hace realmente (lo puedes ver viendo el código fuente de tu página HTML generada en tu navegador ->ver código fuente) esta línea:

echo ("<option value=\"$datos[dni]\">$datos[nombre] $datos[apellidos]</option>");

eso va a generar algo tipo:
<option value="129209390-4">Fulano Sotano Mengano</option>

Ya te comenté (de HTML) que un "<select>" de HTML el dato que "viaja" a tu SCRIPT! PHP es el "option" seleccionado .. concretamente el "value" que este tenga y bajo la variable de nombre que defines en el <select name="loquesea">


Si dices <select name=\"emple\">??????

entonces en $_POST['emple'] tendrías tu "DNI" seleccionado de ese "empleado" para que lo uses en:

Código PHP:
<?php.....codigo 
if (isset($_POST['enviar_persona'])){ 
    
$consulta=("SELECT f.nombre FROM funciones f, persofun pf 
                WHERE  pf.dni='"
.$_POST['emple']."'  and f.codFuncion=pf.codFuncion"); 
$resultado=mysql_query($consulta); 
if (
mysql_num_rows($resultado) ==1){
   
$nombre=mysql_result($resultado,'nombre'); 
   echo 
"EMPLEADO: ".$nombre;
}  else {
   echo 
"Error: no se indicó empleado o no existe";
}       
?>
Fijate que añadí algunas cosas .. Por ejemplo . .tu consulta SQL se espera 1 o 0 registros (como resultado) según se encuentre ese registro (teóricamente tienes DNI's de empleados iguales? .. no creo?). El caso es que debes validar si existe o no resultados .. para mostrar un error en consecuencia. También fijate que si sólo obtienes un campo .. con la función mysql_result() se puede obtener dicho campo sin bucle ni nada más (ahorrando recursos) ya que se supone que vas a obtener un máximo de 1 registros.

Un saludo,
  #7 (permalink)  
Antiguo 16/05/2005, 02:24
 
Fecha de Ingreso: abril-2005
Mensajes: 171
Antigüedad: 19 años
Puntos: 0
La consulta puede devolver mas de un dato porque lo que devueve es nombre de las funciones asociadas a ese dni.

Para ejecutar unas instrucciones con un valor y otras con otro como seria???

if ($_POST['emple']==numero de dni)


numero de dni (es el option value)

Gracias.
  #8 (permalink)  
Antiguo 16/05/2005, 02:38
 
Fecha de Ingreso: abril-2005
Mensajes: 171
Antigüedad: 19 años
Puntos: 0
OK si se puede solucionada esa ultima consulta (la del anterior post)

GRACIAS A TODOS
  #9 (permalink)  
Antiguo 16/05/2005, 06:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Por mi parte .. mi último ejemplo cuando te preguntaba si puede devolver más resultados tu consulta es para que uses mysql_fetch_array() o simplemente mysql_result() como te expongo en mi ejemplo.

No sé si te ha quedado ya claro tu pregunta incial sobre "como funciona un <select>" de HTML y lo que ocurre cara a PHP cuando seleccionas uno y lo envias al tu script/código de Proceso PHP. Deberías aclararlo .. por qué una cosa (o parte de tu problema) es como generar esa lista de opciones donde van a salir (aparecer en el) N DNI's (como referencia y mostrando un "nombre" para cada opción) y de como vas a tratar ese "DNI" seleccionado (dato de ese <select>)

En cualquier caso estaría bueno que vieses como usar "Mysql" bajo PHP y sus funciones asociadas:
www.php.net/mysql


Un saludo,
  #10 (permalink)  
Antiguo 16/05/2005, 09:56
 
Fecha de Ingreso: abril-2005
Mensajes: 171
Antigüedad: 19 años
Puntos: 0
Ya se que no tengo mucha idea ni de php ni de mysql.

Las consultas las he trabajado con oracle (sql plus).

Mas o menos me ha quedado claro lo de los select salvo el tratamiento en caso de tener:

<select name=\"nombre del select[]\">

Por lo que veo sigue siendo igual que si tengo

<select name=\"nombre del select\">

no???
  #11 (permalink)  
Antiguo 16/05/2005, 11:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No .. no es igual (esto no es própio de PHP .. es de HTML .. por si deseas profundizar en el tema).

usar en cualquier elemento de un formulario HTML un nombre con [] .. indica que eso será un "array" cara a PHP.

Se usa si tienes un "grupo" de esos elementos que asociar .. por ejemplo imagina un formulario de ingreso de N usuarios a un sistema .. a la vez:

<input type="text" name="nombre[]">
<input type="text" name="nombre[]">
<input type="text" name="nombre[]">
<input type="text" name="nombre[]">

Eso genera un array de nombre "nombre" cara a PHP; cada "elemento" de ese array por orden secuencia tiene lo que has seleccionado/ingresado en ese campo del formulario. (se "autonumera" de 0 a N, podrías usar también nombre de indice de ese array si quieres).

Como array que es . pues lo recorres en PHP con algún bucle tipo:
Código PHP:
foreach ($_POST['nombres'] as $nombre){
  echo 
$nombre."<br>";

o accedes directamente a un indice concreto:
echo $_POST['nombre'][0];
ó
echo $_POST['nombre'][1];
etc ...

sería lo mismo que:
<input type="text" name="nombre1">
<input type="text" name="nombre2">
<input type="text" name="nombre3">

Y trabajar cada $nombre1 .. $nombre2 .. (mejor en $_POST['nombre1'] .. etc o en $_GET). Pero eso no te dá ninguna versatilidad si esas variables se genéran dinámica (ej.: preguntar "cuantos nombres vas a crear" y luego mostar esos N campos del formulario que corresponda).

Un saludo,
  #12 (permalink)  
Antiguo 17/05/2005, 03:22
 
Fecha de Ingreso: abril-2005
Mensajes: 171
Antigüedad: 19 años
Puntos: 0
GRACIAS CLUSTER me lo mirare bien en algun libro html pero ahora va la ultima (o como se suele decir la penultima) a ver si lo he entendido bien del todo.

Si tengo el siguiente codigo:

Código PHP:
for ($i=1$i<=$total$i++) {
             
$consulta=("SELECT dni,nombre,apellidos FROM personal");
    
$resultado=mysql_query($consulta);
    echo (
"Empleado $i <select name=\"personas[]\">");
    if (
$i<>1) { 
     echo (
"<option value=\"0\"></option>"); 
    }
           while (
$datos=mysql_fetch_Array($resultado)) {
                    echo (
"<option value=\"$datos[dni]\">dato1</option>");
              }
              echo (
"</select>");
        }
//fin for 
Se me generan tantos select option en cada paso del for de i a total (total sale de otra consulta anterior) pero a lo que voy:

Para tratar los datos al pulsar en el boton enviar se me enviara lo siguiente no???

personas[0] -->value=dni persona 0 (datos[dni persona 0])
personas[1] --> " " " 1 ( " [ " " 1]) si se han seleccionado y asi hasta personas[total] no???

y el foreach seria asi???

Código PHP:
foreach ($_POST['personas'] as $personas){ //o bien $personas seria $total???
           
echo $personas."<br>"

GRACIAS OTRA VEZ
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 06:26.