Questo file register.php chiama la funzione user_register() del file register_funcs.inc. Quando compilo il modulo rispettando tutti i controlli mi compare sempre lo stesso messaggio:

ERROR-Please fill in all fields correctly


mi aiutate?

Codice PHP:

<?php

/**********************************************************
 * Pagina di registrazione di un nuovo utente. Esistono   *
 * collegamenti a questa pagina nell’intestazione di ogni *
 * altra pagina per gli utenti connessi e disconnessi.    *
 * Potrebbe essere un difetto di progettazione, però;     *
 * è possibile voler mostrare questa pagina solo ai       *
 * visitatori che non hanno eseguito l’accesso.           *
 **********************************************************/

require_once("register_funcs.inc");
// inserisce il file con le funzioni per da richiamare per la registrazione
if ($submit == "Mail confirmation") {
  
$feedback user_register();

  
// In ogni caso viene fornito un feedback
  
$feedback_str "<P class=\"errormess\">$feedback</P>";
} else {
  
// Se non è verificato l'if mostra il modulo per 
  // la prima volta
  
$feedback_str "";
}


// --------------------
// VISUALIZZA IL MODULO
// --------------------

// Le variabili superglobali non funzionano con heredoc
$php_self $_SERVER["PHP_SELF"];
$reg_str = <<< EOREGSTR
<TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0 ALIGN=CENTER
  WIDTH=621>
<TR>
  <TD ROWSPAN=10>[img]../images/spacer.gif[/img]</TD>
  <TD WIDTH=606></TD>
</TR>
<TR>
 <TD>

// Modulo di registrazione.

$feedback_str
<P CLASS="left">[B]REGISTER[/B]

Fill out this form and a confirmation email will be sent to you.
Once you click on the link in the email your account will be
confirmed and you can begin to contribute to the community.</P>
<FORM ACTION="
$php_self" METHOD=”POST”>
<P CLASS="bold">First Name

<INPUT TYPE="TEXT" NAME="first_name" VALUE="
$first_name"
  SIZE="20" MAXLENGTH="25"></P>
<P CLASS="bold">Last Name

<INPUT TYPE="TEXT" NAME="last_name" VALUE="
$last_name" SIZE="20"
  MAXLENGTH="25"></P>
<P CLASS="bold">Username

<INPUT TYPE="TEXT" NAME="user_name" VALUE="
$user_name" SIZE="10"
  MAXLENGTH="25"></P>
<P CLASS="bold">Password

<INPUT TYPE="password" NAME="password1" VALUE="" SIZE="10"
  MAXLENGTH="25"></P>
<P CLASS="left">[B]Password[/B] (again)

<INPUT TYPE="password" NAME="password2" VALUE="" SIZE="10"
  MAXLENGTH="25"></P>
<P CLASS="left">[B]Email[/B] (required for confirmation)

<INPUT TYPE="TEXT" NAME="email" VALUE="
$email" SIZE="30"
  MAXLENGTH="50">
</P>


<INPUT TYPE="SUBMIT" NAME="submit"
          VALUE="Mail confirmation">
</P>
</FORM>

 </TD>
</TR>
</TABLE>
EOREGSTR;
echo 
$reg_str;

//site_footer();

?>


<?php


// ***************** FILE REGISTER_FUNCS.INc **************************

// Un file con host del database, utente, password
// e database selezionato. Sono i dati per accedere al
// db per la connessione a mysql dell'utente specifico.
include_once("db_vars.inc");

// Una stringa utilizzata per la crittografia md5. È possibile
// spostarla in un file esterno alla struttura Web
// per sicurezza.
$supersecret_hash_padding "stringa";

