Visualizzazione dei risultati da 1 a 7 su 7

Discussione: script per login

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    262

    script per login

    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;
      }
    }

    ?>

  2. #2
    non so darti la soluzione a colpo d'occhio,
    ma devi sforzarti di vedere il "flusso operativo" del codice.
    ossia. tu ottieni un risultato (ERROR - etc...). questo si genera poiche la condizione

    if
    (
    strlen($_POST['user_name']) <=25 &&
    strlen($_POST['password1']) <=25 &&
    ( $_POST['password1'] == $_POST['password2']) &&
    strlen($_POST['email']) <= 50 &&
    validate_email($_POST['email'])
    )

    non e' verificata.

    a questo punto puoi effettuare moltissimi test.

    prima della if, scrivi ad esempio:
    echo "<pre>"; var_dump( $_POST ); echo "</pre>";
    dove var_dump ti restituisce il contenuto del post e i tag <pre> formattano il risultato.
    a questo punto puoi capire quanto segue:

    1) l'errore e' nella IF ---> modifico la if
    2) l'errore e' nel post ---> modifico la form da compilare o formatto appropriatamente il post
    3) non mi viene in mente nulla ---> darei un'occhiata a validate_mail

    facci sapere!
    si vivono molte vite e si muore una volta sola

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    262
    Buongiorno.
    Provo.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    262
    mi da:

    array(0) {
    }


    mentre con:

    echo "<pre>"; var_dump( $_POST['user_name'] ); echo "</pre>";

    NULL



  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    262
    <FORM ACTION="$php_self" METHOD=”POST”>

    deve essere:

    <FORM ACTION="$php_self" METHOD="POST"> 233564

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    262
    <FORM ACTION="$php_self" METHOD=”POST”>

    deve essere:

    <FORM ACTION="$php_self" METHOD="POST">

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    262
    Il problema si presenta ora con:

    'ERROR-Username or password is invalid'

    :-(

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.