Foros del Web » Programando para Internet » PHP »

Engañar al navegador para evitar reenvio de variables

Estas en el tema de Engañar al navegador para evitar reenvio de variables en el foro de PHP en Foros del Web. Hola a todos!, estoy implementando en mi sitio algo asi como "votar", intente hacerlo con ajax pero soy muy novato en ese lenguaje, tendré que ...
  #1 (permalink)  
Antiguo 10/03/2011, 15:05
Avatar de VbOkonly  
Fecha de Ingreso: julio-2009
Ubicación: San Justo, Buenos Aires, Argentina
Mensajes: 490
Antigüedad: 14 años, 9 meses
Puntos: 5
Engañar al navegador para evitar reenvio de variables

Hola a todos!, estoy implementando en mi sitio algo asi como "votar", intente hacerlo con ajax pero soy muy novato en ese lenguaje, tendré que practicar con algo mas facil ...
Lo hize con php, les paso el codigo y despues les cuento mi gran problema:

en el header:

Código PHP:
<?php if($_POST['verificate'] == "ok"){
mysql_query('INSERT votos SET noticia_id = "'.$var.'"',$db);
$_POST['verificate'] = "";
unset(
$_POST['verificate']);
 } 
?>
En el body en un formulario:

Código PHP:
<div id="voto">
      <?php if($_COOKIE["idform".$var] != $_SERVER['PHP_SELF']."?mascota=".$var){ ?>
      <form action="<?php $_SERVER['PHP_SELF']."?mascota=".$var?>" method="post" name="votar" id="votar">
      <input type="hidden" id="verificate" name="verificate" value="ok" />
      <input type="hidden" id="noticia_id" name="noticia_id" value="<?php echo $var?>"/>
      <a href="javascript:cookie();
      javascript:votar();"><img id="mascotear" src="Images/mascotear.gif" /></a>
      </form><?php } else { ?>
       <img src="Images/yahasmascoteado.gif" /> <?php ?>
      </div>
y si necesitan el javascript para variar ... :

Código Javascript:
Ver original
  1. <script>
  2. function votar()
  3. {
  4. document.votar.submit()
  5. }
  6. function cookie()
  7. {
  8. document.cookie= "<?php echo "idform".$var; ?> = <?php echo $_SERVER['PHP_SELF']."?mascota=".$var; ?>";
  9. }
  10. </script>

Inserté php en las cookies de javascript, por ahora todos contentos, me funciona todo, pero cuando le doy f5 (haciendo testing), en mi caso, uso firefox, me pide reenviar las variables, y chan!, ya intente vaciar la variable, destruirla pero me sigue llenando la database ... Digamos que una persona comun no sabría este error de codigo, pero alguien que entiende seguro me llenará la tabla "votos" con votos falsos xD. lo demás todo bien, mi unico problema es el f5.

¿Como puedo evitar que los navegadores envien los datos nuevamente? hace mucho lei que como medida de seguridad, los navegadores guardan las ultimas variables que se pasan, pero ahi está mi problema, cuando las guardan me hacen la vida imposible :P
¿Existe otro metodo logico o alguna funcion para que cuando reenvie entre por falso?

Saludos!
  #2 (permalink)  
Antiguo 10/03/2011, 15:18
Avatar de bUllan9ebrio  
Fecha de Ingreso: enero-2011
Ubicación: Chile
Mensajes: 1.128
Antigüedad: 13 años, 2 meses
Puntos: 128
Respuesta: Engañar al navegador para evitar reenvio de variables

vaciaste la variable al principio del codigo??? intenta enviando una variable desde la pagina anterior por ejemplo:

Código PHP:
Ver original
  1. $variable=$_REQUEST['variable'];
  2.  
  3. if ($variable=="puedevotar")
  4. {
  5.  
  6. }
  7. else
  8. muestra las estadisticas

si llega a actualizar la $variable va a ser vacia, por lo tanto deberia entrar al else
  #3 (permalink)  
Antiguo 10/03/2011, 15:33
Avatar de VbOkonly  
Fecha de Ingreso: julio-2009
Ubicación: San Justo, Buenos Aires, Argentina
Mensajes: 490
Antigüedad: 14 años, 9 meses
Puntos: 5
Respuesta: Engañar al navegador para evitar reenvio de variables

Hola, gracias por responder!
Mira, la variable si la fulmino a principio de codigo no funciona, en teoría estoy enviando el formulario "votar"(es el codigo que esta en el medio del thread)por $PHP_SELF, es decir, al mismo formulario xD.
Le agregué esto:

Código PHP:
<?php if($_POST['verificate'] == "ok"){
mysql_query('INSERT votos SET noticia_id = "'.$var.'"',$db);
$_POST['verificate'] = "";
unset(
$_POST['verificate']);
 } 
?>
cuando reenvia por $PHP_SELF, pregunta si verificate tiene el valor "ok" si lo tiene hace la query y en teoria tendria que variar la variable y destruirla(puse las dos formas para estar segura de que se muera bien) pero apreto f5 y nada ...

en cuanto a lo de $REQUEST[] no tengo idea de donde ponerlo, como seria?

Gracias
  #4 (permalink)  
Antiguo 10/03/2011, 15:37
Avatar de VbOkonly  
Fecha de Ingreso: julio-2009
Ubicación: San Justo, Buenos Aires, Argentina
Mensajes: 490
Antigüedad: 14 años, 9 meses
Puntos: 5
Respuesta: Engañar al navegador para evitar reenvio de variables

Código PHP:
<?php if($_REQUEST['verificate'] == "ok"){
mysql_query('INSERT votos SET noticia_id = "'.$var.'"',$db);
$_REQUEST['verificate'] = "";
unset(
$_REQUEST['verificate']);
 } 
?>
Lo puse aca y me hace lo mismo que $_POST :P y me llena igual la db, nose porque no se destruye la variable ... voy a intentar cambiar el hidden del form, creo que esta ahi el problema, ahora te cuento!
  #5 (permalink)  
Antiguo 10/03/2011, 16:25
Avatar de VbOkonly  
Fecha de Ingreso: julio-2009
Ubicación: San Justo, Buenos Aires, Argentina
Mensajes: 490
Antigüedad: 14 años, 9 meses
Puntos: 5
Respuesta: Engañar al navegador para evitar reenvio de variables

imposible, i hate you navigator.
intentaré con
Código PHP:
mysql_num_rows 
voy a insistir con el thread para los nuevos como yo hacerlo en php, si consigo la solucion la postearé
  #6 (permalink)  
Antiguo 10/03/2011, 16:30
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Engañar al navegador para evitar reenvio de variables

y se te ha ocurrido, después de hacer los cambios, redireccionar usando header() ?

porque vamos... que de otra forma es imposible, caray!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 10/03/2011, 18:32
Avatar de VbOkonly  
Fecha de Ingreso: julio-2009
Ubicación: San Justo, Buenos Aires, Argentina
Mensajes: 490
Antigüedad: 14 años, 9 meses
Puntos: 5
Respuesta: Engañar al navegador para evitar reenvio de variables

Es verdad, no la pensé pateketrueke, i love you(L)

solo tuve que modificar esto en el header:

Código PHP:
<?php if($_POST['verificate'] == "ok"){
mysql_query('INSERT votos SET noticia_id = "'.$var.'"',$db);
$_POST['verificate'] = "";
unset(
$_POST['verificate']);
header('location:verrecuerdo.php?mascota='.$var);
 } 
?>
Gracias!!!!!!!!, desde las 4 de la tarde estoy, y son las 9:32 de la noche :DD!, cosas que pasan no ?:P

Etiquetas: reenvio, variables, navegadores
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 14:53.