• User Attivo

    Ecco, non ci crederai ma ho provato anche prima che mi crvevi tu ad inserire le stesse righe di codice, ma comunque non mi inserisce i dati nel database, l'unica cosa che penso è che da qualche parte forse sbaglio i nomi delle variabili o dell tabelle nel database..
    Ti riscrivo tutti i nomi che ho dato alle tabelle del database, e le righe di codice aggiunte, cosi vediamo se ho magari invertito qualche variabile..

    Nel database ho tabella 'utenti' con campi (in ordine così): id, user, pass, mail, residenza, attivazione.
    Nella tabella 'province' ho i campi: id, nome.

    Nel codice PHP, nei "Dati inviati dal modulo" ho aggiunto:
    [php] $residenza = (isset($_POST['residenza'])) ? trim($_POST['residenza']) : '';[/php]

    Nel filtro di dati magic_quotes ho aggiunto:
    [php]$residenza = addslashes($residenza);[/php]

    Nella query per l'inserimento utente nel database ho messo:
    [php]
    $strSQL = "INSERT INTO utenti (user,pass,mail,residenza,attivazione)";
    $strSQL .= "VALUES('$user', '$pass', '$mail', '$residenza', '$attivazione')";
    mysql_query($strSQL) OR die("Errore 003, contattare l'amministratore ".mysql_error());[/php]

    E per finire nel campo form tra input name mail e **registra **ho aggiunto:
    <select name="provincia">
    <?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>

    Con uesti pezzi aggiunti nella form di registrazione il menu a tendina ha dentro tutte le provincie, quindi la parte del fom dovrebbe essere corretta, ma non inserisce il dato nella tabella utenti, il campo rsidenza mi rimane vuoto..

    Quando avete tempo se potete vedere se ho sbagliato qualche richiamo o sbagliato variabili vi faccio santi :bigsmile:
    Intanto io continuo con le prove, magari di mattina il cervello lavora meglio..

    :ciauz:

    EDIT: Altra cosa, mettendo <select> tra input mail e registra, nella form non mi fa più vedere il tasto "Registrati", come mai?


  • 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: