Foros del Web » Programando para Internet » PHP »

Contar envios en un formulario con submit/enviar

Estas en el tema de Contar envios en un formulario con submit/enviar en el foro de PHP en Foros del Web. Hola. Estoy haciendo prácticas y ejercicios de php donde viendo el tema de las funciones intento meter dentro un formulario para contar con el botón ...
  #1 (permalink)  
Antiguo 05/12/2010, 13:28
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Contar envios en un formulario con submit/enviar

Hola.

Estoy haciendo prácticas y ejercicios de php donde viendo el tema de las funciones intento meter dentro un formulario para contar con el botón de envio "Submit/Enviar" las veces que se pulsa dicho botón.

Primero creo la función para hacer o mostrar el formulario luego creo la variable $enviar=0; para empezar a contar desde 0 y luego si se pulsa o se activa el botón submit/enviar intento que me sume uno.

Código PHP:
$enviar=0;
if(isset(
$_POST[enviar])){
    
$enviar++;
    echo 
"Ha sido enviado $enviar veces <br />";} 
Siempre aparece 1 en vez de empezar de 0, no se si será posible contar con isset y el botón enviar.

El resto de pruebas lo tengo así donde también se que me faltan varias cosas ya que solo estoy probando hasta deducir el ejercicio al completo.


Código PHP:
<?
function hacer_formulario()
{
echo 
"<form action=\"funciones-ejercicio-probando.php\" method=\"post\">
<input type=\"text\" name=\"nombre\" /> Nombre<br />
<input type=\"text\" name=\"contraseña\" /> Contraseña<br />
<input type=\"submit\" name=\"enviar\" />
</form>"
;
$enviar=0;
if(isset(
$_POST[enviar])){
    
$enviar++;
    echo 
"Ha sido enviado $enviar veces <br />";}
    
$nombre=$_REQUEST[nombre];
    
$contraseña=$_REQUEST[contraseña];
if (isset(
$_POST[nombre]) && $_POST[nombre]!="") {
    echo 
"$nombre <br />";}
    else {echo 
"Rellene su nombre<br />";}
if (isset(
$_POST[contraseña]) && $_POST[contraseña]!="") {
    echo 
"$contraseña]<br />";}
    else {echo
"Rellene su contraseña<br />";}
}
hacer_formulario();
?>
Saludos.
  #2 (permalink)  
Antiguo 05/12/2010, 13:41
 
Fecha de Ingreso: mayo-2010
Mensajes: 185
Antigüedad: 13 años, 11 meses
Puntos: 2
Respuesta: Contar envios en un formulario con submit/enviar

mmm, men yo creo que siempre empieza desde uno por que necesitas dar clic para ver cuantas veces a sido clikeado, y si das clic va a empezar desde uno
  #3 (permalink)  
Antiguo 05/12/2010, 13:51
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Contar envios en un formulario con submit/enviar

Lo que sucede es que necesitas un lugar donde PHP verifiqué cuantas veces se ha pulsado dicho botón. Puedes usar base de datos, archivos, etc. Mi recomendación es base de datos. Luego sería actualizar el resultado en la base de datos. Acuérdate que PHP es un lenguaje "stateless", con ello quiero decir que no se acuerda luego que termina de ejecutarse lo que hiciste y las variables no se mantienen (a menos que uses sesiones o cookies, pero esto solo afectará a la persona que lo hace). Termina la memoria cuando acaba la aplicación.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #4 (permalink)  
Antiguo 05/12/2010, 13:59
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Contar envios en un formulario con submit/enviar

Ok entiendo. Por ahora no he llegado al tema de sesiones o cookies ni tampoco a bases de datos, así que lo mismo pruebo con un archivo.txt

Gracias por vuestra ayuda
  #5 (permalink)  
Antiguo 07/12/2010, 07:05
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Contar envios en un formulario con submit/enviar

Hola de nuevo.

He probado la opción de contar desde un .txt y más o menos me sale correcto.

Código PHP:
<?php
$aintentos 
fopen("intentos.txt""a+");
$aintentos fopen("intentos.txt""r");
$cintentos fread($aintentos1024);
fclose($aintentos);

$cintentos $cintentos 1;
echo 
"<p>Intentos de contraseña:" $cintentos "</p>";
$aintentos fopen("intentos.txt""w");
fwrite($aintentos$cintentos);
fclose($aintentos);
?>
Luego intento recoger el nº de envios o de intentos de contraseña para no pasar de 2 ya que solo hay dos intentos para acertar la contraseña correcta pero no termino de enlazarlo todo.

