PDA

Ver la Versión Completa : Error al pasar variables


Luis Abraham
03-09-2004, 04:49:59
Que tal Foro !!!

Estoy comenzando con PHP (de nuevo) y me estoy apoyando con un tutorial del cual saco algunos ejemplos para probarlos yo mismo, pero al llegar a la parte de los formularios me tope con un error.
Estoy utilizando Apache 2.0.5 y PHP 5.0.1 y el codigo es como sigue:

Este es el código de mi Formulario.


<form action="Formul1.php" method="post" name="myform">
Escribe tu nombre:
<input type = "text" name = "nombre" value = "" size = "15">
<br>
Escribe tu clave: <input type="password" name="clave" value = ""><br>
Elige tu color de coche favorito:<br>
<input type = "radio" name = "color" value = "Rojo">Rojo<br>
<input type = "radio" name = "color" value = "Verde">Verde<br>
<input type = "radio" name = "color" value = "Azul">Azul<br>
Elige los extras:<br>
<input type = "checkbox" name = "acondicionado" value = "Aire">Aire acondicionado<br>
<input type = "checkbox" name = "tapiceria" value = "Tapiceria">Tapiceria en piel<br>
<input type = "checkbox" name = "llantas" value = "Aluminio">Llantas de aluminio<br>
¿Cual es el precio máximo que estarías dispuesto a pagar?<br>
<select name = "precio">
<option>6,001 - 8,000 euros</option>
<option>8,001 - 10,000 euros</option>
<option>10,001 - 12,000 euros</option>
<option>12,001 - 14,000 euros</option>
<option>M&aacute;s de 14,000 euros</option>
</select>
<br>
<textarea rows = "5" cols = "50" name = "texto"></textarea>
<input name="Submit" type = "submit" value = "Enviar">
<input name="Reset" type = "reset" value = "Borrar">
</form>


Y este el el código php de mi página donde cacho los valores.


<?php
echo "El method que ha usado fue: ", $_SERVER['REQUEST_METHOD'], "<br>";

echo $_POST['nombre'], "<br>";
echo $_POST['clave'], "<br>";
echo $_POST['color'], "<br>";
echo $_POST['acondicionado'], "<br>";
echo $_POST['tapiceria'], "<br>";
echo $_POST['llantas'], "<br>";
echo $_POST['precio'], "<br>";
echo $_POST['texto'], "<br>";
?>


El problema viene cuando dejo los checkbox desactivados, ya que obtengo el siguiente error por cada checkbok desactivado:

Notice: Undefined index: (acondicionado, tapiceria o llantas, segun sea el caso) in C:\Archivos de programa\Apache Group\Apache2\htdocs\Tutorial\Formul1.php on line Número de linea

Lo raro es que si dejo los text y el textarea en blanco no ocurre el error.

Hace ya casi 2 años que uticé PHP y no recuerdo que me haya sucedido esto, lo raro es que si ejecutamos el ejemplo desde el tutorial esto no ocurre, sino que simplemente no muestras nada y por si le quieren echar un ojo este es el link:

http://www.rinconastur.com/php/ejemplo9b.php

No si se deba a la nueva versión del PHP o a algún error de configuración que haya podido cometer.

Bueno, ya no les echo tanto rollo y les agradezco de antemano cualquier ayuda que me puedan brindar.

jachguate
03-09-2004, 06:36:40
A vista rápida, el código me parece correcto.

He seguido el vínculo que has dejado, y todo parece funcionar correctamente... como supongo que lo has solucionado ya, es importante que vuelvas aca y nos cuentes de que se trataba el problema, para que si alguien un día enfrenta una situación similar tenga este punto de partida.

Hasta luego.

;)

roman
03-09-2004, 06:41:33
Un checkbox no seleccionado no manda ningún valor como fácilmente puedes comprobar:


<form method='get' action="">
<input type="checkbox" name="tapiz">
<input type="submit">
</form>


Verás que en la barra de direcciones del navegador sólo aparece

pagina.htm?

a diferencia de

pagina.htm?tapiz=on

cuando lo seleccionas.

No me preguntes por qué es así porque no lo sé. Es cosa del HTML y no de PHP.

Lo que tienes que hacer entonces es preguntar si existe la variable con la función isset.