function 
user_register()
{
  
// Questa funzione opererà solo con array superglobali,
  // perché non vengono passati valori o dichiarate 
  // variabili globali

  
global $supersecret_hash_padding;

  
// Tutte le variabili sono presenti?
  // Le password corrispondono?

  
if (strlen($_POST['user_name']) <=25 && strlen($_POST['password1']) <=25 && ($_POST['password1'] == $_POST['password2']) && strlen($_POST['email']) <= 50 && validate_email($_POST['email'])) 
       {
      
// Convalida nome utente e password
       
if (account_namevalid($_POST['user_name']) || strlen($_POST['password1'] >= 6)) 
       {
        
$user_name strtolower($_POST['user_name']);
        
$user_name trim($user_name);
        
// Toglie gli spazi e rende tutto in minuscolo.
        // Non necessita dell’escape, perché le virgolette
        // singole non sono consentite
        //mette l'email in una varabile.
        
$email $_POST['email'];
        
// Non consente nomi utente o indirizzi di posta
        // elettronica duplicati. Si seleziona dal db 
        // tutti i records user_id( indirizzi ip) con
        // email e password insertita.
        
$query "SELECT user_id FROM user WHERE (user_name = '$user_name' AND email = '$email' )";
        
$result mysql_query($query);
        
// Cerca nel database se esiste uno user con email e nome
        // come quelli specificati questo per evitare duplicati.
        
if ($result && mysql_num_rows($result) > 0
        {
        
$feedback "ERROR-Username or email address already exists";
        return 
$feedback;
      
// se si preleva un record significa che l'utente è già
      // registrato.
        
} else { // è un nuovo utente e va registrato.
         
$first_name $_POST['first_name'];
         
$last_name $_POST['last_name'];
        
// la password viene registrata con MD5
        
$password md5($_POST['password1']);
         
// l'userid è l'indirizzo del pc
        
$user_ip $_SERVER['REMOTE_ADDR'];
        
// Crea un nuovo hash per inserire il database e
        // l’e-mail di conferma
        
        
$hash md5($email.$supersecret_hash_padding);

        
//Inserisce il nuovo record.

        
$query "INSERT INTO user (user_name, first_name,
          last_name, password, email, remote_addr, confirm_hash,
          is_confirmed, date_created)
          VALUES ('
$user_name', '$first_name', '$last_name',
          '
$password', '$email', '$user_ip', '$hash', '0',
          NOW())"
;
          
// is_confirmed è zero perchè non è ancora stato
          // confermato via email

        
$result mysql_query($query);
        if (!
$result) {
          
$feedback 'ERROR-Database error';
          return 
$feedback;
        } else {
          
// Invia l’e-mail di conferma
          
$encoded_email urlencode($_POST['email']);

// La pagina chiamata è confirm.php alla quale si passano i parametri
// per la conferma.

          
$mail_body = <<< EOMAILBODY
Grazie per esserti registrato. Clicca indirizzo che segue per
confermare la registrazione:

[url]http://www.mysito.com/test/confirm.php?hash=[/url]
$hash&email=$encoded_email

Quando vedrai il messaggio di conferma potrai loggarti alla
pagina del download.
EOMAILBODY;
          
//Invio dell'email con il link ed il messaggio di sopra.
          
mail ($email' Conferma della Registrazione',
            
$mail_body'From: [email]info@mysito.com[/email]');

    
// Fornisce un messaggio di registrazione riuscita
          
$feedback 'REGISTRAZIONE AVVENUTA CON SUCCESSO.
            Ricerai una conferma via email al più presto'
;
          return 
$feedback;
        }
      }
    } else { 
// si riferisce all'if di convalida nome 
         // utente e password il secondo della funzione

      
$feedback =  'ERROR-Username or password is invalid';
      return 
$feedback;
    }
  } else { 
    
$feedback 'ERROR-Please fill in all fields correctly';
    return 
$feedback;
  }
}


// Questa funzione convalida il nome dell'account. semplici
// controlli prima citati anti-crack


function account_namevalid() {

  
// Parametro per l’utilizzo con strspan
$span_str "abcdefghijklmnopqrstuvwxyz" .
    
"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-";

  
// Deve contenere almeno un carattere
  
if (strspn($_POST['user_name'],$span_str) == 0) {
    return 
false;
  }

  
// Deve contenere tutti i caratteri legali
  
if (strspn($_POST['user_name'],$span_str) != strlen($name)) {
    return 
false;
  }

  
// Lunghezza minima e massima
  
if (strlen($_POST['user_name']) < 5) {
    return 
false;
  }
  if (
strlen($_POST['user_name']) > 25) {
    return 
false;
  }

  
// Nomi non validi
  
if (eregi("^((root)|(bin)|(daemon)|(adm)|(lp)|(sync)|(shutdown)|
(halt)|(mail)|(news)|(uucp)|(operator)|(games)|(mysql)|
(httpd)|(nobody)|(dummy)|(www)|(cvs)|(shell)|(ftp)|(irc)|
(debian)|(ns)|(download))$"
$_POST['user_name'])) {
    return 
false;
  }
  if (
eregi("^(anoncvs_)"$_POST['user_name'])) {
    return 
false;
  }

return 
true;
}


// controlla che l'email sia valida ed esistente.


function validate_email () {
  return (
ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$"$_POST['email']));
}


function 
user_confirm() {
  
// Questa funzione opererà solo con array superglobali,
  // perché non vengono passati valori o dichiarate 
  // variabili globali
  
global $supersecret_hash_padding;

  
// Verifica che non falsifichino l’indirizzo 
  // di posta elettronica
  
$new_hash md5($_GET['email'].$supersecret_hash_padding);
  if (
$new_hash && ($new_hash == $_GET['hash'])) 
  {
    
$query "SELECT user_name FROM user WHERE confirm_hash = '$new_hash'";
    
$result mysql_query($query);
    if (!
$result || mysql_num_rows($result) < 1
    {
      
$feedback 'ERROR-Hash not found';
      return 
$feedback;
    } else {

      
// Conferma l’e-mail e attiva l’account mettendo la variabile ora ad 1.
      
$email $_GET['email'];
      
$hash $_GET['hash'];
    
$query "UPDATE user SET email='$email',
is_confirmed='1' WHERE confirm_hash='
$hash'";
      
$result mysql_query($query);
      return 
1;
    }
  } else {
    
$feedback 'ERROR-Values do not match';
    return 
$feedback;
  }
}

?>