[risolto] evitare refresh index dopo recaptcha sbagliato

  • Creatore Discussione Creatore Discussione andreto
  • Data di inizio Data di inizio

andreto

Utente Attivo
5 Dic 2012
88
0
0
Ciao a tutti,
vorrei aggiungere il recaptcha di google al modulo registrazione del mio sito però noto che se sbaglio a scrivere le parole, il recaptcha aggiorna completamente la pagina eliminando tutti i dati già inseriti dall'utente nelle input text e quindi l'utente dovrebbe riscriverli tutti.

Ho provato ajax ma senza successo.

- Potrei passare le variabili contenenti i valori delle input text alla pagina verify.php e poi ritornarle alla index.php.
- Potrei anche usare history.back() di javascript.

Ma ad essere sincero nessuna di queste due soluzioni mi piace.

Vorrei non far ri-aggiornare la pagina index.php.

Sapete dirmi se esiste un metodo per fare questo?

Grazie :byebye:
 
Ciao, potresti risolvere cosi
PHP:
<input type="text" name="nome" value="<?php echo isset($_POST['nome']) ? $_POST['nome'] : ""; ?>"/>
I campi compilati verranno reimpostati
 
Ciao, potresti risolvere cosi
PHP:
<input type="text" name="nome" value="<?php echo isset($_POST['nome']) ? $_POST['nome'] : ""; ?>"/>
I campi compilati verranno reimpostati

Grazie criric per la risposta,
avrei voluto però non uscire dalla pagina index proprio come avviene con ajax o al massimo includendo il recaptcha in un iframe ma non ci sono riuscito.
Se questo è comunque il metodo più semplice o consigliato userò questo.


Curiosità: Come mai facebook una volta utilizzava il recaptcha e ora non più?
Immagino per questione estetica e di velocità di iscrizione però con quale altro metodo si protegge contro i robot o spammer?
C'è un metodo valido come il recaptcha che non faccia perdere tempo all'utente nel registrarsi?
 
Non so come hai strutturato la pagina ma in teoria il submit dovrebbe richiamare la stessa index che verifica i dati inseriti e il captcha e se tutto regolare reindirizza da qualche parte
Io uso questa classe php, mi trovo abbastanza bene anche se utilizzo solo l'immagine senza audio e pulsante aggiorna
In pratica memorizza in sessione il codice che dovrai poi verificare con il post
 
Non so come hai strutturato la pagina ma in teoria il submit dovrebbe richiamare la stessa index che verifica i dati inseriti e il captcha e se tutto regolare reindirizza da qualche parte
Io uso questa classe php, mi trovo abbastanza bene anche se utilizzo solo l'immagine senza audio e pulsante aggiorna
In pratica memorizza in sessione il codice che dovrai poi verificare con il post

Risolto così:

prova.php

PHP:
<?php session_start(); ?>
<html>
    <body> 
     
      <form method="post" action="verify-captcha.php">
      <input type="text" name="nome" value="<?php echo ($_SESSION['nome']); unset($_SESSION['nome']); ?>" /> 
      
        <?php
          require_once('recaptcha-php-1.11/recaptchalib.php');
          $publickey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; 
          echo recaptcha_get_html($publickey);
        ?>
        <input type="submit" />
      </form>
            
      </body>
  </html>

verify-captcha.php

PHP:
<?php
session_start();
$nome = $_POST["nome"];

  require_once('recaptcha-php-1.11/recaptchalib.php');
  $privatekey = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy";
  $resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);

  if (!$resp->is_valid) {    
	$_SESSION['nome']=$nome;
    header("location:prova.php");
	exit;
  } else {
    // ok
  }
  ?>

come ti sembra?
 
Ultima modifica:
puoi utilizzare la funzione array_merge() per unire alla sessione tutti gli elementi del post
PHP:
$_SESSION = array_merge($_SESSION, $_POST);
prima però ti conviene ripulirli
PHP:
foreach ($_POST as $key => $value) {
    $_POST[$key] = htmlentities($value);
}
 
Ultima modifica:
Perfetto, ora mi piace di più :fonzie::fonzie:

Questo è il risultato:

prova.php (rimasto invariato)
PHP:
<?php session_start(); ?>

<html>
    <body> 
     
      <form method="post" action="verify-captcha.php">
      <input type="text" name="nome" value="<?php echo ($_SESSION['nome']); unset($_SESSION['nome']); ?>" /> 
      
        <?php
          require_once('recaptcha-php-1.11/recaptchalib.php');
          $publickey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; 
          echo recaptcha_get_html($publickey);
        ?>
        <input type="submit" />
      </form>
            
      </body>
  </html>

verify-captcha.php
PHP:
<?php
session_start();
include ('ripulisci.php');
ripulisci ($_POST);

  require_once('recaptcha-php-1.11/recaptchalib.php');
  $privatekey = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy";
  $resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);

  if (!$resp->is_valid) {    
	$_SESSION = array_merge($_SESSION, $_POST);
        header("location:prova.php");
	exit;
  } else {
    # ok
  }
  ?>

ripulisci.php
PHP:
<?php
function ripulisci(&$v)
{
# controlliamo che la variabile sia un array
if (is_array($v))
 {
# se si tratta di un array inizializziamo il ciclo
 foreach ($v as $k => $val)
 {
# filtriamo tutti i valori
 $v[$k] = htmlentities(strip_tags(trim($val)),ENT_QUOTES);
 }
 }else{
# se la variabile non è un array
# applichiamo i filtri senza ciclo
 $v = htmlentities(strip_tags(trim($v)),ENT_QUOTES);
 }
# in ogni caso otterremo il valore di ritorno
return $v;
}
?>

Grazie :beer:
 
Ultima modifica di un moderatore:
Alla registrazione ormai sono pochi i siti che usano il captcha.
È una questione di estetica e di usabilità anche perché poi viene sempre (o quasi) richiesta una conferma della mail all'utente per l'attivazione del profilo.
 

Discussioni simili