Foros del Web » Programando para Internet » PHP »

que incremente en uno el valor cada vez que envie el formulario (foreach)

Estas en el tema de que incremente en uno el valor cada vez que envie el formulario (foreach) en el foro de PHP en Foros del Web. Hola foreros, no me sale hacer que cada vez que envie el formulario, se incremente en uno el valor de la variable, siempre me imprime ...
  #1 (permalink)  
Antiguo 04/11/2008, 10:56
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
que incremente en uno el valor cada vez que envie el formulario (foreach)

Hola foreros, no me sale hacer que cada vez que envie el formulario, se incremente en uno el valor de la variable, siempre me imprime cero, y ya probe con while y for, creo que la mejor opcion para lo que quiero es foreach.

Código php:
Ver original
  1. <?php
  2. if(isset($_POST['enviar'])){
  3.     $contar = array($_POST['contar']);
  4.  
  5.     $i = 0;
  6.  
  7.     foreach ($contar as $valor){
  8.         print $i;
  9.         $i++;
  10.     }
  11.  
  12.     var_dump($contar); // array(1) { [0]=>  string(0) "" }
  13. }
  14. ?>
  15.  
  16. <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
  17.     <input type="hidden" name="contar" value="" />
  18.     <input type="submit" name="enviar" value="enviar" />
  19. </form>
que tengo mal???

gracias mil de antemano
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #2 (permalink)  
Antiguo 04/11/2008, 11:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: que incremente en uno el valor cada vez que envie el formulario (foreach)

Hola rogertm,

Recuerda que PHP es un lenguaje "stateless", es decir por cada request que hagas se "reinicia" tu script, si quieres guardar el valor anterior debes de guardarlo en tu campo hidden, y asi al presionar enviar incrementas ese valor Y lo vuelves a imprimr en tu campo hidden.

Saludos.
  #3 (permalink)  
Antiguo 04/11/2008, 11:03
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: que incremente en uno el valor cada vez que envie el formulario (foreach)

Hola rogertm... Cómo vas??

Yo lo haría así:

Código PHP:
if($_POST['enviar'])
{
$_SESSION['contador']=$_SESSION['contador']+1;

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #4 (permalink)  
Antiguo 05/11/2008, 09:14
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Respuesta: que incremente en uno el valor cada vez que envie el formulario (foreach)

Buenos dias por la mañana... les dire que no he avanzado en casi nada... creo, pero mejor les explico para que quiero esto.

Tengo un formulario y quiero que al primer envio me haga un INSERT y si se envia por segunda vez o mas que haga un UPDATE. Es un boton para ir guardando la noticia a medida que la voy escribiendo ya despues tendria otro para publicarla, el codigo que tengo ahora es este:
Código php:
Ver original
  1. <?php
  2. if(isset($_POST['enviar'])){
  3.     $contar = array($_POST['contar']);
  4.  
  5.     $i = 0;
  6.  
  7.     $sentencia = "INSERT";
  8.  
  9.     for ($i > 1; ;){
  10.         $sentencia = "UPDATE";
  11.         break;
  12.         $i++;
  13.     }
  14. }
  15.  
  16. echo $sentencia; // siempre imprime UPDATE
  17. ?>
  18.  
  19. <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
  20.     <input type="text" name="contar" value="<?php echo $i; ?>" />
  21.     <input type="submit" name="enviar" value="enviar" />
  22. </form>
  23. <p><a href="<?php $_SERVER['PHP_SELF'] ?>">refrescar</a></p>
lo que quiero es que la primera vez que envie el formulario $sentencia imprima INSERT y a partir de la segunda vez UPDATE

gracias mil
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #5 (permalink)  
Antiguo 05/11/2008, 09:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: que incremente en uno el valor cada vez que envie el formulario (foreach)

Pues puedes usar sesiones, aunque si no las deseas usar puedes contrar las variables que vienen por POST usando algo así:
Código php:
Ver original
  1. <?php
  2. if(isset($_POST['enviar'])){
  3.       if(isset($_POST['previo']) && !empty($_POST['previo'])) {
  4.             $sentencia = "UPDATE";
  5.       } else {
  6.             $sentencia = "INSERT";
  7.       }
  8. }
  9.  
  10. echo $sentencia; // siempre imprime UPDATE
  11. ?>
  12.  
  13. <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
  14.     <?php if( isset($_POST['enviar'] && !isset($_POST['previo'] ) {
  15.     <input type="hidden" name="previo" value="ok" />
  16.     <?php } ?>
  17.     <input type="submit" name="enviar" value="enviar" />
  18. </form>
  19. <p><a href="<?php $_SERVER['PHP_SELF'] ?>">refrescar</a></p>

Saludos.
  #6 (permalink)  
Antiguo 05/11/2008, 10:13
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: que incremente en uno el valor cada vez que envie el formulario (foreach)

Uppps!!! Cómo que me ignoraron

:D :D
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #7 (permalink)  
Antiguo 05/11/2008, 13:36
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Respuesta: que incremente en uno el valor cada vez que envie el formulario (foreach)

@Carxl para nada socio, lo resolví así:
Código php:
Ver original
  1. <?php
  2. if(!isset($_SESSION)){
  3.     session_start();
  4. }
  5.  
  6. if(isset($_POST['enviar'])){
  7.     if(!empty($_POST['previo'])){
  8.         $sentencia = "UPDATE";
  9.     }else{
  10.         $sentencia = "INSERT";
  11.     }
  12.     $_SESSION['sentencia'] = $sentencia;
  13. }
  14.  
  15. if(isset($_POST['publicar'])){
  16.     $sentencia = "INSERT";
  17.     unset($_SESSION['sentencia']);
  18. }
  19.  
  20. echo $sentencia;
  21. ?>
  22.  
  23. <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
  24.     <input type="text" name="previo" value="<?php echo $_SESSION['sentencia'] ?>" />
  25.     <input type="submit" name="enviar" value="enviar" />
  26.     <input type="submit" name="publicar" value="publicar" />
  27. </form>
  28. <p><a href="<?php $_SERVER['PHP_SELF'] ?>">refrescar</a></p>
ahora en el primer envio de del form mediante el boton enviar, $sentencia imprime INSERT y a partir de ahi UPDATE justo como quiero

gracias a los dos
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #8 (permalink)  
Antiguo 05/11/2008, 16:28
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: que incremente en uno el valor cada vez que envie el formulario (foreach)

Hola roger. Tiene algún sentido en tu script el que setees la variable de sesión? Porque en ningún momento la usas (mas que para eliminarla cuando el botón pulsado es el de publicar)

Intenta borrar esa línea (la 12) y verás que el funcionamiento es exactamente el mismo. Eso porque te estás apoyando de un campo de texto (que debiera ser oculto me imagino) para propagar el valor de "la bandera $sentencia" que usas y no una sesión.

@Carxl, no te preocupes, hay algunos que ya estamos acostumbrados a ese tipo de situaciones, como aquí y aquí. Fuerza!

Saludos,
  #9 (permalink)  
Antiguo 05/11/2008, 20:23
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: que incremente en uno el valor cada vez que envie el formulario (foreach)

:D :D jejeje seeeeeeeeeeeeee Bueno la idea era que lo solucionara

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #10 (permalink)  
Antiguo 05/11/2008, 21:44
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: que incremente en uno el valor cada vez que envie el formulario (foreach)

En cuanto al formulario con incremento cada vez que se envía...

Código PHP:
<?php

    $c 
= isset($_POST['ok']) ? $_POST['ok'] : -1;
    
$c++;

    echo 
"<form action=\"\" method=\"post\">
    <button type=\"submit\" name=\"ok\" value=\"$c\">$c</button>
    </form>"
;
?>
Aprovecho el propio botón para mostrar las veces que se ha pulsado :)

Un saludo.
  #11 (permalink)  
Antiguo 06/11/2008, 07:20
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Respuesta: que incremente en uno el valor cada vez que envie el formulario (foreach)

Cita:
Iniciado por okram Ver Mensaje
Hola roger. Tiene algún sentido en tu script el que setees la variable de sesión? Porque en ningún momento la usas (mas que para eliminarla cuando el botón pulsado es el de publicar)

Intenta borrar esa línea (la 12) y verás que el funcionamiento es exactamente el mismo. Eso porque te estás apoyando de un campo de texto (que debiera ser oculto me imagino) para propagar el valor de "la bandera $sentencia" que usas y no una sesión.

@Carxl, no te preocupes, hay algunos que ya estamos acostumbrados a ese tipo de situaciones, como aquí y aquí. Fuerza!

Saludos,
Hola okram, pues tiene sentido, porque si la elimino no funciona, lo que quiero es que el primer envio se haga un inserte, ya despues un update, si elimino esa linea no hace lo que quiero.. y bueno el campo va oculto, pero lo hice asi para probar

Carxl... viste use sessssSsiones....

saludetes, cuando termine el script lo paso por aqui mismo
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #12 (permalink)  
Antiguo 06/11/2008, 07:25
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: que incremente en uno el valor cada vez que envie el formulario (foreach)

__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #13 (permalink)  
Antiguo 06/11/2008, 17:29
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: que incremente en uno el valor cada vez que envie el formulario (foreach)

Y que pasa si en vez de
Código php:
Ver original
  1. <input type="text" name="previo" value="<?php echo $_SESSION['sentencia'] ?>" />
pones
Código php:
Ver original
  1. <input type="text" name="previo" value="<?php echo $sentencia; ?>" />
y así si te olvidas de esa variable de sesión?

A lo que me refiero es que, si quieres propagar un dato por un campo (oculto o no) de un formulario, entonces no tiene sentido usar variables de sesión.

Código php:
Ver original
  1. <?php
  2. #if(!isset($_SESSION)){
  3. #    session_start();
  4. #}
  5.  
  6. if(isset($_POST['enviar'])){
  7.     if(!empty($_POST['previo'])){
  8.         $sentencia = "UPDATE";
  9.     }else{
  10.         $sentencia = "INSERT";
  11.     }
  12. #    $_SESSION['sentencia'] = $sentencia;
  13. }
  14.  
  15. if(isset($_POST['publicar'])){
  16.     $sentencia = "INSERT";
  17. #    unset($_SESSION['sentencia']);
  18. }
  19.  
  20. echo $sentencia;
  21. ?>
  22.  
  23. <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
  24.     <input type="text" name="previo" value="<?php echo $sentencia; ?>" />
  25.     <input type="submit" name="enviar" value="enviar" />
  26.     <input type="submit" name="publicar" value="publicar" />
  27. </form>
  28. <p><a href="<?php $_SERVER['PHP_SELF'] ?>">refrescar</a></p>

Saludos,
  #14 (permalink)  
Antiguo 07/11/2008, 07:34
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Respuesta: que incremente en uno el valor cada vez que envie el formulario (foreach)

Okram, en este ejemplito sensillo funciona como dices, lo probe y si funciona, pero si se refresca la pagina ya no me mantiene la variable y es eso justo lo que no quiero que suceda.

Si te fijas, lo que quiero hacer es insertar noticias en una DB y mientras escribo ir guardando y/o actualizando los registros, de todas formas quiero hacerlo con sessiones, no sea que de un teclaso mal dado y se me valla todo a volar

Ya estoy terminando el megacodigo .... en cuanto lo tenga listo lo posteo para que me ayuden a pulirlo, que seguro tendra algunas cosas que arreglarle.

Esta es la base en la que me estoy guiando:
Código php:
Ver original
  1. <?php
  2. if(!isset($_SESSION)){
  3.     session_start();
  4. }
  5.  
  6. if(isset($_POST['enviar'])){
  7.     if(!empty($_POST['sql'])){
  8.         $sentencia = "UPDATE";
  9.     }else{
  10.         $sentencia = "INSERT";
  11.     }
  12.     $_SESSION['sentencia'] = $sentencia;
  13. }
  14.  
  15. if(isset($_POST['publicar'])){
  16.     if(!empty($_POST['sql'])){
  17.         $sentencia = "UPDATE";
  18.     }else{
  19.         $sentencia = "INSERT";
  20.     }
  21.     unset($_SESSION['sentencia']);
  22. }
  23.  
  24. echo $sentencia;
  25. ?>
  26.  
  27. <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
  28.     <input type="text" name="sql" value="<?php echo $_SESSION['sentencia'] ?>" />
  29.     <input type="submit" name="enviar" value="enviar" />
  30.     <input type="submit" name="publicar" value="publicar" />
  31. </form>
  32. <p><a href="<?php $_SERVER['PHP_SELF'] ?>">refrescar</a></p>

Si te fijas, cuando envio por primera vez el boton enviar, hace un INSERT y a partir de ahi un UPDATE. Por su parte el boton publicar, hara un UPDATE si $_SESSION['sentencia'] tiene valor UPDATE o un INSERT si esta vacia.

Y el campo sql va oculto claro, pero aqui lo tengo text para ver el valor que toma

saludos y gracias mil
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #15 (permalink)  
Antiguo 07/11/2008, 11:47
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: que incremente en uno el valor cada vez que envie el formulario (foreach)

Vamos que no me terminas de entender. Lo que he estado diciendo en los dos últimos mensajes es: "O usas sesiones o usas el campo de un formulario". El ejemplo que te puse es para que veas que el uso de sesiones era innecesario si utilizabas un campo, y claro, si refrescas la página el dato se iba a perder. Pero si usas sesiones, entonces ya no es necesario que incluyas ese campo "sql", ya que en la variable de sesión está el método a ejecutar. Hazlo así, entonces:

Código php:
Ver original
  1. <?php
  2. if(!isset($_SESSION)){
  3.     session_start();
  4. }
  5.  
  6. if(isset($_POST['enviar'])){
  7.     # if(!empty($_POST['sql'])){
  8.    // Para qué usas el dato del campo si puedes usar el de la sesión?
  9.  
  10.     if(!empty($_SESSION['sentencia'])){
  11.         $sentencia = "UPDATE";
  12.     }else{
  13.         $sentencia = "INSERT";
  14.     }
  15.     $_SESSION['sentencia'] = $sentencia;
  16. } elseif(isset($_POST['publicar'])){ // O es "enviar", o es "publicar", no?
  17.      # if(!empty($_POST['sql'])){
  18.    // Para qué usas el dato del campo si puedes usar el de la sesión?
  19.  
  20.     if(!empty($_SESSION['sentencia'])){
  21.         $sentencia = "UPDATE";
  22.     }else{
  23.         $sentencia = "INSERT";
  24.     }
  25.     unset($_SESSION['sentencia']);
  26. }
  27.  
  28. echo $sentencia;
  29. ?>
  30.  
  31. <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
  32.     <!--
  33.         <input type="text" name="sql" value="<?php echo $_SESSION['sentencia'] ?>" />
  34.         Esto ya no va.............
  35.     -->
  36.     <input type="submit" name="enviar" value="enviar" />
  37.     <input type="submit" name="publicar" value="publicar" />
  38. </form>
  39. <p><a href="<?php $_SERVER['PHP_SELF'] ?>">refrescar</a></p>
Espero que ahora sí se me entienda.

Saludos, estaré esperando el script; sorpréndenos!
  #16 (permalink)  
Antiguo 07/11/2008, 12:38
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 9 meses
Puntos: 638
Respuesta: que incremente en uno el valor cada vez que envie el formulario (foreach)

Valla... al fin te entiendo
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #17 (permalink)  
Antiguo 07/11/2008, 12:54
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: que incremente en uno el valor cada vez que envie el formulario (foreach)

Y sólo ese trozo del script se puede optimizar mucho aún:

Código php:
Ver original
  1. <?php
  2. if(!isset($_SESSION)){
  3.     session_start();
  4. }
  5.  
  6. if(strtolower($_SERVER['REQUEST_METHOD']) == "post") {
  7.     $sentencia = isset($_SESSION['sentencia']) ? 'UPDATE' : 'INSERT';
  8.  
  9.     if(isset($_POST['enviar'])) {
  10.         $_SESSION['sentencia'] = 1; // Es necesario asignarle $sentencia?
  11.     } elseif(isset($_POST['publicar'])) {
  12.         unset($_SESSION['sentencia']);
  13.     }
  14.  
  15.     echo $sentencia;
  16. }
  17. ?>
  18.  
  19. <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
  20.     <input type="submit" name="enviar" value="enviar" />
  21.     <input type="submit" name="publicar" value="publicar" />
  22. </form>
  23. <p><a href="<?php $_SERVER['PHP_SELF'] ?>">refrescar</a></p>
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 10:23.