Foros del Web » Programando para Internet » PHP »

Problemas con "post" en PHP

Estas en el tema de Problemas con "post" en PHP en el foro de PHP en Foros del Web. Cita: Iniciado por pateketrueke [...] si no envías el formulario antes... ¿porque habría de existir cierta variable?? [...] ese es el comportamiento natural de los ...

  #31 (permalink)  
Antiguo 09/05/2009, 13:50
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 1 mes
Puntos: 2534
Respuesta: Problemas con "post" en PHP

Cita:
Iniciado por pateketrueke Ver Mensaje
[...] si no envías el formulario antes... ¿porque habría de existir cierta variable?? [...]
ese es el comportamiento natural de los formularios, PHP es un lenguaje stateless de modo, que:

script.php?foo=bar
Código PHP:
<?php
echo $_GET['foo']; // bar
echo $_GET['candy']; // undefined index...
este es el comportamiento natural de PHP, repito... si no esta enviándose la variable candy ¿¿porque habría de existir??

y si la usas, ¿¿porque no debe haber error???

analiza esto un poco, es muy simple...


con respecto a tu doble-enter no tiene sentido... ya que así es la labor del formulario, si presionas un submit, se envía la información en forma de variables...

si presionas enter en la barra de direcciones, NO estas enviando el formulario, de modo que las variables no se definen, y se vienen los errores...


NOTA que el 95%+ de los tutoriales asumen que SI vas a enviar por submit el formulario, no que le des enter así nada mas a la barra de direcciones!! (y luego, esperes que funcione igual)


¿¿que tan difícil es comprender y aceptar esto???
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #32 (permalink)  
Antiguo 09/05/2009, 14:13
 
Fecha de Ingreso: julio-2008
Mensajes: 24
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Problemas con "post" en PHP

Cuando hable de los tutoriales, no me referia a lo del "enter", me referia a que NINGUNO de ellos usa "isset".

Entonces, como puede ser q los tutoriales enseñen algo q da error??

Yo soy nuevo, leo el tutorial, y ni se me ocurre usar "isset", por la sencilla razon de q soy nuevo y no puedo adivinar q hay q usarlo.

Ahora sí sé que hay q usarlo, pero porq me lo dijeron ustedes. Si no, jamas se me hubiera ocurrido.

Si ninguno dice q hay q usar "isset", ni definir las variables ni nada, te estan diciendo cualquier cosa.

Y no me digan q es obvio, porq si fuera tan obvio, los tutoriales lo pondrian en los ejemplos q dan y sin embargo no lo hacen.

Ademas, cuando uno es nuevo, NADA es obvio.

Ahora entienden a qué me refiero con q el 95% de los tutoriales te enseñan a recibir datos de form de una manera q da error?


EDITO: mmm, me acabo de dar cuenta de algo. Me parece q ustedes creyeron q yo estaba enviando el formulario a traves de "enter". Si es asi, les aviso q no. Yo la primera vez q mando el formulario, lo mando presionando el boton del formulario. Cuando yo hablo del "enter" siempre me refiero a presionarlo una vez q salio el resultado del primer envio.
  #33 (permalink)  
Antiguo 09/05/2009, 14:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problemas con "post" en PHP

Precisamente, si tu no guardas el valor en algun lado este no se respeta, ve claramente lo que te dice pateketrueke, no puedes esperar que PHP haga todo el trabajo por ti.

Si ves como funciona un request HTTP basico puedes ver que las variables por POST solo se envian una vez, si vuelves a presionar "submit" y el campo no tiene valor, no se envia es natural, por eso te comente, si quieres "persistir" el valor, tienes de dos, o envias las variables en un campo oculto o pre-seleccionas el valor en el campo.

Un ejemplo que va a persistir el valor por mas que presiones el boton submit podria ser algo asi:
Código php:
Ver original
  1. <?php
  2. if (strtolower($_SERVER['REQUEST_METHOD']) == 'post') {
  3.        $item = isset( $_POST['item'] ) ? $_POST['item'] : '';
  4.        $qty = isset( $_POST['qty'] ) ? $_POST['qty'] : 0;
  5.  
  6.        printf( "You ordered %d of %s", $item, $qty );
  7. }
  8. ?>
  9. <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  10.        Item: <input type="text" name="item" value="<?php if (isset($_POST['item']) ) { echo $_POST['item'] } ?>" />
  11.        Qty: <input type="text" name="qty" value="<?php if (isset($_POST['qty']) ) { echo $_POST['qty'] } ?>" />
  12.         <input type="submit" name="send" value="Send" />
  13. </form>

Con eso por mas que presiones "enter" o el boton submit siempre se va a persistir el valor, pero ojo si accesas directo por URL no se van a mostrar las variables, ya que las variables por por URL se envian por GET.

Saludos.
  #34 (permalink)  
Antiguo 09/05/2009, 15:07
 
Fecha de Ingreso: julio-2008
Mensajes: 24
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Problemas con "post" en PHP

Bueno, ya voy terminando de encontrar la solucion a todo esto (al fin, jeje).

Con respecto a lo del "enter", estuve viendo recien q hay mucha gente q tiene problemas con el "enter" en formularios y parece q se podria resolver con algun on_event de Javascript.

Despues, acabo de descubrir algo. Se me ocurrio probar el script en Internet Explorer (yo uso siempre Firefox para todo) y resulta q con el navegador de Microsoft puedo presionar enter 149 veces q el resultado de la form permanece intacto. Otra cosa, al menos en mi caso, el explorer no tira ningun error de ningun tipo, ni notice ni nada.

A partir de esto se me ocurrio probrar el Opera tambien. Ahi fue distinto. El opera trabaja exactamente igual q el Firefox.

Conclusiones:

1) voy a mandar una carta documento a todos los tutoriales de la red por enseñar mal y no usar "isset" en sus ejemplos de forms (por hacerme perder el tiempo, jeje)

2) voy a buscar alguna solucion en Javascript para el tema del "enter". Algo asi como "no puede presionar enter" o "si presiona enter, los resultados se mantienen intactos".
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 23:22.