Por cierto, cuando coloques código trata de poner sólo lo estrictamente necesario. En este caso hubiera bastado la parte de los checkboxes, lo demás sale sobrando y hace que la lectura sea más pesada.

// Saludos

Luis Abraham
08-09-2004, 23:14:33
Que tal foro !!!

A decir verdad jachguate no lo he podido resolver, he utilizado la función isset y las variables si existen pero el error no desaparece.

Lo que mas raro se me hace es por que no marca el error con el ejemplo del vinculo.

Intente cambiando de Off a On la directiva register_globals del php.ini pensando en que pudiera ser por ahi, pero obtube el mismo resultado, asi que si saben algo al respecto les agradecere su ayuda.

Bueno, muchas por los comentarios y si encuentro la solucion les avisare.

roman
08-09-2004, 23:29:12
Al código que originalmente pusiste le agregué los isset()


<?
echo "El method que ha usado fue: ", $_SERVER ['REQUEST_METHOD'], "<br>";

echo $_POST['nombre'], "<br>";
echo $_POST['clave'], "<br>";

if (isset($color)) echo $_POST['color'], "<br>";
if (isset($acondicionado)) echo $_POST['acondicionado'], "<br>";
if (isset($tapiceria)) echo $_POST['tapiceria'], "<br>";
if (isset($llantas)) echo $_POST['llantas'], "<br>";

echo $_POST['precio'], "<br>";
echo $_POST['texto'], "<br>";
?>


y me funciona sin problemas.

Por cierto, no debe extrañarte que en el enlace que indicas sí funcione. A fin de cuentas, cuando ves esa página estás viendo ya el resultado y no el código original de php.

Y aún suponiendo que ahí tengan el código sin isset() es posible que hayan suprimido los mensajes de advertencia con error_reporting().

// Saludos

Luis Abraham
09-09-2004, 00:22:18
Funciona !!!! :)

Tu si sabes roman :cool:

Muchas gracias por la ayuda !!!

roman
09-09-2004, 00:54:43
¿Y qué era lo que estaba mal? ¿No sería que en lugar de



isset($color)


ponías


isset('color')

?

// Saludos

Luis Abraham
09-09-2004, 01:33:30
El código era el siguiente:


echo $_POST['color'],"<br>";
if (isset($color));
echo "La variable si existe";

por lo tanto el error seguia apareciendo y el texto "La variable si existe" se imprimia siempre, pero acabo de ver que cometí un error muy tonto al poner ; al final del if() :(.

Pero a base de cometer errores tambien se aprende.

Muchas Gracias roman !!!

Luis Abraham
09-09-2004, 03:58:37
Sigue el problema !!!

Utilizando la funcion isset() como tu bien me recomendaste roman se evita que el error se produzca cuando los checkbox y radios estan desactivados, pero ahora resulta que cuando los activo tampoco muestra nada, es decir que hace exactamente lo mismo que cuando estan desactivados.

Por otro lado volviendo al codigo inicial en el cual no utilizo isset() no pasa esto, es decir que si los activo no se produce el error y si me imprime los valores de las variables.

¿Que es lo que esta mal? :S

kayetano
09-09-2004, 07:33:23
Hola

Haber si fuera por esto:
echo $_POST['color'],"<br>";
if (isset( $_POST['color']))
echo "La variable si existe";

Recuerda que la variable '$color' no existe como tal, debes acceder a este valor a través de $_POST['color']. Por lo que he estado leyendo entiendo que register_globals = off, aunque me extraña mucho que unas veces utilicéis el array $_POST y otras veces accedáis directamente a la variable por su nombre.

roman
09-09-2004, 08:04:46
aunque me extraña mucho que unas veces utilicéis el array $_POST y otras veces accedáis directamente a la variable por su nombre.

Mea culpa :o

Es que quedé tan acostumbrado a acceder a las variables por su nombre que aun me cuesta trabajo usar los arreglos como $_POST.

// Saludos

Luis Abraham
10-09-2004, 04:37:15
Como dijo kayetano en otro hilo Hay veces que lo más claro es lo que menos se ve

Asi fue como quedo:
if (isset($_POST['color'])) echo $_POST['color'], "<br>";

Muchas gracias a todos por su tiempo y su valiosa ayuda !!!