Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Capturar el valor del Select (https://www.clubdelphi.com/foros/showthread.php?t=31612)

elcigarra 12-05-2006 05:04:23

Capturar el valor del Select
 
Tengo un formulario con varios campos de texto, areas, checkboxes y un Select que estaría por ejemploasí:
Código:

<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

Código:

...
$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 05:20:13

Hola,

Aparentemente faltan unas comillas en:

Código PHP:

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

Tendría que ser algo como:

Código PHP:

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

Porque lo siguiente funciona:

Código PHP:

<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 05: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:

Código PHP:

<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 07:33:11

David, nota que elcigarra usa una expresión:

Código PHP:

$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:

Código PHP:

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:

Cita:

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 08: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í:

Código PHP:

$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 08:37:45

Cita:

Empezado por dec
$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.

Cita:

Empezado por dec
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 08:42:54

Hola,

Cita:

Empezado por Román
Moraleja: durante el desarrollo no desactivar los mensajes de error.

Nada que objetar: llevas razón. :)

Cita:

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


elcigarra 12-05-2006 15: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 09:54:04

me encanta jugar con las comillas y reformatear el codigo :P
Código PHP:

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

Código PHP:

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

Código PHP:

$msg .= <<<END
<b>Tipo:</b> $_POST[selectTipo]
<br>
END; 



La franja horaria es GMT +2. Ahora son las 18:31:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi