• User

    Salve,
    Ho creato questo script per attivare manualmente un utente, ma, come sempre, alla prima non funziona :S
    [PHP]<?php
    error_reporting(E_ALL);

    //Includo la connessione al database
    require('config.php');

    // Se il modulo viene inviato...
    if(isset($_POST['attiva']))
    {
    //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 ''
    }

    // Controllo l'utente esiste
    $query_utente = "SELECT id,attivazione FROM utenti WHERE user = '$user' LIMIT 1";
    $query_utente_eseguita = mysql_query($query_utente);

    //Se trova un record..
    if(mysql_num_rows($query_utente_eseguita) == 1)
    {
    //Metto la query in un array
    $attiva = mysql_fetch_array($query_utente_eseguita);
    if($attiva['attivazione'] == '')
    {
    die('Account già attivo!!!');
    }
    else
    {
    $update = mysql_query("UPDATE utenti SET attivazione = '' WHERE user = 'user' LIMIT 1");
    die('Account attivato con successo');
    }
    }
    else
    {
    die('Nessun utente registrato con questo nome!');
    }
    ?>

    <html>

    <head>
    <title>Attivazione Utente</title>
    </head>

    <body>
    <form action="" method="post">
    Nome Utente: <input name="user" type="text" id="user" maxlength="12" /><br />
    <input name="attiva" type="submit" id="attiva" value="Attiva" />
    </form>

    </body>

    </html>
    [/php]

    Ed ecco, aprendo la pagina, cosa mi dice:
    Notice: Undefined variable: user in /membri/rcayla2/attivazione_manuale.php on line 15
    Nessun utente registrato con questo nome!

    E questa sarebbe la riga 15:
    [php]$query_utente = "SELECT id,attivazione FROM utenti WHERE user = '$user' LIMIT 1";[/php]

    Potete aiutarmi?

    EDIT:
    Ci ho sbattuto la testa per un po, ed ho notato di aver sbagliato un po' di graffe 😛
    Adesso ho sistemato e funziona alla perfezione 🙂


  • User Newbie

    Ciao a tutti.

    Volevo ringraziare, prima di tutto, Thedarkita per aver messo a disposizione di tutti questo script.

    Ho un problema:

    sto cercando di adattare lo script al mio sito e vorrei fare in modo che si apra una pagina diversa a seconda dell'utente che si logga.

    questo è il codice della pagina login.php

    [PHP]<?php
    // Includo la connessione al database
    require('arearis/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 FROM utenti WHERE user = '$user' AND pass = '$pass'");

    // 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'];

    // reindirizzo l'utente
    header('Location: utentu/$user.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" "">
    <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>
    <br /><div style="z-index:3" class="smallfont" align="center">SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.</div></body>
    </html>[/PHP]

    Il problema è che se metto utente e password giusti mi viene fuori sempre l'errore 'Nome Utente o Password errati'.

    Dove sbaglio? 😢

    Ringrazio in anticipo.


  • ModSenior

    Rcayla prova cosi:
    [php]
    <?php
    error_reporting(E_ALL);

    //Includo la connessione al database
    require('config.php');

    // Se il modulo viene inviato...
    if(isset($_POST['attiva']))
    {
    //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 ''

    // Controllo l'utente esiste
    $query_utente = "SELECT id,attivazione FROM utenti WHERE user = '$user' LIMIT 1";
    $query_utente_eseguita = mysql_query($query_utente);

    //Se trova un record..
    if(mysql_num_rows($query_utente_eseguita) == 1)
    {
    //Metto la query in un array
    $attiva = mysql_fetch_array($query_utente_eseguita);
    if($attiva['attivazione'] == '')
    {
    die('Account già attivo!!!');
    }
    else
    {
    $update = mysql_query("UPDATE utenti SET attivazione = '' WHERE user = 'user' LIMIT 1");
    die('Account attivato con successo');
    }
    }
    else
    {
    die('Nessun utente registrato con questo nome!');
    }
    }
    [/php]

    maddo la password nel database è inserita sotto forma di hash md5?


  • User Newbie

    @Thedarkita said:

    maddo la password nel database è inserita sotto forma di hash md5?

    Ok, ho risolto.

    Effettivamente la pass nel db non era sotto forma di hash md5.

    Ne approfitto della tua gentilezza: come mai, effettuato il login, mi appare una pagina bianca al posto della pagina che vorrei io?

    codice login.php
    [php]<?php
    // Includo la connessione al database
    require('arearis/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 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'];

    // reindirizzo l'utente
    header('Location: arearis/utenti/&user.php');
    exit;
    }
    // se non esiste da l'errore
    else
    die('Nome Utente o Password errati');
    }
    ?>[/php]

    Codice pagina $user.php

    [php]<?php
    // Includo la connessione al database
    require('arearis/config.php');
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    <html>
    <head>
    <title>area riservata</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body>
    FUNZIONA!!
    </body>
    </html>
    [/php]

    Ancora grazie per la disponibilità. 🙂


  • ModSenior

    Sarebbe meglio evitare di utilizzare & e $ nei nomi delle pagine.


  • User Newbie

    @Thedarkita said:

    Sarebbe meglio evitare di utilizzare & e $ nei nomi delle pagine.

    Ok, ma scusa la niubbagine, come faccio poi a far aprire la pagina associata al nome utente?

    :gtsad: 😊


  • ModSenior

    Nella variabile di sessione hai l'id dell'utente, quindi utilizzi quello per recuperare la sua pagina.


  • User Newbie

    @Thedarkita said:

    [***]

    Ok, domani provo e ti faccio sapere 🙂

    Grazie mille per l'aiuto, sei stato disponibilissimo (ed io rompiscatole) 😉


  • ModSenior

    Figurati.
    Se hai problemi e/o dubbi chiedi pure.


  • User Attivo

    Sera!

    Mi chiedevo se è possibile modificare lo script in modo da sostituire l'uso del database utilizzando fogli php che prendano le informazioni come fossero un database, utilizzando magari degli array?

    Se possibile farlo, in questo modo perderebbe molto in sicurezza?


  • ModSenior

    I tempi di esecuzione, con una mole di dati che non sia di pochi utenti, diventano alti quindi le prestazioni tendano a peggiorare moltissimo con l'incremento dei dati da gestire, oltre a ciò anche la gestione diventa più complicata.
    Oggi come oggi, un database te lo danno ovunque per pochi euro, personalmente per risparmiare qualche euro non mi complicherei la vita.


  • User Attivo

    Non per niente, fosse per quello..
    E' che pensavo invece ad un sistema comunque sicuro, quindi simile a questo, ma senza database perchè appunto dovrebbe permettere l'accesso a poche persone

    In pratica mi servirebbe un sistema di accesso sicuro, poi il sistema di registrazione potrei anche eliminarlo, visto che l'accesso sarebbe per pochi..

    Penso di capire dalla risposta che oltre al fatto della lentezza con molti membri (che non riguarda il mio scopo), la sicurezza rimane la stessa?


  • ModSenior

    Alla fine dal punto di vista sicurezza non cambia praticamente nulla.
    Tieni presente che comunque se un giorno devi aggiungere un campo, nel database fai subito con i file l'operazione diventa lunghetta.
    Puoi usare comunque il database con poche persone.


  • User Attivo

    Ok!
    Allora, prendendo come esempio io tuo script provo ad abbozzare io, sperando di non dire troppe niubbate..

    Mi servirà un foglio che contiene i dati di ogni utente, chiamiamolo utenti.php
    Svoglio mettere le tre informazioni "id" "user" e "pass" devo fare array tipo:
    [php]$utente1=array("id1","user1","pass1");
    $utente2=array("id2","user2","pass2");[/php]

    Con uno per ogni riga per poi cambiare la riga di richiamo al database
    [php]require('config.php');[/php]
    Con:
    [php]fopen("directory/utenti.php","a+");[/php]

    In modo che li divida uno per ogni riga, o sto uscendo fuori strada?


  • ModSenior

    Direi sia meglio aprire una discussione apposita per ciò, con questo tutorial centrerebbe ben poco, e quindi finiremmo offtopic.


  • User Attivo

    Va bene,allora provo a riportare la risposta su un nuovo topic sempre in area php..

    Discussione: [Area privata senza database]


  • User Newbie

    Ciao a tutti,
    dopo mesi di girovagare ho trovato questo forum e grazie a Thedarkita sono riuscito a farmi la mia bella area riservata, scaricato il codice, modificato e implementato secondo le mie esigenze funziona tutto correttamente.
    Però anche io ho la mia bella gatta da pelare, ossia il recupero dei dati; scaricato e studiato il tutorial (che mi funziona correttamente), invece di far reimpostare la password, vorrei che inserendo la mail, mi arrivassero i miei dati, quelli con cui mi sono iscritto, ossia nome utente e password.
    Praticamente ho modificato la pagina "recupero.php" ed eliminato la pagina "reset.php" di modo che mi arrivi solo una mail con dentro user e pass; la mail ariva, ma senza i dati.

    Questo è il codice da me modificato:

    [PHP]<?php
    // Includo la connessione al database
    require('config.php');

    // Se il modulo viene inviato...
    if(isset($_POST['recupera']))
    {
    // Dati Inviati dal modulo
    $mail = (isset($_POST['mail'])) ? trim($POST['mail']) : ''; // Metto nella variabile 'mail' 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())
    $mail = addslashes($mail);
    if(!eregi("^[a-z0-9][
    .a-z0-9-]+@([a-z0-9][0-9a-z-]+.)+([a-z]{2,4})", $mail))
    die('Email non valida');
    else
    {
    // Cerco se c'è un utente registrato con questa email
    $query = mysql_query("SELECT user AND pass FROM utenti WHERE mail = '$mail' LIMIT 1");

    // L'utente esiste?
    if(mysql_num_rows($query) == 0)
        die('Nessun utente registrato con questa email');
    
    // Inserisco i dati dell'utente recuperati mediante la query in un array
    $recupero = mysql_fetch_array($query);
    
    // Inviamo l'email all'utente
    $message = 'Per modificare la password del Suo account deve visitare il seguente link:'.$recupero.' ';
        // Header dell'email, per mandarla in formato html
        $headers = "From: nome sito <[email protected]>\r\n";
        $headers .= "Reply-To: [email protected]\r\n";
        $headers .= "Return-Path: [email protected]\r\n";
        $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
    
        // Invio L'email
        mail($mail, 'Reset password - Tutorial Area Privata', $message, $headers);
    
    die('Le abbiamo inviato un email contenente le istruzioni per il reset della password, controlli la sua casella email!');
    

    }
    }
    ?>[/PHP]


  • User Newbie

    Dimenticavo.
    So bene che una pass criptata non può essere recuperata, ma nel mio db le password vengono inserite in chiaro, non ho bisogno della criptatura.


  • User

    Se vuoi che invi i dati devi modificare questa parte:
    [php]// Inviamo l'email all'utente
    $message = 'Per modificare la password del Suo account deve visitare il seguente link:'.$recupero.' ';[/php]

    Con questo
    [php]// Inviamo l'email all'utente
    $message = 'Il Suo Username è '.$recupero['user'].' e la sua Password '.$recupero['pass'].' ';[/php]


  • User Newbie

    Nulla da fare, non funziona la mail mi arriva con questo testo:

    "Il Suo Username è e la sua Password"

    Mi sorge il dubbio che sia sbagliata la query al database, può essere?