Visualizzazione risultati 1 fino 13 di 13

Discussione: Problema registrazione e login

  1. #1
    Guest

    Predefinito Problema registrazione e login

    Ho creato un sistema di registrazione e login per utenti, però non capisco il perchè ma non mi inserisce i dati nel database..ecco il codice di registrazione
    Codice PHP:
    <?php

    // connessione al database

    mysql_connect("localhost", "******", "*****") or die(mysql_error());

    mysql_select_db("********") or die(mysql_error());




    if (isset(
    $_POST['submit'])) {



    // controlla che non ci siano campi vuoti

    if (!$_POST['nome'] | !$_POST['cognome'] | !$_POST['mail'] | !$_POST['pass'] | !$_POST['pass2'] ) {

    die(
    'Non hai completato tutti i campi!');

    }



    // Controlla che la mai non sia in uso

    if (!get_magic_quotes_gpc()) {

    $_POST['mail'] = addslashes($_POST['mail']);

    }

    $mailcheck = $_POST['mail'];

    $check = mysql_query("SELECT mail FROM utenti WHERE mail = '$mailcheck'")

    or die(
    mysql_error());

    $check2 = mysql_num_rows($check);



    // Se la mail esiste già da errore

    if ($check2 != 0) {

    die(
    'Errore: la mail '.$_POST['mail'].' è già in uso.');

    }


    // Controlla che le due password combacino

    if ($_POST['pass'] != $_POST['pass2']) {

    die(
    'Le due password non combaciano. ');

    }



    // Cripta la password

    $_POST['pass'] = md5($_POST['pass']);

    if (!
    get_magic_quotes_gpc()) {

    $_POST['nome'] = addslashes($_POST['nome']);

    $_POST['cognome'] = addslashes($_POST['cognome']);

    $_POST['mail'] = addslashes($_POST['mail']);

    $_POST['pass'] = addslashes($_POST['pass']);

    $_POST['pass2'] = addslashes($_POST['pass2']);

    }



    // Ora lo inserisce nel database

    $insert = "INSERT INTO utenti (nome, cognome, mail, pass, pass2)

    VALUES ('"
    .$_POST['nome']."', '".$_POST['cognome']."', '".$_POST['mail']."', '".$_POST['pass']."', '".$_POST['pass2']."')";

    $add_member = mysql_query($insert);

    ?>




    <h1>Registrato!</h1>

    <p>Grazie per esserti registrato!.</p>

    <?php
    }

    else
    {
    ?>



    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

    <table border="0">

    <tr><td>Nome:</td><td>

    <input type="text" name="nome" maxlength="30">

    </td></tr>

    <tr><td>Cognome:</td><td>

    <input type="text" name="cognome" maxlength="30">

    </td></tr>

    <tr><td>Mail:</td><td>

    <input type="text" name="mail" maxlength="30">

    </td></tr>


    <tr><td>Password:</td><td>

    <input type="password" name="pass" maxlength="30">

    </td></tr>

    <tr><td>Conferma Password:</td><td>

    <input type="password" name="pass2" maxlength="30">

    </td></tr>

    <tr><th colspan=2><input type="submit" name="submit"
    value="Registrati"></th></tr> </table>

    </form>


    <?php

    }
    ?>
    vi sarei grato se qualcuno mi correggesse nelle cose che sbaglio per capire! grazie mille!

  2. #2
    Guest

    Predefinito

    Non ho letto tutto ma già qui

    Codice PHP:
    if (!$_POST['nome'] | !$_POST['cognome'] | !$_POST['mail'] | !$_POST['pass'] | !$_POST['pass2'] ) {

    die(
    'Non hai completato tutti i campi!');

    }
    c'è qualcosa che non va. L'OR va fatto con un doppio pipe


    Codice PHP:
    if (!$_POST['nome'] || !$_POST['cognome'] || !$_POST['mail'] | !$_POST['pass'] || !$_POST['pass2'] ) {
    die(
    'Non hai completato tutti i campi!');
    }
    EDIT:
    Un'altra cosa:

    qui
    Codice PHP:
    if (!get_magic_quotes_gpc()) {
    $_POST['nome'] = addslashes($_POST['nome']);
    $_POST['cognome'] = addslashes($_POST['cognome']);
    $_POST['mail'] = addslashes($_POST['mail']);
    $_POST['pass'] = addslashes($_POST['pass']);
    $_POST['pass2'] = addslashes($_POST['pass2']);
    }
    Se gia hai criptato la password e $_POST['pass'] contiene non più la password dicitata ma l'HASH, non hai motivo di quotare la variabile, ne tanto meno hai necessità di portarti dietro $_POST['pass2'] una volta controllato che le 2 password coincidano.
    Ultima modifica di simpleticket : 25-12-2011 alle ore 17.08.22

  3. #3
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,175

    Predefinito

    invece di
    Codice PHP:
    !$_POST['nome']
    , andrebbero usate le isset() e/o empty().

    Comunque, prova a debuggare tramite le echo per vedere se la query viene eseguita, oppure se lo script termina in qualche punto non voluto...

    Ciao!

  4. #4
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    invece di
    Codice PHP:
    !$_POST['nome']
    , andrebbero usate le isset() e/o empty() [...]
    Non è vero...

    Codice PHP:
    !!$var == !empty($var)
    !
    $var == empty($var)
    è più veloce ed occupa meno memoria. isset() poi serve per vedere se esiste la chiave (in questo caso, trattandosi di un array), ma essendo valori di un form (non pulsanti di tipo submit/button), non ha alcun senso controllarne l'esistenza se nel form è presente un'opzione con quel nome.


  5. #5
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,175

    Predefinito

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Non è vero...

    Codice PHP:
    !!$var == !empty($var)
    !
    $var == empty($var)
    è più veloce ed occupa meno memoria.
    Nel caso di numeri concordo pienamente, ma quando ad esempio si tratta di una stringa, non vedo cosa (ragionevolmente) sia una stringa negata . Che poi in php dia lo stesso risultato della empty, è un altro discorso... Comunque personalmente uso la empty perché non da luogo a casi ambigui: il suo scopo è perfettamente definito. Che poi prenda più o meno memoria, questo bisognerebbe provarlo: non è una funzione, ma un costrutto del linguaggio!.


    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    isset() poi serve per vedere se esiste la chiave (in questo caso, trattandosi di un array), ma essendo valori di un form (non pulsanti di tipo submit/button), non ha alcun senso controllarne l'esistenza se nel form è presente un'opzione con quel nome.

    Di norma, (come bisognerebbe fare), cerco di prendere i valori da form il più possibile con le pinze: capisco che è sufficiente la presenza del tag <input> nel form per far in modo di essere istanziato l'elemento dell'array, ma usando la isset() si risolvono anche gli eventuali tentativi dei bm di bucare il sorgente. Poi, personalmente lo trovo molto comodo per altri casi, come ad esempio nell'uso dello stesso script per form di pagine differenti, o via ajax: se mi dimentico un campo, con la isset() me ne accorgo immediatamente!
    Usare una variabile che non son sicuro al 100% che sia stata istanziata, non mi piace... Comunque va benissimo anche come fai te

    Ciao!
    Ultima modifica di alemoppo : 25-12-2011 alle ore 18.20.10

  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Nel caso di numeri concordo pienamente, ma quando ad esempio si tratta di una stringa, non vedo cosa (ragionevolmente) sia una stringa negata . Che poi in php dia lo stesso risultato della empty, è un altro discorso... Comunque personalmente uso la empty perché non da luogo a casi ambigui: il suo scopo è perfettamente definito. Che poi prenda più o meno memoria, questo bisognerebbe provarlo: non è una funzione, ma un costrutto del linguaggio! [...]
    Se cerchi su Google, ci sono tanti benchmark a riguardo.

    Se è una variabile stringa e la variabile è vuota, se farai un restituirà 0, quindi false, ergo non cambia niente da questo punto di vista.
    Basta che vai un semplice test su una qualsiasi variabile:
    Codice:
    echo  (int) (bool) (string) $var;
    e vedrai che non ci sono differenze in base al type.
    C'è solo da guadagnarci nell'usare ! al posto di empty(): meno memoria occupata e velocità d'esecuzione maggiore.

    Lo stesso esempio si può fare con strlen(). Tutti usano (strlen($var) > 5), per esempio, io invece uso (isset($var{5})) per i motivi sopra descritti di ! ed empty().

    Per il form, hai ragione, ma con una funzione "sanitize", ovvii a tutti questi problemi e lavori con i dati molto più semplicemente, nonché tenendo i sorgenti più puliti e leggibili.

    Chiedo scusa per l'OT, ma ho voluto precisare nel caso si pensasse sia sbagliato usare ! al posto di empty().


  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da simpleticket Visualizza messaggio
    Non ho letto tutto ma già qui

    Codice PHP:
    if (!$_POST['nome'] | !$_POST['cognome'] | !$_POST['mail'] | !$_POST['pass'] | !$_POST['pass2'] ) {

    die(
    'Non hai completato tutti i campi!');

    }
    c'è qualcosa che non va. L'OR va fatto con un doppio pipe


    Codice PHP:
    if (!$_POST['nome'] || !$_POST['cognome'] || !$_POST['mail'] | !$_POST['pass'] || !$_POST['pass2'] ) {
    die(
    'Non hai completato tutti i campi!');
    }
    EDIT:
    Un'altra cosa:

    qui
    Codice PHP:
    if (!get_magic_quotes_gpc()) {
    $_POST['nome'] = addslashes($_POST['nome']);
    $_POST['cognome'] = addslashes($_POST['cognome']);
    $_POST['mail'] = addslashes($_POST['mail']);
    $_POST['pass'] = addslashes($_POST['pass']);
    $_POST['pass2'] = addslashes($_POST['pass2']);
    }
    Se gia hai criptato la password e $_POST['pass'] contiene non più la password dicitata ma l'HASH, non hai motivo di quotare la variabile, ne tanto meno hai necessità di portarti dietro $_POST['pass2'] una volta controllato che le 2 password coincidano.
    Provando come dicevi te mi dava degli errori che prima non mi dava, e dopo averlo rimesso com'era originariamente ha iniziato a funzionare!! Boh! Miracolo! Ora mi inserisce i dati nel database! Però adesso si presenta un altro problema...con il login...mi dice 'Password errata. Riprova.' anche se la inserisco giusta...questo è il codice..

    Codice PHP:
    <?
    // Connette al database

    mysql_connect("localhost", "********", "*******") or die(mysql_error());

    mysql_select_db("*********") or die(mysql_error());


    // Controlla se c'è il cookie per il login

    if(isset($_COOKIE['ID_my_site']))


    // Se c'è, mi logga e mi reindirizza alla pegina utenti

    {
    $mail = $_COOKIE['ID_my_site'];

    $pass = $_COOKIE['Key_my_site'];

    $check = mysql_query("SELECT * FROM utenti WHERE mail = '$mail'")or die(mysql_error());

    while(
    $info = mysql_fetch_array( $check ))

    {

    if (
    $pass != $info['password'])

    {

    }

    else

    {

    header("Location: members.php");



    }

    }

    }


    // Se il form per il login va

    if (isset($_POST['submit'])) {


    // Controlla che i campi siano compilati

    if(!$_POST['mail'] | !$_POST['pass']) {

    die(
    'Non hai completato tutti i campi. Torna indietro.');

    }

    // Controlla nel database



    if (!get_magic_quotes_gpc()) {

    $_POST['mail'] = addslashes($_POST['mail']);

    }

    $check = mysql_query("SELECT * FROM utenti WHERE mail = '".$_POST['mail']."'")or die(mysql_error());



    // Da errore se l'utente non esiste

    $check2 = mysql_num_rows($check);

    if (
    $check2 == 0) {

    die(
    'L\'utente non esiste. Clicca qua per <a href="registration.php">Registrarti</a>.');

    }

    while(
    $info = mysql_fetch_array( $check ))

    {

    $_POST['pass'] = stripslashes($_POST['pass']);

    $info['password'] = stripslashes($info['password']);

    $_POST['pass'] = md5($_POST['pass']);



    // Da errore se la password è errata

    if ($_POST['pass'] != $info['password']) {

    die(
    'Password errata. Riprova.');

    }

    else

    {


    // Se il login è ok aggiunge cookie

    $_POST['mail'] = stripslashes($_POST['mail']);

    $hour = time() + 3600;

    setcookie(ID_my_site, $_POST['mail'], $hour);

    setcookie(Key_my_site, $_POST['pass'], $hour);



    // Reindirizza all'area utenti

    header("Location: membri.php");

    }

    }

    }

    else

    {



    // Se sono loggati

    ?>

    <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">

    <table border="1">

    <tr><td colspan=2><h1>Login</h1></td></tr>

    <tr><td>Mail:</td><td>

    <input type="text" name="mail" maxlength="40">

    </td></tr>

    <tr><td>Password:</td><td>

    <input type="password" name="pass" maxlength="50">

    </td></tr>

    <tr><td colspan="2" align="right">

    <input type="submit" name="submit" value="Entra">

    </td></tr>

    </table>

    </form>
    <?php

    }

    ?>
    devo inserire qualcosa al posto di ID_my_site e Key_my_site?? Se trovate degli errori fatemi sapere!!!

  8. #8
    Guest

    Predefinito

    Ricorda che sul DB non hai la password ma il suo HASH, quindi non confrontare la password con il dato estratto db ma l'HASH della password con quello memorizzato nel DB.

  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da simpleticket Visualizza messaggio
    Ricorda che sul DB non hai la password ma il suo HASH, quindi non confrontare la password con il dato estratto db ma l'HASH della password con quello memorizzato nel DB.
    Avevo pensato a questa cosa però che comando gli devo dare??

  10. #10
    Guest

    Predefinito

    Codice PHP:
    // Da errore se la password è errata
    if (MD5($_POST['pass']) != $info['password']) {
    die(
    'Password errata. Riprova.');
    }

  11. #11
    Guest

    Predefinito

    Citazione Originalmente inviato da simpleticket Visualizza messaggio
    Codice PHP:
    // Da errore se la password è errata
    if (MD5($_POST['pass']) != $info['password']) {
    die(
    'Password errata. Riprova.');
    }
    Mi da comunque errore per password sbagliata! Non devo mettere niente al posto di ID_my_site e Key_my_site?? Non capisco perché manco così funziona!

  12. #12
    Guest

    Predefinito

    I miei due file adesso sono così, però mi da sempre errore al momento del login..e sicuramente c'è qualcosa di sbagliato in quello...
    Registrazione:
    Codice PHP:
    <?php

    // connessione al database

    mysql_connect("localhost", "*********", "**********") or die(mysql_error());

    mysql_select_db("**********") or die(mysql_error());




    if (isset(
    $_POST['submit'])) {



    // controlla che non ci siano campi vuoti

    if (!$_POST['nome'] | !$_POST['cognome'] | !$_POST['mail'] | !$_POST['pass'] | !$_POST['pass2'] ) {

    die(
    '<br><h1>Errore:</h1><br><h3>Non hai completato tutti i campi! Torna indietro e inserisci tutti i dati.</h3>');

    }



    // Controlla che la mai non sia in uso

    if (!get_magic_quotes_gpc()) {

    $_POST['mail'] = addslashes($_POST['mail']);

    }

    $mailcheck = $_POST['mail'];

    $check = mysql_query("SELECT mail FROM utenti WHERE mail = '$mailcheck'")

    or die(
    mysql_error());

    $check2 = mysql_num_rows($check);



    // Se la mail esiste già da errore

    if ($check2 != 0) {

    die(
    '<br><h1>Errore:</h1><br><h3> La mail <b>'.$_POST['mail'].'</b> &egrave gi&agrave in uso. Prova con un altro indirizzo email.</h3>');

    }


    // Controlla che le due password combacino

    if ($_POST['pass'] != $_POST['pass2']) {

    die(
    '<br><h1>Errore:</h1><br><h3>Le due password non combaciano. Torna indietro e ricontrolla che siano uguali.</h3>');

    }



    // Cripta la password

    $_POST['pass'] = md5($_POST['pass']);
    $_POST['pass2'] = md5($_POST['pass2']);

    if (!
    get_magic_quotes_gpc()) {

    $_POST['nome'] = addslashes($_POST['nome']);

    $_POST['cognome'] = addslashes($_POST['cognome']);

    $_POST['mail'] = addslashes($_POST['mail']);

    $_POST['pass'] = addslashes($_POST['pass']);

    $_POST['pass2'] = addslashes($_POST['pass2']);

    }



    // Ora lo inserisce nel database

    $insert = "INSERT INTO utenti (nome, cognome, mail, pass, pass2)

    VALUES ('"
    .$_POST['nome']."', '".$_POST['cognome']."', '".$_POST['mail']."', '".$_POST['pass']."', '".$_POST['pass2']."')";

    $add_member = mysql_query($insert);

    ?>




    <br><h1>Ora sei Registrato!</h1><br><h3>Se vuoi entrare nel tuo profilo esegui il <a href="login.php">Login</a>!</h3>

    <?php
    }

    else
    {
    ?>
    <form name="registrazione" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    QUA IL FORM DI REGISTRAZIONE
    <input type="submit" name="submit" value="Registrati">
    </form>
    }
    ?>
    e funziona tutto..mi inserisce i dati e le pass criptate..però nel momento del login sbaglio qualcosa e non funziona..
    Login:
    Codice PHP:
    <?php

    // Connette al database

    mysql_connect("localhost", "********", "**********") or die(mysql_error());

    mysql_select_db("**********") or die(mysql_error());


    // Controlla se c'è il cookie per il login

    if(isset($_COOKIE['ID_my_site']))


    // Se c'è, mi logga e mi reindirizza alla pegina utenti

    {
    $_GET['mail'] = $_COOKIE['ID_my_site'];

    $_GET['pass'] = $_COOKIE['Key_my_site'];

    $check = mysql_query("SELECT * FROM utenti WHERE mail = '$mail'")or die(mysql_error());

    while(
    $info = mysql_fetch_array( $check ))

    {

    if (
    $pass != $info['pass'])

    {

    }

    else

    {

    header("Location: membri.php");



    }

    }

    }


    // Se il form per il login va

    if (isset($_POST['submit'])) {


    // Controlla che i campi siano compilati

    if(!$_POST['mail'] | !$_POST['pass']) {

    die(
    '<br><h1>Errore:</h1><br><h3>Non hai completato tutti i campi. Torna indietro.</h3>');

    }

    // Controlla nel database



    if (!get_magic_quotes_gpc()) {

    $_POST['mail'] = addslashes($_POST['mail']);

    }

    $check = mysql_query("SELECT * FROM utenti WHERE mail = '".$_POST['mail']."'")or die(mysql_error());



    // Da errore se l'utente non esiste

    $check2 = mysql_num_rows($check);

    if (
    $check2 == 0) {

    die(
    '<br><h1>Errore</h1><br><h3>L\'utente non esiste. Clicca qua per <a href="registration.php">Registrarti</a>.</h3>');

    }

    while(
    $info = mysql_fetch_array( $check ))

    {

    $_POST['pass'] = stripslashes($_POST['pass']);

    $info['pass'] = stripslashes($info['pass']);

    $_POST['pass'] = md5($_POST['pass']);



    // Da errore se la password è errata

    if (md5($_POST['pass']) != $info['pass']) {

    die(
    '<br><h1>Errore</h1><br><h3>Password errata. Torna indietro e riprova.</h3>');

    }

    else

    {


    // Se il login è ok aggiunge cookie

    $_POST['mail'] = stripslashes($_POST['mail']);

    $hour = time() + 3600;

    setcookie(ID_my_site, $_POST['mail'], $hour);

    setcookie(Key_my_site, md5($_POST['pass']), $hour);



    // Reindirizza all'area utenti

    header("Location: membri.php");

    }

    }

    }

    else

    {



    // Se sono loggati

    ?>

    <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
    QUA IL FORM DEL LOGIN
    <input type="submit" name="submit" value="Entra">
    </form>
    <?php

    }
    ?>
    Grazie mille per l'aiuto!!!

    EDIT:

    Qualcunooooooooooooooooooooooooooooooooooooooooooo ooooooo
    Ultima modifica di alemoppo : 30-12-2011 alle ore 16.59.34

  13. #13
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,175

    Predefinito

    Hai provato a debuggare?

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Comunque, prova a debuggare tramite le echo per vedere se la query viene eseguita, oppure se lo script termina in qualche punto non voluto...
    Ciao!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •