• ModSenior

    Ciao gigi991,

    Il nome del select è provincia non residenza...
    Per il tasto registrati, avrai fatto qualche errore nella sintassi html...
    Posta tutta la pagina, se non riesci a risolvere, altrimenti cosi posso capire ben poco....


  • User Attivo

    Eccola..

    [php]
    <?php
    // Se il modulo viene inviato...
    if(isset($_POST['registra']))
    {

    // 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 ''
    $mail = (isset($_POST['mail'])) ? trim($_POST['mail']) : '';    // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato dò di default ''
    $residenza = (isset($_POST['province'])) ? trim($_POST['province']) : '';    // Metto nella variabile 'residenza' 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);
        $mail = addslashes($mail);
        $provincia = addslashes($residenza);
    }
    
    
    // Controllo il Nome Utente
    if(strlen($user) < 6 || strlen($user) > 12)
        die('Nome Utente troppo corto, o troppo lungo');
    // Controllo la Password
    elseif(strlen($pass) < 6 || strlen($pass) > 12)
        die('Password troppo corta, o troppo lunga');
    // Controllo l'email
    elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $mail))
        die('Email non valida');
    // Controllo il nome utente non sia già occupato
    elseif(mysql_num_rows(mysql_query("SELECT user FROM utenti WHERE user = '$user' LIMIT 1")) == 1)
        die('Nome Utente non disponibile');
    // Controllo l'indirizzo email non sia già registrato
    elseif(mysql_num_rows(mysql_query("SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1)
        die('Questo indirizzo email risulta gi&agrave; registrato ad un altro utente');
    // Registrazione dell'utente nel database
    else
    {
    
        // Crypt della password per garantire una miglior sicurezza
        $pass = md5($pass);
    
    
        // Genero una stringa casuale di Attivazione
        $attivazione = '';
        for($x=1; $x<=32; $x++)
        $attivazione.=rand(0,9);
        $attivazione = md5($attivazione);
        $subject = "Attivazione al sito";
        $message = 'Per attivare il Suo account deve visitare il seguente link:<br><a href="sito/attivazione.php?code='.$attivazione.'">Attiva account</a>';
        // Header dell'email, per madnarla in formato html
        $headers = "From: NomeSito <miamail>\r\n";
        $headers .= "Reply-To: miamail\r\n";
        $headers .= "Return-Path: miamail\r\n";
        $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
        // Invio L'email
        mail($mail, $subject, $message, $headers);
    
        // Query per l'inserimento dell'utente nel database
        $strSQL = "INSERT INTO utenti (user,pass,mail,residenza,attivazione)";
        $strSQL .= "VALUES('$user', '$pass', '$mail', '$provincia', '$attivazione')";
        mysql_query($strSQL) OR die("Errore 003, contattare l'amministratore ".mysql_error());
    
        // Reindirizzo l'utente ad una pagina di conferma della registrazione
        header('Location: registrato.php');
        exit;
    }
    

    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
    <head>
    <title>Registrazione</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="mail" type="text" id="mail" value="Em@il" onfocus="if(this.value=='Em@il') this.value='';" /><br />
    <select name="province">
    <?php
    $strQuery="select * from province";
    $elenco=mysql_query($strQuery) or die(mysql_error());
    while($row_province=mysql_fetch_array($elenco)){
    $id=$row_province[id];
    $nome=$row_province[nome];
    echo '<option value="'.$id.'">'.$nome.'</option>';
    }
    ?>
    </select>
    <input name="registra" type="submit" value="Registrati" /><br />
    </form>
    </body>
    </html>
    [/php]


  • ModSenior

    Hai cambiato il nome una marea di volte...
    Prova cosi:
    [php]
    <?php
    // Se il modulo viene inviato...
    if(isset($_POST['registra']))
    {

    // 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 ''
    $mail = (isset($_POST['mail'])) ? trim($_POST['mail']) : '';    // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato dò di default ''
    $provincia = (isset($_POST['province'])) ? trim($_POST['province']) : '';    // Metto nella variabile 'residenza' 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);
        $mail = addslashes($mail);
        $provincia = addslashes($residenza);
    }
    
    
    // Controllo il Nome Utente
    if(strlen($user) < 6 || strlen($user) > 12)
        die('Nome Utente troppo corto, o troppo lungo');
    // Controllo la Password
    elseif(strlen($pass) < 6 || strlen($pass) > 12)
        die('Password troppo corta, o troppo lunga');
    // Controllo l'email
    elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $mail))
        die('Email non valida');
    // Controllo il nome utente non sia già occupato
    elseif(mysql_num_rows(mysql_query("SELECT user FROM utenti WHERE user = '$user' LIMIT 1")) == 1)
        die('Nome Utente non disponibile');
    // Controllo l'indirizzo email non sia già registrato
    elseif(mysql_num_rows(mysql_query("SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1)
        die('Questo indirizzo email risulta gi&agrave; registrato ad un altro utente');
    // Registrazione dell'utente nel database
    else
    {
    
        // Crypt della password per garantire una miglior sicurezza
        $pass = md5($pass);
    
    
        // Genero una stringa casuale di Attivazione
        $attivazione = '';
        for($x=1; $x<=32; $x++)
        $attivazione.=rand(0,9);
        $attivazione = md5($attivazione);
        $subject = "Attivazione al sito";
        $message = 'Per attivare il Suo account deve visitare il seguente link:<br><a href="sito/attivazione.php?code='.$attivazione.'">Attiva account</a>';
        // Header dell'email, per madnarla in formato html
        $headers = "From: NomeSito <miamail>\r\n";
        $headers .= "Reply-To: miamail\r\n";
        $headers .= "Return-Path: miamail\r\n";
        $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
        // Invio L'email
        mail($mail, $subject, $message, $headers);
    
        // Query per l'inserimento dell'utente nel database
        $strSQL = "INSERT INTO utenti (user,pass,mail,residenza,attivazione)";
        $strSQL .= "VALUES('$user', '$pass', '$mail', '$provincia', '$attivazione')";
        mysql_query($strSQL) OR die("Errore 003, contattare l'amministratore ".mysql_error());
    
        // Reindirizzo l'utente ad una pagina di conferma della registrazione
        header('Location: registrato.php');
        exit;
    }
    

    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
    <head>
    <title>Registrazione</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="mail" type="text" id="mail" value="Em@il" onfocus="if(this.value=='Em@il') this.value='';" /><br />
    <select name="province">
    <?php
    $strQuery="select * from province";
    $elenco=mysql_query($strQuery) or die(mysql_error());
    while($row_province=mysql_fetch_array($elenco)){
    $id=$row_province[id];
    $nome=$row_province[nome];
    echo '<option value="'.$id.'">'.$nome.'</option>';
    }
    ?>
    </select>
    <input name="registra" type="submit" value="Registrati" /><br />
    </form>
    </body>
    </html>
    [/php]


  • User Attivo

    Ora va, dipendeva tutto da un errore banale, facendo copia incolla vari mi sono perso il pezzo dove includo il file di configurazione, messo quello è tutto perfetto, è tornato anche il tasto registrati.. ❌x

    Alla prossima... cagnata :bigsmile:

    :ciauz:


  • User Attivo

    Salve!
    Dilemma di oggi:
    Nella pagina registrati.php, all'invio del form vengo rendirizzato alla pagina registrato.php, è possibile eliminare la pagina registato.php e scrivere un breve codice html direttamente nella pagina registrati.php che si vede dopo l'invio del form?
    in pratica penso si dovrebbe sostituire il comando
    header('Location: registrato.php');
    Purtroppo ora non ho i miei file perchè sto su un altro pc e non posso fare prove.
    Chiedo: Se metto al posto di header un echo ottengo quello che voglio fare? Se è sbagliato illuminatemi please..

    :ciauz:


  • ModSenior

    Ciao Gigi991,

    Devi sostuire
    [php]
    header('Location: registrato.php');
    exit;
    [/php]con
    [php]
    echo 'codice html 1';
    exit;
    [/php]Se il codice è breve puoi anche usare die, che è come la funzione exit, ma ti permette di inviare un output.
    [php]
    die('codice html 1');
    [/php]


  • User Attivo

    Ottimo, e senti nella pagina di attivazione nel body c'è:

    <?=($attivato == 1) ? 'Account Attivato' : 'Errore, link non valido' ?>

    se metto:

    <?php =($attivato == 1) ? 'Account Attivato' : 'Errore, link non valido' ?>

    è la stessa cosa?

    Che cambia a mettere <? e <?php ? Qual'è meglio usare?


  • ModSenior

    Ciao Giggi991,

    La sintassi <?=$variabile?> è un abbreviativo di <?php echo $variabile; ?>

    <? è uno short tag, però il file di configurazione di php(php.ini) potrebbe disabilitare gli short tag, e invece di essere elaborati te li ritrovi mostrati a schermo.


  • User Attivo

    In questo caso quindi è così:

    [php]<?php ($attivato == 1) ? echo 'Account Attivato' : echo 'Errore, link non valido' ?>[/php]

    ?


  • ModSenior

    Ciao Gigi991,

    No la sintassi corretta è la seguente:
    [php]
    <?php echo (($attivato == 1) ? 'Account Attivato' : 'Errore, link non valido') ?>
    [/php]


  • User Attivo

    Facendo modifche mi sa ch ho combinato qualche casino, ho sistemato spero tutti gli errori ma ne rimane uno alla pagina di login, in pratica inserendo user e password giusti, con l'account già attivato mi dice sempre: Userame o password errati.. :mmm:
    Ho provato a rivedere passo passo il codice come in guida ma non trovo l'errore..

    Il codice:
    [PHP]
    <?php require('config.php'); ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <?php
    if(isset($_POST['login'])) {
    $user_name = (isset($_POST['user_name'])) ? trim($_POST['user_name']) : '';
    $user_password = (isset($_POST['user_password'])) ? trim($_POST['user_password']) : '';
    if(!get_magic_quotes_gpc()) {
    $user_name = addslashes($user_name);
    $user_password = addslashes($user_password);
    }
    $user_password = md5($user_password);
    $query = mysql_query("SELECT user_id,user_active FROM users WHERE user_name = '$user_name' AND user_password = '$user_password' LIMIT 1");
    if(mysql_num_rows($query) == 1) {
    $login = mysql_fetch_array($query);
    if($login['user_active'] == '') {
    $_SESSION['login'] = $login['user_id'];
    header('Location: profilo.php');
    exit;
    }
    else {
    die('<b>L'account non è ancora stato attivato</b><br>Per attivare l'account clicca sul link che ti è stato inviato tramite mail.<br>Se non ti è arrivata la mail, contatta l'amministratore.');
    }
    }
    else die('Nome Utente o Password errati');
    }
    ?>
    <html>
    <head>
    <title>Login</title>
    </head>
    <body>
    <table align="center" border="1" width="680">
    <tr>
    <td border="1" width="180" align="center" valign="top">
    <b>Menu</b><br>
    <a href="index.php">Homepage</a><br><a href="profilo.php">Profilo</a><br><a href="login.php">Login</a><br><a href="registrati.php">Registrati</a><br>
    </td>
    <td border="1" width="500" align="center" valign="top">
    <form action="" method="post">
    <input name="user_name" type="text" id="user_name" value="Username" onfocus="if(this.value=='Username') this.value='';"><br>
    <input name="user_password" type="password" id="user_password" value="Password" onfocus="if(this.value=='Password') this.value='';"><br>
    <input name="login" type="submit" value="Login"><br>
    </form>
    </td>
    </tr>
    </table>
    </body>
    </html>
    [/PHP]

    Nome tabella: users
    Campi: user_id, user_password, user_email, user_from, user_day, user_month, user_year, user_rank, user_avatar, user_active

    Continuo a provare, se ci sono errori o pensate che dipende da un altra pagina scrivetemelo, grazie

    :ciauz:


  • ModSenior

    Ciao Gigi991,

    Non ho notato errori, sicuro che nella tabella sia presente l'utente con cui tenti di loggarti?


  • User Attivo

    Neanche io trovavo errori, tant prima ho lasciato perdere prima di perderci la testa :arrabbiato:
    Ho riegistrato anche 4-5 account, ogni volta li ho attivati con le varie email, ma niente dice sempre che username e password sono errati
    E durante il log in comunque guardo nella tabella e i record ci sono..


  • ModSenior

    Ciao gigi991,

    Prova a stampare la query:

    [php]
    <?php require('config.php'); ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <?php
    if(isset($_POST['login'])) {
    $user_name = (isset($_POST['user_name'])) ? trim($_POST['user_name']) : '';
    $user_password = (isset($_POST['user_password'])) ? trim($_POST['user_password']) : '';
    if(!get_magic_quotes_gpc()) {
    $user_name = addslashes($user_name);
    $user_password = addslashes($user_password);
    }
    $user_password = md5($user_password);
    echo "SELECT user_id,user_active FROM users WHERE user_name = '$user_name' AND user_password = '$user_password' LIMIT 1";
    $query = mysql_query("SELECT user_id,user_active FROM users WHERE user_name = '$user_name' AND user_password = '$user_password' LIMIT 1");
    if(mysql_num_rows($query) == 1) {
    $login = mysql_fetch_array($query);
    if($login['user_active'] == '') {
    $_SESSION['login'] = $login['user_id'];
    header('Location: profilo.php');
    exit;
    }
    else {
    die('<b>L'account non è ancora stato attivato</b><br>Per attivare l'account clicca sul link che ti è stato inviato tramite mail.<br>Se non ti è arrivata la mail, contatta l'amministratore.');
    }
    }
    else die('Nome Utente o Password errati');
    }
    ?>
    <html>
    <head>
    <title>Login</title>
    </head>
    <body>
    <table align="center" border="1" width="680">
    <tr>
    <td border="1" width="180" align="center" valign="top">
    <b>Menu</b><br>
    <a href="index.php">Homepage</a><br><a href="profilo.php">Profilo</a><br><a href="login.php">Login</a><br><a href="registrati.php">Registrati</a><br>
    </td>
    <td border="1" width="500" align="center" valign="top">
    <form action="" method="post">
    <input name="user_name" type="text" id="user_name" value="Username" onfocus="if(this.value=='Username') this.value='';"><br>
    <input name="user_password" type="password" id="user_password" value="Password" onfocus="if(this.value=='Password') this.value='';"><br>
    <input name="login" type="submit" value="Login"><br>
    </form>
    </td>
    </tr>
    </table>
    </body>
    </html>
    [/php]


  • User Attivo

    Niente.. mi esce:

    SELECT user_id,user_active FROM users WHERE user_name = 'nomeregistrato' AND user_password = 'passwordregistrato' LIMIT 1Nome Utente o Password errati

    L'errore sembra sempre quello, però stampa a video la query..


  • ModSenior

    Ciao Gigi991,

    Infatti serve proprio a stampare la query, ora, se lanci la query ottenuta dal phpmyadmin cosa ti restituisce?


  • User Attivo

    Inserendo quella query penso me lo trova, perchè mettendonome e password a caso mi da 0 righe trovate, mentre con quelli giusti mi da:

    Visualizzazione record 0 - 0 (1 Totali, La query ha impiegato 0.0003 sec)
    SELECT user_id, user_active
    FROM users
    WHERE user_name = 'nomegiusto'
    AND user_password = 'passgiusta'
    LIMIT 1

    N.B. La password messa nella query è quella già criptata, presente nel database.
    Se metto la password che digito nel form di login mi da:

    MySQL ha restituito un insieme vuoto (i.e. zero righe). ( La query ha impiegato 0.0002 sec )
    SELECT user_id, user_active
    FROM users
    WHERE user_name = 'nomegiusto'
    AND user_password = 'passnoncriptata'
    LIMIT 1

    E' giusto se fa così?


  • ModSenior

    Ciao Gigi991,

    Se eseguendo la query stampata dal file php, ti viene restituito 1 record, il tuo script dovrebbe funzionare correttamente.
    Se ti viene restituito un insieme vuoto significa che c'è qualche problema nella query.

    Se la query ti restituisce 1 record, mi sembra strano, se non impossibile, che il controllo restituisca false


  • User Attivo

    Si mi fa abbatere sto php :crying:
    Facciamo così, entro oggi o domani appena ho tempo provo a rifarlo tutto, e ad ogni modifica provo tutto lo script dalla registrazione all'attivazine fino a login e logout.. Così spero di vedere cos'è che può creare il problema..
    Poi vi faccio sapere..

    :ciauz:


  • User

    Salve, volevo chiedere, se non disturbo troppo, se è possibile avere un aiuto per creare due pagine riguardo questo ottimo script..la prima per modificare la password, e la seconda per eliminare l'account. E' possibile? Mi potete aiutare? Grazie mille in anticipo siete grandi