Foros del Web » Programando para Internet » PHP »

Detectar si un botón ha sido pulsado

Estas en el tema de Detectar si un botón ha sido pulsado en el foro de PHP en Foros del Web. Me gustaría saber si hay alguna función en PHP que detecte si el botón de un formulario ha sido pulsado. Es decir, al igual que ...
  #1 (permalink)  
Antiguo 14/03/2011, 16:02
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 14 años
Puntos: 11
Detectar si un botón ha sido pulsado

Me gustaría saber si hay alguna función en PHP que detecte si el botón de un formulario ha sido pulsado.

Es decir, al igual que la función isset() devuelve TRUE si la variable a la que se aplica ha sido declarada, me gustaría conocer la forma de averiguar si un botón ha sido pulsado.

Aquí está el formulario, que contiene el botón:

Cita:
<form name="buscar" action="buscar.php" method="get">
Buscar: <input type="text" size="50" value="" name="palabra" />
<input type="submit" name="buscar" value="Buscar" />
</form>
Código PHP:
Ver original
  1. if (isset($_GET['buscar']) && $_GET['buscar'] == 'Buscar') {
  2.     $boton = "pulsado";
  3. }

Se trata de ponerle como condición al "if" de arriba que haya sido pulsado el botón "Buscar".
  #2 (permalink)  
Antiguo 14/03/2011, 16:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Detectar si un botón ha sido pulsado

Pues tal como lo tienes debe de funcionar, ya que los formularios HTML al pulsar botones del tipo 'submit' hacen la acción definida en el atributo action de tu form.

Así que para saber si presiono o no el botón con lo que haz puesto puedes hacerlo.

Saludos.
  #3 (permalink)  
Antiguo 14/03/2011, 16:13
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 14 años
Puntos: 11
Respuesta: Detectar si un botón ha sido pulsado

Cita:
Iniciado por GatorV Ver Mensaje
Pues tal como lo tienes debe de funcionar, ya que los formularios HTML al pulsar botones del tipo 'submit' hacen la acción definida en el atributo action de tu form.

Así que para saber si presiono o no el botón con lo que haz puesto puedes hacerlo.

Saludos.
Sí, tienes razón, pero mi código está distribuido en varios div's y entonces utilizaba a modo de interruptor el código siguiente:

Cita:
if (isset($_GET['buscar']) && $_GET['buscar'] == 'Buscar') {
$boton = "pulsado";
}
Luego en las demás partes del código que quería ejecutar hacía:

Cita:
<div id="estilo">
<?php
if ($boton = "pulsado") {
echo "instrucción primera en el primer div";
}
?>
</div>

<div id="estilo2">
<?php
if ($boton = "pulsado") {
echo "instrucción segunda en el segundo div";
}
?>
</div>
Increíblemente sin pulsar el botón buscar, se ejecutaba una de las instrucciones echo.
  #4 (permalink)  
Antiguo 14/03/2011, 16:18
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Detectar si un botón ha sido pulsado

Recuerda que en PHP para comparar debes de usar ==, = es para asignar:
Código PHP:
Ver original
  1. if ($foo == $bar) // bien
  2. if ($foo = $bar) // mal

Saludos.
  #5 (permalink)  
Antiguo 14/03/2011, 16:19
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 14 años
Puntos: 11
Respuesta: Detectar si un botón ha sido pulsado

Cita:
Iniciado por GatorV Ver Mensaje
Recuerda que en PHP para comparar debes de usar ==, = es para asignar:
Código PHP:
Ver original
  1. if ($foo == $bar) // bien
  2. if ($foo = $bar) // mal

Saludos.
Dios, que fuerte, que bestia soy jaja.

Muchas gracias GatorV ahora te cuento que tal.
  #6 (permalink)  
Antiguo 14/03/2011, 16:20
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 19 años, 6 meses
Puntos: 394
Respuesta: Detectar si un botón ha sido pulsado

La verdad no entiendo muy bien... si se pulsa el boton hay dos acciones diferentes en dos div diferentes ?

para saber si un boton se pulso debes hacer

