PDA

Ver la Versión Completa : Capturar el valor del Select


elcigarra
12-05-2006, 04:04:23
Tengo un formulario con varios campos de texto, areas, checkboxes y un Select que estaría por ejemploasí:

<select name=\"selectTipo\" tabindex=\"0\">
<option value=\"0\">Granito</option>
<option value=\"1\">Madera</option>
<option value=\"2\">Titanio</option>
<option value=\"3\">Aluminio</option>
</select>


Más abajo, genero un mensaje para mandármelo por mail con todos estos datos con la intención de incluir el valor elegido en dicho select (sería mejor la opción, pero por ahora cualquier cosa serviría) para lo cual la linea indicada para este menester dice


...
$msg .= "<b>Tipo:</b> $_POST[SelectTipo]\n<br>";
...


Por alguna razón este sistema funciona con todo lo otro pero el select me queda vacío, es decir, en el mail sale:

...
Nombre: Pinocho el muñeco
Tipo:
Ocupación: Niño
... etc

Alguien sabe que estoy haciendo mal

dec
12-05-2006, 04:20:13
Hola,

Aparentemente faltan unas comillas en:


$msg .= "<b>Tipo:</b> $_POST[SelectTipo]\n<br>";


Tendría que ser algo como:


$msg .= "<b>Tipo:</b> $_POST['SelectTipo']\n<br>";


Porque lo siguiente funciona:


<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<select name="selectTipo" tabindex="0">
<option value="0">Granito</option>
<option value="1">Madera</option>
<option value="2">Titanio</option>
<option value="3">Aluminio</option>
</select>
<input type="submit" value="Enviar" />
</form>

<?php

if(!isset($_POST['selectTipo']))
echo "Sin selección";
else
echo $_POST['selectTipo'];

?>

dec
12-05-2006, 04:33:01
Hola de nuevo,

Bueno... pues parece que debe haber algún otro problema... yo acabo de descubrir que así también parece funcionar bien:


<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<select name="selectTipo" tabindex="0">
<option value="0">Granito</option>
<option value="1">Madera</option>
<option value="2">Titanio</option>
<option value="3">Aluminio</option>
</select>
<input type="submit" value="Enviar" />
</form>

<?php

if(!isset($_POST[selectTipo]))
echo "Sin selección";
else
echo $_POST[selectTipo];

?>


De todos modos me parece que preferiría el uso de las comillas en este caso, pero,... perplejo me he quedado al ver que funciona aún sin ellas.

roman
12-05-2006, 06:33:11
David, nota que elcigarra usa una expresión:


$msg .= "<b>Tipo:</b> $_POST[SelectTipo]\n<br>";


en donde la referencia al arreglo se hace dentro de unas comillas dobles mientras que en tu ejempo la utilizas suelta:


echo $_POST['selectTipo'];


Cuando un arreglo se usa dentro de una expresión en comillas dobles, no sólo no es necesario entrecomillar el índice del arreglo sino que, de hecho, no es posible: al hacerlo se genera un "parse error".

Cuando el arreglo se utiliza suelto, no está prohibido dejar de entrecomillar el índice del arreglo, pero se genera una advertencia:


Use of undefined constant selectTipo - assumed 'selectTipo'


(misma que podrías no ver si la directiva display_errors está apagada). Como sólo es una advertencia el código se ejecuta "bien".

En cuanto a la duda de elcigarra, lo único que veo es que el select está nombrado con selectTipo (minúscula inicial) mientras que en el post se le llama con SelectTipo (mayúscula inicial).

// Saludos

dec
12-05-2006, 07:28:40
Hola,

Pues va a ser lo que dices Román. Yo acostumbraba hasta ahora a entrecomillar y si no recuerdo mal podía hacer algo así:


$msg .= "<b>Tipo:</b> {$_POST['SelectTipo']}\n<br>";


Pero ahora mismo no sabría decir si eso funcionaba o no era más bien para utilizar junto a "Arrays" en determinados casos.

Debe ser lo que dices entonces, que no se respete el "case sensitive", es un error de los típicos que te hacen perder no poco tiempo y originan frustración y al cabo... cuando lo descubres... a mí me ha ocurrido a veces después de muchas horas encima de algo, por ejemplo.

Ya dirá algo el compañero. ;)

roman
12-05-2006, 07:37:45
$msg .= "<b>Tipo:</b> {$_POST['SelectTipo']}\n<br>";

¡Ahhh! Pero es que ahora usas llaves {} y en ese caso vuelve a ser obligatorio el entrecomillar el índice :) De esto no estaba yo muy al tanto pero parece que las llaves son como un escape de las comillas dobles.

es un error de los típicos que te hacen perder no poco tiempo

Pues sí, pero en estos casos más bien parece que tienen desactivada la opción display_errors. De lo contrario inmediatamente php les advertiría que algo anda mal.

Moraleja: durante el desarrollo no desactivar los mensajes de error.

// Saludos

dec
12-05-2006, 07:42:54
Hola,


Moraleja: durante el desarrollo no desactivar los mensajes de error.


Nada que objetar: llevas razón. :)


Notice: Use of undefined constant SelectTipo - assumed 'SelectTipo' in c:\localhost\www\test.php on line 10

elcigarra
12-05-2006, 14:14:53
Como diría mi abuelo: ...A la flauta !!!
Me temo que sí puede ser la mayúscula, lástima que ahora no puedo probarlo... En todo caso les aviso.

Perberos
13-05-2006, 08:54:04
me encanta jugar con las comillas y reformatear el codigo :P
$msg .= "<b>Tipo:</b> ".$_POST['selectTipo']."\n<br>";
$msg .= '<b>Tipo:</b> '.$_POST["selectTipo"].'\n<br>';
$msg .= <<<END
<b>Tipo:</b> $_POST[selectTipo]
<br>
END;