antispam con somma

onebill964

Utente Attivo
21 Giu 2009
46
0
0
venezia
Salve a tutti ragazzi,
ho un form per l'iscrizione utenti nel sito ,ora vorrei(anzi sono costretto!)aggiungere un campo per un controllo antispam costituito da una somma di 2 cifre create con la funzione "rand"che l'utente deve inserire.Ora tutto bene finchè controllo che il campo sia inviato, non sia vuoto e sia numerico; il problema sorge quando devo inserire il controllo che verifichi che la cifra inserita dall'utente sia uguale(o non sia diversa) alla somma dei due valori!!!
Da giorni ci sbatto la testa:incazz::confused:
spero che qualcuno sappia darmi un aiuto.Grazie
posto il codice:
Codice:
          <div align="center">
            <h3><strong><span class="style1">Member Area - Registration Page -</span></strong></h3>
<?php	  
// controllo sul parametro d'invio
if(isset($_POST['submit']) && (trim($_POST['submit']) == "registrati"))
{ 
  // controllo sul formato dell'email
  if((!isset($_POST['email'])) || (!eregi("^([a-z0-9\._-]+)(@[a-z0-9.-]+)(\.{1}[a-z]{2,4})$", $_POST['email'])))
  {
    echo "Attenzione, formato email non valido.";
  }
  // controllo sul formato della password deve essere alfanumerica e non deve superare i dieci caratteri di lunghezza
  elseif((!isset($_POST['password'])) ||  ($_POST['password'] == "") || (!preg_match("/^[a-z0-9]+$/i", $_POST['password'])) || (strlen(trim($_POST['password']) > 10)))
  {
    echo "La password deve essere alfanumerica e non più lunga di 10 caratteri.";
	}
	
	elseif((!isset($_POST['nome'])) || ($_POST['nome'] == "") || (!preg_match("/^[a-z0-9\-_]{0,20}$/", $_POST['nome'])))
	{
	echo "Inserire un nome valido";
  }
  	elseif((!isset($_POST['calcolo'])) || ($_POST['calcolo'] == "") || (!is_numeric($_POST['calcolo'])))
	{
	echo "Inserire il risultato numerico";
  }
//-------------------------------INIZIO VERIFICA NON FUNZIONANTE-------------------------
    elseif($calcolo!=$result)
	{
	echo "La somma non è esatta";
  }
//------------------------------FINE VERIFICA NON FUNZIONANTE--------------------------
else{
    // se i parametri sono corretti popoliamo il database
    $email = $_POST['email'];
    $password = $_POST['password'];
    $nome = $_POST['nome'];
    // ma prima controlliamo che la mail non sia già presente includiamo il file di configurazione
    @include "config.php";

    $ctrl_mail = @mysql_query("SELECT id FROM iscrizioni WHERE email='$email'") or die (mysql_error());
    if(@mysql_num_rows($ctrl_mail)>0)
    {
      echo "L'email risulta già stata registrata.";
    }else{
      // query d'inserimento
      if(@mysql_query("INSERT INTO iscrizioni (email, password) VALUES('$email','$password')") or die (mysql_error()))
      {
        // messaggio di conferma
        echo "Conferma l'iscrizione tramite la mail che ti abbiamo inviato.";

        // email per la conferma
        // intestazioni
        $headers = "From: $admin_email\nreply-To: noreply\r\n";
        $subject = "Conferma la tua iscrizione.";
        //corpo del messaggio
        $messaggio = "Ti ringraziamo per la tua iscrizione.\n";
        $messaggio .= "La tua user è: ".$email."\n";
        $messaggio .= "La tua password è: ".$password."\n";
        $messaggio .= "Per confemare vai alla pagina http://www.sito/conferma.php ";
        $messaggio .= "e inserisci i dati per l'autenticazione.\n"; 
        // invio dell'email
        @mail($email, stripslashes($subject),stripslashes($messaggio),$headers);
		//invio email al webmaster
		//$webmaster = "info@mia-email";
$email1 ="$email";
$mailTo1="$admin_email";
$mailHeaders1="From: $email1";
$mailSubject1="[Inserire il nome del sito]
                  Nuovo UTENTE registrato";
$mailBody1.="Ciao!\n\n";
$mailBody1.="Un nuovo utente si è registrato!\n\n";
$mailBody1.="Questi sono i suoi dati:\n\n";
$mailBody1.="Username: $nome\n";
$mailBody1.="passwd: $passwd\n";
$mailBody1.="Email: $email1\n";
@mail($mailTo1, stripslashes($mailSubject1),stripslashes($mailBody1),$mailHeaders1);
//---------
      }
    }
  } 
}else{
   form per l'iscrizione
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
            <table align="center" bgcolor="#FFFF99" class="tabella">
            <tr bgcolor="#FFFF66">
                  <td colspan="2"><div align="center"><div align="center">
                    <h3 class="style1">Register New User</h3>
                  </div></div></td>
                </tr>
                <tr>
                  <td colspan="2"><span class="style3">Name </span><strong><span class="style2">*** </span>:</strong></td>
                </tr>
                <tr>
                  <td colspan="2"><input type="text" name="nome" id="nome" /></td>
                </tr>
                <tr>
                  <td colspan="2"><strong class="style3">E-mail</strong> <span class="style2">***</span><strong class="style3"> : ( User )</strong></td>
                </tr>
                <tr>
                  <td colspan="2"><input type="text" name="email" id="email" /></td>
                </tr>
                <tr>
                  <td colspan="2"><strong class="style3">Password</strong> <span class="style2">***</span><strong>:</strong></td>
                </tr>
                <tr>
                  <td colspan="2"><input type="password" name="password" id="password" /></td>
                </tr>
                <tr>
                  <td colspan="2"><strong class="style3">AntiSpam Control</strong><span class="style2"> **<strong>*</strong></span><strong class="style3">: ( Please enter the sum belowe )</strong></td>
                </tr>
                <tr>
                  <td width="147">
<?php
$x=rand(0,15);
$y=rand(0,15);
$result=$x+$y;
?>                  
                <?php echo "$x";?><strong class="style3"> +</strong> <?php echo "$y";?>&nbsp;<strong class="style3"> =</strong>
                  </td>
                  <td width="205"> <input name="calcolo" type="text" id="calcolo" size="6" maxlength="3" /></td>
              </tr>
                <tr>
                  <td colspan="2" class="style2">*** All fields are required</td>
                </tr>
                <tr>
                  <td colspan="2"><div align="center">
                     <input type="submit" name="submit" id="submit" value="registrati" />
                  </div></td>
                </tr>
              </table>
          </form></div>
<?php
}
?>
 