if(isset($_POST['buscar'])){
// accion si se presiona
}else{
// accion si no se presiona
}
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #7 (permalink)  
Antiguo 14/03/2011, 16:34
 
Fecha de Ingreso: enero-2008
Mensajes: 27
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Detectar si un botón ha sido pulsado

No sé si te refieres a la opción de tener 2 botones en el formulario y hacer una cosa u otra en función del botçon que hayas pulsado. Si es esto, prueba lo siguiente:

Código:
<?php

if (isset($_POST['boton1'])) {
	...
	...
} 

if (isset($_POST['boton2'])) {
	...
	...
}
?>
....
....
....

<input type="submit" name="boton1" value="Enviar1" />
<input type="submit" name="boton2" value="Enviar2" />

Un saludo
  #8 (permalink)  
Antiguo 14/03/2011, 18:09
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 14 años
Puntos: 11
Respuesta: Detectar si un botón ha sido pulsado

Gracias a todos por vuestros comentarios, las sugerencias que me habéis hecho también eran válidas, sólo que en este caso el error concreto estaba en haber usado el operador de asignación "=" en lugar del operador de comparación "==", como bien me ha indicado GatorV.

Como se ve en el ejemplo que he puesto, pretendía ahorrar código estableciendo una especie de "interruptor" para ser usado en diferentes bloques de código PHP intercalados con código XHTML.

El formulario se ejecuta tanto desde la misma página como desde otras páginas, debido a que es un buscador interno.

También me surge otra duda...

En el siguiente fragmento de código, asigno como valor a la variable $palabra la cadena de texto contenida en el campo "palabra" y previamente escapada por la función addslashes(). Se trata de que si alguien busca un nombre como "O'reilly", el carácter comilla simple sea escapado.

Código PHP:
Ver original
  1. $palabra = addslashes($_GET['palabra']);

Sin embargo en php.net se dice lo siguiente:

Cita:
Es muy recomendado usar la función de escape de la misma base de datos, por ejemplo mysqli_real_escape_string() para MySQL...
Entonces, ¿convendría usar mysqli_real_escape_string en lugar de addslashes?
  #9 (permalink)  
Antiguo 14/03/2011, 19:44
 
Fecha de Ingreso: junio-2010
Mensajes: 142
Antigüedad: 14 años, 5 meses
Puntos: 5
Respuesta: Detectar si un botón ha sido pulsado

Mira con isset yo no lo e probado, lo que si e probado es que por ejemplo pongas:
Código:
if ($_GET['buscar']=="Buscar")
{

}
prueba esa forma, a mi por lo menos siempre me funciono 100% efectivo!.

Otra cosa, fíjate que en el formulario estas enviando las respuestas del mismo a una pagina "buscar.php", yo lo sacaría dejando el sin poner el action

Saludos y nos cuentas

Última edición por rossijona; 14/03/2011 a las 19:50
  #10 (permalink)  
Antiguo 14/03/2011, 20:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Detectar si un botón ha sido pulsado

Así es, si estas trabajando con MySQL es conveniente hacer eso, todo depende del RDBMS que uses, aunque para mayor seguridad te recomendaría usar PDO y usar prepared statements.

Saludos.
  #11 (permalink)  
Antiguo 15/03/2011, 20:13
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 14 años
Puntos: 11
Respuesta: Detectar si un botón ha sido pulsado

Cita:
Iniciado por GatorV Ver Mensaje
Así es, si estas trabajando con MySQL es conveniente hacer eso, todo depende del RDBMS que uses, aunque para mayor seguridad te recomendaría usar PDO y usar prepared statements.

Saludos.
GatorV, uso como sistema administrador de bases de datos MySQL, así que debería de ser oportuno, sin embargo al respecto de sustituir la función addslashes() de mi código por mysqli_real_escape_string(), tengo dudas.

En la descripción de la función addslashes() veo que esta lo que hace es escapar caracteres especiales, y en el paréntesis se coloca como parámetro una variable que contiene una cadena.

Cita:
string addslashes ( string $str )
En la descripción de mysqli_real_escape_string() (estilo por procesos), veo que aunque esta devuelve un string al igual que addslashes(), requiere dos parámetros obligatorios...