Código PHP:
<?
function hacer_formulario()
{
//Primero creo el formulario para mostrar
echo "<form action=\"funciones-ejercicio-probando2b.php\" method=\"post\">
<input type=\"text\" name=\"nombre\" /> Nombre<br />
<input type=\"text\" name=\"contraseña\" /> Contraseña<br />
<input type=\"submit\" name=\"enviar\" />
</form>"
;
//Recojo las variables nombre y contraseña
$nombre=$_REQUEST[nombre];
$contraseña=$_REQUEST[contraseña];
//Preparo una contraseña real
$contraseñareal="per78";
//Abro y creo un archivo de texto para guardar nombre y contraseña
$ftextofopen("formulario.txt""a+") or die("Ha surgido un problema al crear el archivo");
fwrite($ftexto,"\r\n");
//Recojo el nombre en pantalla y en el archivo.txt
if (isset($_POST[nombre]) && $_POST[nombre]!="") {
    echo 
"$nombre <br />";}
elseif (isset(
$_POST[nombre]))
{echo 
"Rellene su nombre<br />";}
fwrite($ftexto,"Su nombre es: $nombre");
fwrite($ftexto,"\r\n");
//Preparo el número de intentos máximo para acertar la contraseña
$intentos=2;
//Recojo la contraseña en pantalla y en el archivo.txt
fwrite($ftexto,"Su contraseña es: $contraseña");
fwrite($ftexto,"\r\n");
include(
'contador-intentos.php'); //aquí meto el contador de intentos
if (isset($_POST[contraseña]) && $_POST[contraseña]!="") {
     if(
$contraseña==$contraseñareal)
     {echo 
"Contraseña correcta - ";}
    elseif (
$contraseña!=$contraseñareal and $cintentos<=2)
     {
$intentos=$intentos-1;
     echo 
"Contraseña incorrecta - Le quedan $intentos intentos - ";}
     echo 
"$contraseña<br />";}
elseif(
$contraseña!=$contraseñareal and $cintentos>2)
{echo 
"Contraseña incorrecta - No tiene más intentos";}
elseif(isset(
$_POST[contraseña]))
{echo
"Rellene su contraseña<br />";}
fwrite($ftexto,"Intentos realizados: $intentos");
fwrite($ftexto,"\r\n");
fclose($ftexto);
}
hacer_formulario();
?>
Se que con un .txt no es lo mejor pero es el ejercicio que me piden. ¿como puedo enlazar correctamente ese recuento?
  #6 (permalink)  
Antiguo 07/12/2010, 07:11
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 13 años, 4 meses
Puntos: 13
Respuesta: Contar envios en un formulario con submit/enviar

Si lo haces con un txt es para todos los usuarios, si quieres que para cada usuario tendrias que hacer algo mas complicado o usar sessiones y/o cookies.

Código PHP:
$enviar=0
if(isset(
$_POST[enviar])){ 
    
$enviar++; 
    echo 
"Ha sido enviado $enviar veces <br />";} 
Yo eso lo pondria asi:

Código PHP:
if(isset($_SESSION['veces']) {
   
$veces $_SESSION['veces'];
}else{
   
$veces 0;
}
$veces++;
$_SESSION['veces'] = $veces;

echo 
"Ha sido enviado $veces veces <br />"
  #7 (permalink)  
Antiguo 07/12/2010, 07:11
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Contar envios en un formulario con submit/enviar

Trata esta forma sencilla
Código PHP:
Ver original
  1. <?php
  2. $file = 'file.txt';
  3. if(!file_exists($file)){ file_put_contents($file, 0);}
  4. $count = file_get_contents($file) + 1;
  5. file_put_contents($file, $count);
  6. echo $count;

Edito:
El problema con las sesiones es que afecta solamente al usuario que está trabajando al momento.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 08/12/2010, 06:08
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Contar envios en un formulario con submit/enviar

Hola de nuevo.

areslepra , la forma de hacerla con sessiones y/o cookies la dejo para más adelante ya que a esa parte todavía no he llegado, así que por ahora anoto tu explicación hasta que llegue a ese tema. Gracias.


abimaelrc he seguido tu ejemplo y he cambiado algunas cosas, por ejemplo en el contador en vez de empezar de 0 le meto -1 ya que al cargar la url ya me hace una cuenta, y así empieza de 0 en pantalla.

Código PHP:
<?php
$file 
'file.txt';
if(!
file_exists($file)){ file_put_contents($file, -1);}
$count file_get_contents($file) + 1;
file_put_contents($file$count);
//echo $count;
?>
Por otro lado creo que todo va bien, lo único que veo es que el campo de contraseña no hace el conteo aparte, es decir que el conteo lo hace siempre que se refresque o se envie el formulario aunque el campo contraseña esté vacio.

¿Es posible no sumar 1 cuanto el campo de contraseña está vacío?

Código PHP:
<?php
function hacer_formulario()
{
//Primero creo el formulario para mostrar
echo "<form action=\"funciones-ejercicio-probando4.php\" method=\"post\">
<input type=\"text\" name=\"nombre\" value=\"$_POST[nombre]\"/> Nombre<br />
<input type=\"text\" name=\"contraseña\" /> Contraseña<br />
<input type=\"submit\" name=\"enviar\" />
</form>"
;
//Recojo las variables nombre y contraseña
$nombre=$_REQUEST[nombre];
$contraseña=$_REQUEST[contraseña];
//Preparo una contraseña real
$contraseñareal="per78";
include(
'file.php'); //aquí meto el contador de intentos
if (isset($_POST[nombre]) && $_POST[nombre]!="") {
    echo 
"$nombre <br />";}
elseif (isset(
$_POST[nombre]))
{echo 
"Rellene su nombre<br />";}
if (isset(
$_POST[contraseña]) && $_POST[contraseña]!="" and $contraseña==$contraseñareal)
     {echo 
"Contraseña correcta.";}
elseif (isset(
$_POST[contraseña]) && $_POST[contraseña]!="" and $contraseña!=$contraseñareal)
     if(
$count<2)
    {echo 
"Contraseña incorrecta - Intentelo de nuevo. Lleva $count intentos";}
    else {echo 
"Contraseña incorrecta - No tiene más intentos. Lleva $count intentos";}
elseif(isset(
$_POST[contraseña]))
{echo
"Rellene su contraseña<br />";
/*$count=$count-1;*/}
}
hacer_formulario();
?>
Saludos
  #9 (permalink)  
Antiguo 08/12/2010, 06:40
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Contar envios en un formulario con submit/enviar

Haz una verificación usando algún condicional que use la función empty para verificar si el campo está vacio. Te recomiendo que antes depures para ver si realmente está vacio es decir algo así
Código PHP:
Ver original
  1. <?php
  2. /**
  3.  * Si es POST cambia la variable a $_POST o si quieres puedes usar $_REQUEST
  4.  */
  5. $pass = !empty($_GET['pass']) ? trim($_GET['pass']) : null;
  6. if(!empty($pass)){
  7.     echo 'algo';
  8. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #10 (permalink)  
Antiguo 08/12/2010, 09:38
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Contar envios en un formulario con submit/enviar

Hola de nuevo.

Ahora me he liado un poco y no termino de entenderlo, si por ejemplo preparo esto solo se muestra o coge el valor cuando pulso el botón enviar estando el campo de contraseña lleno:

Código PHP:
$contraseña = !empty($_POST['contraseña']) ? trim($_POST['contraseña']) : null;
if(!empty(
$contraseña)){
    
//$count=$count-1;
    //echo $count=$count-1;
    
echo "vacio o algo";

¿Supuestamente si está vacio debería de mostrar "vacio o algo"?

He intentado tambien jugar con el mismo conteo que el anterior (en este caso -1) ya que no he entendido del todo el planteamiento.
  #11 (permalink)  
Antiguo 08/12/2010, 09:51
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 13 años, 4 meses
Puntos: 13
Respuesta: Contar envios en un formulario con submit/enviar

Estas entendiendo mal el uso de la función empty, cuando el campo es null devuelve true en caso contrario false.
El operador ! es el de negación por lo que si vamos a tu código:

Código PHP:
if(!empty($contraseña)){ 
Ese if se ejecuta si el campo contraseña no esta vacío. Lo que es lo contrario de lo que vos pensas.
Si queres contar, el código anterior para contar lo tendrías que poner dentro del if.
  #12 (permalink)  
Antiguo 08/12/2010, 12:22
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Contar envios en un formulario con submit/enviar

Te recomiendo que mires esta tabla de compraciones http://www.php.net/manual/es/types.comparisons.php para que veas como usarlo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #13 (permalink)  
Antiguo 15/12/2010, 11:19
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Contar envios en un formulario con submit/enviar

Cita:
Iniciado por areslepra Ver Mensaje
Estas entendiendo mal el uso de la función empty, cuando el campo es null devuelve true en caso contrario false.
El operador ! es el de negación por lo que si vamos a tu código:

Código PHP:
if(!empty($contraseña)){ 
Ese if se ejecuta si el campo contraseña no esta vacío. Lo que es lo contrario de lo que vos pensas.
Si queres contar, el código anterior para contar lo tendrías que poner dentro del if.
Gracias areslepra, justo al ponerlo dentro del if ya todo va bien.

Cita:
Iniciado por abimaelrc Ver Mensaje
Te recomiendo que mires esta tabla de compraciones http://www.php.net/manual/es/types.comparisons.php para que veas como usarlo.
Gracias por el enlace lo reviso y guardo en mis apuntes.

Saludos.

Etiquetas: contar, envios, formulario
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 16:55.