• ModSenior

    Puoi farlo modificando il file login:
    [php]
    <?php
    // Includo la connessione al database
    require('config.php');

    // Se il modulo viene inviato...
    if(isset($_POST['login']))
    {

    // Dati Inviati dal modulo
    $user = (isset($_POST['user'])) ? trim($_POST['user']) : '';    // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
    $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : '';    // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default ''
    
    // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
    if (!get_magic_quotes_gpc()) {
        $user = addslashes($user);
        $pass = addslashes($pass);
    }
    
    // Crypto la password e la confronto con quella nel database
    $pass = md5($pass);
    
    // Controllo l'utente esiste
    $query = mysql_query("SELECT id, user FROM utenti WHERE user = '$user' AND pass = '$pass' LIMIT 1");
    
    // Se ha trovato un record
    if(mysql_num_rows($query) == 1)
    {
        // prelevo l'id dal database
        $login = mysql_fetch_array($query);
        
        // Creo una variabile di sessione
        $_SESSION['login'] = $login['id'];
        $_SESSION['login_user'] = $login['user'];
        // reindirizzo l'utente
        header('Location: privata.php');
        exit;
    }
    // se non esiste da l'errore
    else
        die('Nome Utente o Password errati');
    

    }
    ?>
    <!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>Login</title>
    </head>

    <body>
    <form action="" method="post">
    <input name="user" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" /><br />
    <input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
    <input name="login" type="submit" value="Login" /><br />
    </form>
    </body>
    </html>
    [/php]

    E nella variabile di sessione $_SESSION['login_user'] hai il nome dopo aver effettuato il login.


  • User Newbie

    Ok grazie 🙂 ho fatto,scusa se ti chiedo molte cose, il fatto è che sò poco e niente... però ora mi puoi dire come mandare un e-mail con i dati di iscrizzione e un codice per la modifica della password? ti ringrazio già per le altre risposte 🙂 .


  • ModSenior

    Il codice per la modifica della password, lo trovi in una delle pagine di questa discussione.
    Mentre per l'email ti basta leggere la documentazione relativa alla funzione mail, che è molto semplice:
    http://php.net/mail


  • User

    Ciao, volevo farti un paio di domande:

    1. Il tuo tutorial risale al 2008 (o almeno cosi leggo nel primo post) dopo 4 anni, va ancora bene, oppure andrebbe aggiornato?
    2. Vorrei creare un log delle connessioni, vorrei salvare nel db l'ultima volta che x utente ha fatto i login, è possibile? io avevo pensato di mettere un update di un campo nel db subito dopo aver creato la sessione, secondo te va bene?
    3. E' possibile utilizzarlo su un proprio sito? non ho trovati info al riguardo, se si visto che si tratto di un sito con dati sensibili, me lo consigli come script oppure e meglio trovare altro?

    Scusa per le troppe domande, e ti ringrazio per il tutorial, mi sei stato molto utile.


  • ModSenior

    Ciao sixdas,
    ti rispondo per punti:

    1. Il tutorial va più che bene, non c'è alcun problema di compatibilità con la versione corrente di PHP (PHP 5.4).
    2. Utilizzare una tabella apposita sarebbe meglio, se desideri tenere traccia di tutte le connessioni, e non solo dell'ultima.
    3. Puoi utilizzarlo sul tuo sito, lo script tratta anche la sicurezza per evitare SQL INJECTION per cui non c'è motivo per non utilizzarlo.

  • User

    @Thedarkita said:

    Ciao sixdas,
    ti rispondo per punti:

    1. Il tutorial va più che bene, non c'è alcun problema di compatibilità con la versione corrente di PHP (PHP 5.4).
    2. Utilizzare una tabella apposita sarebbe meglio, se desideri tenere traccia di tutte le connessioni, e non solo dell'ultima.
    3. Puoi utilizzarlo sul tuo sito, lo script tratta anche la sicurezza per evitare SQL INJECTION per cui non c'è motivo per non utilizzarlo.

    Grazie per la velocissima risposta 😄

    1. Perfetto.
    2. Se non chiedo molto, potresti farmi un esempio? tipo ho visto che wordpress, salva anche altri dati, tipo ip etc... Per me sarebbe l'ideale.
    3. Oltre alla sicurezza, io mi riferivo alla licenza d'uso, chiedevo se potevo utilizzarlo in un sito che sto facendo.

    Grazie ancora. :ciauz:


  • ModSenior

    Per salvare ip, ora di connessione, ecc devi semplicemente creare una tabella e poi eseguire una query insert, ci sono vari esempi nel tutorial di query di questo tipo.
    Puoi tranquillamente utilizzarlo nel sito che stai facendo.


  • User

    Ciao, ho visto che sei un esperto in php e mysql, vorrei porti alcune domande.
    Mi hanno incaricato di spostare un sito da un provider ad un altro, fare il restiling e successivamente importare il vecchio metodo di registrazione e di login con conseguente perdita di pass, il tutto è gia scritto e configurato e sul vecchi sito funziona alla grande.
    Naturalmente appena lo uploado sul nuovo hosting nascono i problemi:

    1. nei files non esiste un congif.php e l'ho creato inserendo correttamente i dati del database
    2. ho soltanto il modulo della registrazione, registrati.php, quello dell' account account.php uno strano login.php recupera pass, e basta.
      Il tutto funziona bene a video ma naturalmente ho problemi di configurazione sul nuovo server, potresti aiutarmi se ti mando i file sorgenti e ti faccio vedere il tutto sul web.
      Attendo una tua risposta.
      Grazie.

  • User Attivo

    Ciao Thedarkita e a tutti,

    Avrei bisogno del tuo aiuto.Ho fatto un sito, dove c'è la pagina iscrizione, dalla quale parte un'email per l'attivazione dell'account, poi c'è una pagin attivautente, che conferma l'ttivazione avvenuta dell'utente quindi da 0 = account disattivato, cliccando sul link dell'email si passa a 1 account attivato. Dopodichè, ho creato la pagina di login con username e password (criptata con metodo md5), e una pagina riservata. Ad ogni login di un utente che si registra e poi effettua il login, la paginaris.php (pagina riservata), da il benvenuto alla persona, l'ultimo acesso effettuato e un tasto logout. Il tutto gestito da un db e da una tabella chiamata utenti. Ora il punto cruciale è il seguente. Se faccio una modifica sulla paginaris.php, la vedono tutti gli utenti che si loggano, invece a me interessa che ognuno abbia la sua paginariservata e ci faccia quello che vuole. Quindi ad esempio se pincopallino si registra e si logga, e mette delle info tipod ei video o delle foto, poi pincopallino2 che a sua volta si è registrato non può vedere quello che ha fato pincopallino. E viceversa pincopallino, non può vedere la pagina di pincopallino2, a meno che non gli chieda l'amicizia. Ma questo è un discorso a parte. Come posso gestire la cosa per renderla anche dinamica ???? Mi puoi dare una mano per favore ??? Non so dove sbattere la testa. Grazie. Ovviamente la collaborazione è per tutti non solo per Thedarkita.


  • User Attivo

    Buonasera,

    torno dopo tempo su questa discussione per fare qualche domanda.

    Ho usato parecchio questa discussione per ripartire con siti ed aree private, e da questa sono poi riuscito meglio a comprendere e studiare anche altre funzioni PHP riuscendo ad ottenere buoni risultati.

    Mi chiedevo però, se oramai questa guida abbia fatto il suo tempo, o se rimane valida, visti:

    • PHP5;
    • Tendenza attualmente di molti a lavorare "ad oggetti".

    Quindi le domande alla quale spero possiate rispondermi, sono:

    1. Lo script in questa discussione, a livello di sicurezza, va ancora bene? Tutto il codice è ancora utile, si può evitare qualche comando vecchio o è necessario metterne di nuovi per renderlo sicuro?
    2. E' possibile sperare che venga messa una versione che prenda questo script come base, ma fatta ad oggetti? Come scritto sopra, ho inziato ad ingranare col php partendo da questa guida.. E anche oggi mi trovo in difficoltà con le sole guide a capire a fondo la programmazione ad oggetti, penso che uno script di partenza per il login potrebbe aiutarmi..

    Grazie mille!


  • ModSenior

    A livello di sicurezza lo script è perfetto, per quanto riguarda la programmazione ad oggetti di norma si utilizza un framework per realizzare delle applicazioni che devono essere di una certa dimensione quindi sei legato all'organizzazione del framework.
    Fare un semplice login con la programmazione ad oggetti non ha poi molta utilità.


  • User Attivo

    @Thedarkita said:

    A livello di sicurezza lo script è perfetto, per quanto riguarda la programmazione ad oggetti di norma si utilizza un framework per realizzare delle applicazioni che devono essere di una certa dimensione quindi sei legato all'organizzazione del framework.
    Fare un semplice login con la programmazione ad oggetti non ha poi molta utilità.

    Il mio intento sarebbe quello di ricreare un semplice cms per adattarlo e migliorarlo da me, sia per utilizzarlo per piccole comunità, sia per continuare ad allenarmi con PHP..
    Da quanto letto in giro pare che programmando ad oggetti alla fine si ottiene un qualcosa di gestibile anche nel tempo.

    Certo per il solo login si potrebbe evitare, ma per fare quanto sopra, puoi quindi suggerirmi un framework semplice (per quanto possibile, o comunque documentato) che mi permette di fare quanto scritto (e magari in futuro ottenere aiuti anche qui in forum)?

    Grazie!


  • ModSenior

    Io preferisco CodeIgniter che è molto minimal, ma ce ne sono tanti che includono di base molte funzionalità.
    Per CodeIgniter trovi una guida in questa sezione, che non ho ancora completato ma per avere una panoramica iniziale direi che va bene.


  • User Attivo

    Proverò con sto framework..

    Soloun dubbio invece sulla risposta prima. Ieri ho trovato qui da qualche parte che i magicquotes in php5 avevano un altro codice.. Ma non ricordo dove l'ho trovata la discussione. Ricordi per caso di averne parlato qui in forum?

    E sai confermarmi se sia quel codice che quello vecchio funzionano ancora in php5?

    Grazie.


  • ModSenior

    Da php 5.4 la funzione get_magic_quotes_gpc restituisce sempre false, attualmente la funzione non è deprecata e non mi risulta sia deprecata neanche in php 5.5 che è attualmente alla versione alpha.
    Prima che venga rimossa dovrà passare allo stato di deprecated, per cui ancora per un bel pò quel semplice controllo è sufficiente.

    Se ci si vuole portare avanti col lavoro, nel caso in cui la funzione venga rimossa come sicuramente avverà prima o poi, si può controllare che la funzione esista prima di utilizzarla.
    Ripeto comunque che attualmente non è un'operazione necessaria.


  • User Attivo

    Ok allora vado tranquillo con questa.. Tanto in caso cambia qualcosa devo solo variare quel pezzetto..

    Grazie.


  • User Attivo

    Torno con una domanda.

    Mi hanno passato questa funzione per l'escape delle stringhe passate nei form:

    EscapeStr($str) { return addslashes(stripslashes(htmlentities(nl2br(urldecode($str))))); }

    Sai dirmi se è altrettanto valida come quella usata in questo post, meglio o peggio?

    Grazie!


  • ModSenior

    Fa un sacco di operazioni inutili per quanto riguarda le SQL INJECTION, poi bisogna vedere cosa si vuole ottenere.


  • User Newbie

    @Thedarkita said:

    Ho scritto un piccolo tutorial, una basilare area privata, con ovviamente registrazione e login.Manca la grafica visto che l'obiettivo era solo quello di dare le basi a chi si avvicina da poco al php.database[php]CREATE TABLE utenti (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,user TEXT NOT NULL ,pass TEXT NOT NULL ,mail TEXT NOT NULL) ENGINE = MYISAM ;[/php]config.phpindex.php[php]var NREUMQ=NREUMQ||[];NREUMQ.push(["mark","firstbyte",new Date().getTime()]);Tutorial by TheDarkITAMenu:

    if(!NREUMQ.f){NREUMQ.f=function(){NREUMQ.push(["load",new Date().getTime()]);var e=document.createElement("script");e.type="text/javascript";e.src=(("http:"===document.location.protocol)?"http:":"https:")+"//"+"rpm-images.newrelic.com/42/eum/rum.js";document.body.appendChild(e);if(NREUMQ.a)NREUMQ.a();};NREUMQ.a=window.onload;window.onload=NREUMQ.f;};NREUMQ.push(["nrfj","beacon-1.newrelic.com","1b473294f5","550561","M1QBYUMCDUAEWkRfWgoeNkdYTAVcF0xdGUMGQgZaHxMLQw==",0,77,new Date().getTime(),"","","","",""]);[/php]login.php[php]Login

    [/php]logout.php[php]LogoutLogout eseguito
    Vai all'index
    [/php]privata.php[php]registrati.php[php]registrato.php[php]Registrazione CompletaRegistrazione completa!

    Vai all'index
    [/php]Per i più pigri è possibile scaricare lo script completo a questo indirizzo scarica i file 😄

    Ciao, scusa l'ignoranza, ma se ho già fatto la Grafica, come faccio ad inserire il Login e il Register??
    se vuoi vai a vedere a questo sito: provaindexselux .altervista. org anche nel bottone Registrati.
    con la Grafica già fatta non so come fare..
    e sopratutto come farli separati il Login dal Register??
    perché il Login sta in una Pagina e il Register in un altra.
    Ripeto, se vuoi vedi con i tuoi Occhi: provaindexselux .altervista. org
    Così mi puoi aiutare meglio..
    Grazie in Anticipo.


  • User Newbie

    Salve a tutti,
    innanzittutto complimenti per il tutorial, mi è servito molto, era molto preciso e ben commentato, facile da capire anche per un novellino del php come me, piano piano sto riuscendo a personalizzarlo. Ho un problema però.
    In poche parole devo creare un'area riservata che abbia un amministratore e diversi clienti ( si spera ), i clienti però non possono registrarsi, è l'amministratore che registra i vari utenti una volta essere stato contattato.
    Entrando nello specifico, il cliente contatta l'amministratore e decide di affidarsi alle sue mani, l'amministratore registra tutti i dati nel suo database, una volta compilato il form viene mandata una mail di richiesta attivazione al cliente, e alla fine il cliente è registrato a tutti gli effetti. Ora il db ho pensato di strutturarlo con id, user, pass, active, permission (in caso do spiegazioni sull'utilità), gli altri dati quali referente, mail, indirizzo e roba varia sono in un'altra tabella del db dedicata ai soli dati e al quale accedo utilizzando il join.
    Tutto questo per dire che prima di inserire i campi active e permission la password veniva letta tranquillamente, ora quando inserisco user e password mi dice che è sono errati. Sono sicuro che sia la password perchè eliminando quel campo per accedere all'area riservata mi collego tranquillamente. Non sto sbagliando la password perchè per comodità e semplicità ne ho messo una stupidissima. Posto il codice. Credo che comunque venga fatto male il confronto tra la password inserita nel form di login e quella presente nel database.

    P.S. mi sono appena accorto che essendo nuovo non posso pubblicare codice