Cita:
string mysqli_real_escape_string ( mysqli $link , string $escapestr )
El segundo parámetro es una variable conteniendo un tipo de dato "string", pero, ¿qué tipo de dato es el del primer parámetro?

Doy por hecho que las dos funciones son "afines" en las acciones que realizan sobre una determinada cadena de texto, en mi código, uso addslashes() para filtrar una palabra que luego será comparada a través de una sentencia SQL tipo "AGAINST ('$cadena' IN BOOLEAN MODE)".

Entonces ¿dónde está el beneficio real de usar en mi caso mysqli_real_escape_string()?
  #12 (permalink)  
Antiguo 15/03/2011, 20:26
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Detectar si un botón ha sido pulsado

Que tal Gambinoh,

te dejo una referencia, y creo que mysqli_real_escape_string deberia usarse siempre que vas a atacar la bbdd, mientras que a addslahes la podrias utilizar para escapar un string que se va a utilizar en un XML por ejemplo.

Nota: El primer parametro es(segun el manual): Un identificador de enlace devuelto por mysqli_connect() o mysqli_init()

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #13 (permalink)  
Antiguo 16/03/2011, 16:22
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 14 años
Puntos: 11
Respuesta: Detectar si un botón ha sido pulsado

Cita:
Iniciado por masterpuppet Ver Mensaje
Que tal Gambinoh,

te dejo una referencia, y creo que mysqli_real_escape_string deberia usarse siempre que vas a atacar la bbdd, mientras que a addslahes la podrias utilizar para escapar un string que se va a utilizar en un XML por ejemplo.

Nota: El primer parametro es(segun el manual): Un identificador de enlace devuelto por mysqli_connect() o mysqli_init()

Saludos.
Ok, en ese caso aún me quedan algunas dudas...

Si uso mysql_connect, mysql_query, mysql_num_rows, etc. ¿no debería usar mysql_real_escape_string en lugar de mysqli_real_escape_string? Por otro lado, supongo que el primer parámetro de la función mysqli_real_escape_string() podría ser la variable que contiene la conexión ¿esto es correcto?

Código PHP:
Ver original
  1. <?php
  2. $conexion = mysqli_connect('localhost', 'root', '') or die("No se puede conectar");
  3. $cadena = $_GET['campo_de_texto_inventado'];
  4. mysqli_real_escape_string($conexion, $cadena);
  5. ...
  6. ?>
  #14 (permalink)  
Antiguo 16/03/2011, 16:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Detectar si un botón ha sido pulsado

A tus dos preguntas sí, si usas mysql_* usa mysql_real_escape_string, si usas mysqli_* usa mysqli_real_escape_string.

Saludos.
  #15 (permalink)  
Antiguo 16/03/2011, 16:41
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Detectar si un botón ha sido pulsado

Cita:
Iniciado por Gambinoh Ver Mensaje
...
Si uso mysql_connect, mysql_query, mysql_num_rows, etc. ¿no debería usar mysql_real_escape_string en lugar de mysqli_real_escape_string? Por otro lado, supongo que el primer parámetro de la función mysqli_real_escape_string() podría ser la variable que contiene la conexión ¿esto es correcto?
...
si a las dos preguntas, y ahora te pregunto yo :), hay alguna razón en especial para usar esas funciones en vez de PDO y prepared statments?

Edito:

@GatorV deja de primerearme(si existe la palabra) :)

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #16 (permalink)  
Antiguo 16/03/2011, 18:39
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 14 años
Puntos: 11
Respuesta: Detectar si un botón ha sido pulsado

Cita:
Iniciado por masterpuppet Ver Mensaje
si a las dos preguntas, y ahora te pregunto yo :), hay alguna razón en especial para usar esas funciones en vez de PDO y prepared statments?

Edito:

@GatorV deja de primerearme(si existe la palabra) :)

Saludos.
Bueno, es que desconocía completamente la existencia de PDO y prepared statments, así que cuando GatorV me recomendó su uso sentí vergüenza de preguntar...

Miré en la Wikipedia un poco por encima, pero no entendí muy bien de que se trataba.

Etiquetas: pulsado
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 07:53.