Ciao,
quando invii il form perdi il dato $result, che viene ricalcolato.
Devi trovare il modo di avere ancora quel dato una volta inviato il form.
Un modo potrebbe essere quello di utilizzare le variabili di sessione modificando queste righe
PHP:
elseif($calcolo!=$result)
...
$result=$x+$y;
in questo modo:
PHP:
elseif($_POST['calcolo']!=$_SESSION['result'])
...
$_SESSION['result']=$x+$y;

Ovviamente all'inizio della pagina, se già non lo fai, dovrai inizializzare la sessione con
PHP:
session_start();

Alessandro
 
somma antispam

salve ragazzi,prima di tutto grazie per le vostre risposte,
uso già captcha in un altro form e la somma (che non so il motivo ma la preferisco) in un altro ancora solo che il form dove ho inserito il controllo tramite somma è piu semplice dall momento che passo tutti i valori ad un altro file che controlla il tutto e poi invia la mail ,al contrario non ho simpatia per i form dove tutto si trova nella stessa pagina.
Cmq è il controllo della somma che mi da errore nel senso che anche se inserisco la somma esatta mi da sempre 'somma errata'!
Stasera provo con le sessioni poi vi so dire...
Grazie ancora
 
somma php

Ciao,ho provato con le sessioni come mi hai indicato ma continuo a ricevere sempre lo stesso errore "somma non corretta"
Provero' con più calma..
cmq grazie
 
somma antispam

Niente da fare!!Ho provato con le sessioni ma non va :hammer:
Posto il codice completo della pagina registrazione:
Codice:
<?php
session_start();
$x=rand(0,15);
$y=rand(0,20);
$_SESSION['result']=$x+$y;	  
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<?php	  
// controllo sul parametro d'invio
if(isset($_POST['submit']) && (trim($_POST['submit']) == "registrati"))
{ 
  // controllo sul formato dell'email
  if((!isset($_POST['email'])) || (!eregi("^([a-z0-9\._-]+)(@[a-z0-9.-]+)(\.{1}[a-z]{2,4})$", $_POST['email'])))
  {
    echo "Attenzione, formato email non valido.";
  }
  // controllo sul formato della password deve essere alfanumerica e non deve superare i dieci caratteri di lunghezza
  elseif((!isset($_POST['password'])) ||  ($_POST['password'] == "") || (!preg_match("/^[a-z0-9]+$/i", $_POST['password'])) || (strlen(trim($_POST

['password']) > 10)))
  {
    echo "La password deve essere alfanumerica e non più lunga di 10 caratteri.";
	}
	
	elseif((!isset($_POST['nome'])) || ($_POST['nome'] == "") || (!preg_match("/^[a-z0-9\-_]{0,20}$/", $_POST['nome'])))
	{
	echo "Inserire un nome valido";
  }
  	elseif((!isset($_POST['calcolo'])) || ($_POST['calcolo'] == "") || (!is_numeric($_POST['calcolo'])))
	{
	echo "Inserire il risultato numerico";
  }

        elseif($_POST['calcolo']!=$_SESSION['result'])
	{
	echo "La somma non è esatta";
  }

else{
    // se i parametri sono corretti popoliamo il database
    $email = $_POST['email'];
    $password = $_POST['password'];
    $nome = $_POST['nome'];
    // ma prima controlliamo che la mail non sia già presente includiamo il file di configurazione
    @include "config.php";

    $ctrl_mail = @mysql_query("SELECT id FROM iscrizioni WHERE email='$email'") or die (mysql_error());
    if(@mysql_num_rows($ctrl_mail)>0)
    {
      echo "L'email risulta già stata registrata.";
    }else{
      // query d'inserimento
      if(@mysql_query("INSERT INTO iscrizioni (email, password) VALUES('$email','$password')") or die (mysql_error()))
      {
        // messaggio di conferma
        echo "Conferma l'iscrizione tramite la mail che ti abbiamo inviato.";

        // email per la conferma
        // intestazioni
        $headers = "From: $admin_email\nreply-To: noreply\r\n";
        $subject = "Conferma la tua iscrizione.";
        //corpo del messaggio
        $messaggio = "Ti ringraziamo per la tua iscrizione.\n";
        $messaggio .= "La tua user è: ".$email."\n";
        $messaggio .= "La tua password è: ".$password."\n";
        $messaggio .= "Per confemare vai alla pagina http://www.sito/conferma.php ";
        $messaggio .= "e inserisci i dati per l'autenticazione.\n"; 
        // invio dell'email
        @mail($email, stripslashes($subject),stripslashes($messaggio),$headers);
		//invio email al webmaster
		//$webmaster = "info@mia-email";
$email1 ="$email";
$mailTo1="$admin_email";
$mailHeaders1="From: $email1";
$mailSubject1="[Inserire il nome del sito]
                  Nuovo UTENTE registrato";
$mailBody1.="Ciao!\n\n";
$mailBody1.="Un nuovo utente si è registrato!\n\n";
$mailBody1.="Questi sono i suoi dati:\n\n";
$mailBody1.="Username: $nome\n";
$mailBody1.="passwd: $passwd\n";
$mailBody1.="Email: $email1\n";
@mail($mailTo1, stripslashes($mailSubject1),stripslashes($mailBody1),$mailHeaders1);
//---------
      }
    }
  } 
}else{
   form per l'iscrizione
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
            <table align="center" bgcolor="#FFFF99" class="tabella">
            <tr bgcolor="#FFFF66">
                  <td colspan="2"><div align="center"><div align="center">
                    <h3 class="style1">Register New User</h3>
                  </div></div></td>
                </tr>
                <tr>
                  <td colspan="2"><span class="style3">Name </span><strong><span class="style2">*** </span>:</strong></td>
                </tr>
                <tr>
                  <td colspan="2"><input type="text" name="nome" id="nome" /></td>
                </tr>
                <tr>
                  <td colspan="2"><strong class="style3">E-mail</strong> <span class="style2">***</span><strong class="style3"> : ( User )</strong></td>
                </tr>
                <tr>
                  <td colspan="2"><input type="text" name="email" id="email" /></td>
                </tr>
                <tr>
                  <td colspan="2"><strong class="style3">Password</strong> <span class="style2">***</span><strong>:</strong></td>
                </tr>
                <tr>
                  <td colspan="2"><input type="password" name="password" id="password" /></td>
                </tr>
                <tr>
                  <td colspan="2"><strong class="style3">AntiSpam Control</strong><span class="style2"> **<strong>*</strong></span><strong class="style3">: ( 

Please enter the sum belowe )</strong></td>
                </tr>
                <tr>
                  <td width="147">                  
                <?php echo "$x";?><strong class="style3"> +</strong> <?php echo "$y";?>&nbsp;<strong class="style3"> =</strong>
                  </td>
                  <td width="205"> <input name="calcolo" type="text" id="calcolo" size="6" maxlength="3" /></td>
              </tr>
                <tr>
                  <td colspan="2" class="style2">*** All fields are required</td>
                </tr>
                <tr>
                  <td colspan="2"><div align="center">
                     <input type="submit" name="submit" id="submit" value="registrati" />
                  </div></td>
                </tr>
              </table>
          </form></div>
<?php
}
?>
Spero qualcuno trovi dov'è l'errore
Grazie infinite.
 
somma antispam

Scusate dimenticavo l'errore è sempre 'la somma non è esatta'
anche se inserisco la somma giusta :byebye:
 
Ciao,
oltre alla modifica che ti ho suggerito io hai spostato il blocco
PHP:
$x=rand(0,15);
$y=rand(0,20);
$_SESSION['result']=$x+$y;
all'inizio della pagina quando avresti dovuto lasciarlo esattamente dov'era.
 
somma antispam

Hai ragione nella fretta e cercando di fare un po' di ordine ho spostato il blocco pensando che non influisse:(
Ora funziona egregiamente!!:mavieni:
Grazie infinite 6 proprio magic....ale
Una domanda,secondo te è valido come antispam?
Ciao Michele
 

Discussioni simili