Visualizzazione risultati 1 fino 13 di 13

Discussione: Form Registrazione-Login

  1. #1
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Question Form Registrazione-Login

    Salve a tutti.
    Premetto che ho letto il post Area riservata con files di testo e volevo capire meglio come funzionava.
    Io dovrei creare 3 pagine?
    1) form.html dove andrò a mettere il seguente codice
    Codice HTML:
    <html>
    <title>Registrazione</title>
    <body>
    <form method="post" action="registrazione.php">
       <input type="text" name="nome" /> Nome utente
       <input type="password" name="pass" />Password
       <input type="submit" name="registrati" value="Registrati" /> - <input type="submit" name="login" value="Log-In" />
    </form>
    </body>
    </html>
    2) registrazione.php dove andrò a mettere il seguente codice tra i tags <body> e </body>
    Codice PHP:
    <?php
    function controlla_presenza($nick){
    $file = file("utenti.php");
    foreach(
    $file as $rigo) {
    $ex = explode("|",$rigo);
    if(
    $ex[1] == $nick) {
    return
    "presente";
    }
    }
    }
    function
    nick_pass_ok($nick,$pass) {
    $pass = md5($pass);
    $file = file("utenti.php");
    foreach(
    $file as $rigo) {
    $ex = explode("|",$rigo);
    if(
    $ex[1] == $nick && $ex[2] == $pass) { return "ok"; }
    }
    }
    $nick = $_POST['nome'];
    $nick = str_replace("|","",$nick);
    $nick = str_replace("\\","",$nick);
    $vpass = $_POST['pass'];
    $vpass = str_replace("|","",$vpass);
    $vpass = str_replace("\\","",$vpass);
    $pass = md5($vpass);
    if(
    $_POST['registrati'] || $_POST['login']){
    if(
    trim($nick) == "" || trim($pass) == "") {
    header("Location:form.html");
    }
    }
    if(
    $_POST['registrati']) {
    $check = controlla_presenza($nick);
    if(
    $check == "presente") { echo "Utente già presente!"; exit(); }
    $fp = fopen("utenti.php","a+");
    fwrite($fp,"<?|".$nick."|".$pass."|\n");
    fclose($fp);
    echo
    "$nick registrato! Password: $vpass";
    echo
    "<a href='form.html'>Torna alla pagina di login</a>";
    }else if(
    $_POST['login']) {
    $contr = nick_pass_ok($nick,$pass);
    if(
    $contr == "ok") { echo "$nick sei loggato!";
    echo
    "Visualizza l'area riservata!";
    }else{
    echo
    "Nickname o password errati!";
    }
    }
    ?>
    3) utenti.php che codice metto?
    E poi, dove devo mettere il codice
    Codice PHP:
    if(trim($nick) == "" || trim($pass) == "") {
    header("Location:form.html");
    }
    Grazie mille anticipatamente!!! :D
    Ultima modifica di radiodelmomento : 03-01-2011 alle ore 19.48.18

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

    Predefinito

    Il sorgente:
    Codice PHP:
    if(trim($nick) == "" || trim($pass) == "") {
    header("Location:form.html");
    }
    Se guardi bene è già contenuto nella pagina registrazione.php. Nel 3d si tratta soltanto di una spiegazione circa quelle righe...

    Comunque si: teoricamente devi creare una pagina per ogni sorgente (se sei bravo, potresti fare il tutto con una pagina).

    Comunque, ti consiglio di dare un occhiata anche qui, qui, qui.

    Ciao!

  3. #3
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Unhappy

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    devi creare una pagina per ogni sorgente (se sei bravo, potresti fare il tutto con una pagina).
    Ma io non ho capito nel file utenti.php che codice devo mettere. :(
    Ciao!

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

    Predefinito

    Ho dato una letta a quel topic. Il file "utenti.php" non devi farci niente... Cioè quello serve soltanto a tenere in memoria i vari utenti. Tiene in memoria i registrati e i presenti.

    Quel file è gestito dallo script e devi far finta che non esiste. Addirittura non è necessario nemmeno che lo crei, perché lo crea automaticamente lo script quando gli è necessario. Però, per evitare warning la prima volta che esegui lo script, ti consiglio di crearlo, ma dentro non devi scriverci nulla.

    Ciao!

  5. #5
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Exclamation

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Ho dato una letta a quel topic. Il file "utenti.php" non devi farci niente... Cioè quello serve soltanto a tenere in memoria i vari utenti. Tiene in memoria i registrati e i presenti.

    Quel file è gestito dallo script e devi far finta che non esiste. Addirittura non è necessario nemmeno che lo crei, perché lo crea automaticamente lo script quando gli è necessario. Però, per evitare warning la prima volta che esegui lo script, ti consiglio di crearlo, ma dentro non devi scriverci nulla.
    Allora, ho creato il file per evitare errori.
    Il form funziona a metà: io mi registro come "utente1" e metto come password "utente1". Mi dice che mi sono registrato con successo. Perfetto. Provo a registrarmi di nuvo con "utente1" e mi dice che il nick esiste già. Buon segno.
    Quando però provo a loggarmi, mi dice che il nick o password sono errati!
    C'è qualcosa che non va...

    Ecco precisamente cosa ho fatto:
    form.html
    Codice HTML:
    <!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=iso-8859-1" />
    <title>Documento senza titolo</title>
    <style type="text/css">
    <!--
    body {
    	background-image: url(images/content-bg.jpg);
    }
    .Stile1 {color: #FFFFFF}
    -->
    </style></head>
    
    <body><form method="post" action="registrazione.php">
       <table width="100%" border="0">
         <tr>
           <td width="137"><span class="Stile1">Nome utente</span></td>
           <td width="144"><input type="text" name="nome" /></td>
         </tr>
         <tr>
           <td><span class="Stile1">Password</span></td>
           <td><input type="password" name="pass" /></td>
         </tr>
       </table>
       <p align="center">
         <input type="submit" name="registrati" value="Registrati" />
         <input type="submit" name="login" value="Loggati" />
          </p>
    </form>
    </body>
    </html>
    registrazione.php
    Codice PHP:
    <style type="text/css">
    <!--
    body {
    background-image: url(images/content-bg.jpg);
    }
    a:link {
    color: #0000FF;
    text-decoration: none;
    }
    a:visited {
    text-decoration: none;
    color: #0000FF;
    }
    a:hover {
    text-decoration: none;
    color: #FF0000;
    }
    a:active {
    text-decoration: none;
    color: #0000FF;
    }
    -->
    </style><?php
    function controlla_presenza($nick){
    $file = file("utenti.php");
    foreach(
    $file as $rigo) {
    $ex = explode("|",$rigo);
    if(
    $ex[1] == $nick) {
    return
    "presente";
    }
    }
    }
    function
    nick_pass_ok($nick,$pass) {
    $pass = md5($pass);
    $file = file("utenti.php");
    foreach(
    $file as $rigo) {
    $ex = explode("|",$rigo);
    if(
    $ex[1] == $nick && $ex[2] == $pass) { return "ok"; }
    }
    }
    $nick = $_POST['nome'];
    $nick = str_replace("|","",$nick);
    $nick = str_replace("\\","",$nick);
    $vpass = $_POST['pass'];
    $vpass = str_replace("|","",$vpass);
    $vpass = str_replace("\\","",$vpass);
    $pass = md5($vpass);
    if(
    $_POST['registrati'] || $_POST['login']){
    if(
    trim($nick) == "" || trim($pass) == "") {
    header("Location:form.html");
    }
    }
    if(
    $_POST['registrati']) {
    $check = controlla_presenza($nick);
    if(
    $check == "presente") { echo "Il nickname esiste!"; exit(); }
    $fp = fopen("utenti.php","a+");
    fwrite($fp,"<?|".$nick."|".$pass."|\n");
    fclose($fp);
    echo
    "$nick ti sei registrato con successo! Ecco la tua password: $vpass.<br /><a href='form.html'>Clicca qui per eseguire il login.</a>";
    }else if(
    $_POST['login']) {
    $contr = nick_pass_ok($nick,$pass);
    if(
    $contr == "ok") { echo "$nick sei loggato, presto avrai un'area riservata!";
    }else{
    echo
    "Nickname o password errati!";
    }
    }
    ?>
    utenti.php
    Codice PHP:
    (vuoto)
    Grazie mille per la pazienza!
    Ciao!
    Ultima modifica di radiodelmomento : 04-01-2011 alle ore 13.31.55

  6. #6
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Thumbs up

    CIAO a tutti, rieccomi!
    HO CAPITO DOV'ERA IL PROBLEMA.
    La password veniva criptata in md5, e il file registrazione.php non riusciva a decriptarla (almeno da me). Ho tolto md5 da
    Codice PHP:
    $pass = md5($pass);
    e l'ho fatto diventare
    Codice PHP:
    $pass = ($pass);
    Il codice funziona alla perfezione.
    Grazie mille alemoppo per la pazienza (come avevo detto prima).
    BEH, NIENTE MALE PER UN RAGAZZINO MINORENNE DI 13 ANNI CHE HA FATTO TUTTO SOLO... NO?
    Vorrei porre un'altra domanda... apro un nuovo topic?
    Vorrei aggiungere la funzione "Ricorda" con la famosa check box.
    Sennò apro un nuovo topic e chiedo la chiusura del topic corrente.
    GRAZIE MILLE, ciao!

  7. #7
    Guest

    Predefinito

    Non c'è bisogno di decriptarla, basta che il confronto lo fai sempre con la funziona md5(). Non è sicuro salvare le password in chiaro.

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

    Predefinito

    Citazione Originalmente inviato da radiodelmomento Visualizza messaggio
    BEH, NIENTE MALE PER UN RAGAZZINO MINORENNE DI 13 ANNI CHE HA FATTO TUTTO SOLO... NO?
    Io a quell'età non sapevo nemmeno spegnere il PC (anzi, forse si ma mi limitavo a quello ). Comunque ti assicuro che c'é gente su questo forum che (qualche anno fa) aveva 12 anni e quello script lo sapeva far da zero . (non per sminuirti, sia chiaro), ma cosa avresti fatto da solo? Lo script non lo hai preso dalla pagina che hai linkato sopra?

    Comunque, come dice biccheddu, è sempre meglio criptare in md5 e fare il controllo direttamente con gli hash:

    $password_inserita == $password <==> md5($password_inserita) == md5($password)

    in termini di sicurezza, come si può immaginare, è sempre meglio salvare l'hash invece della password diretta

    Comunque, per il fatto di ricordarsi, io userei un cookie, ma comunque apri un altra discussione...

    Ciao!

    EDIT:

    Ho tolto md5 da
    Codice PHP:
    $pass = md5($pass);
    e l'ho fatto diventare
    Codice PHP:
    $pass = ($pass);
    Allora quella riga puoi anche toglierla del tutto.. $pass = $pass è un comando inutile. E' come dire che a = a (non so se mi son spiegato).
    Ultima modifica di alemoppo : 05-01-2011 alle ore 17.55.24 Motivo: edit

  9. #9
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Smile

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    aveva 12 anni e quello script lo sapeva far da zero . (non per sminuirti, sia chiaro)
    OKOK, non parlo più!

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    $password_inserita == $password <==> md5($password_inserita) == md5($password)

    in termini di sicurezza, come si può immaginare, è sempre meglio salvare l'hash invece della password diretta
    Quando metto la funzione md5 sballa tutto.
    Comunque, cosa cambierebbe?
    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    cosa avresti fatto da solo? Lo script non lo hai preso dalla pagina che hai linkato sopra?
    Sì il codice sì, ma ho scoperto il problema!
    Vebbé... come ho detto prima: non parlo più!


    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Comunque, per il fatto di ricordarsi, io userei un cookie, ma comunque apri un altra discussione...
    Anch'io pensavo ad un cookie. Ma come?
    Apro un'altra discussione su questo. GRAZIE A TUTTI. Ciao!

  10. #10
    Guest

    Predefinito

    Modifica la stringa che ti ha postato alemoppo, cioè, da:
    Codice:
    $password_inserita == $password
    a
    Codice:
    md5($password_inserita) == md5($password)
    e non cambierà praticamente nulla a "vista".


  11. #11
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Question

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Modifica la stringa che ti ha postato alemoppo, cioè, da:
    Codice:
    $password_inserita == $password
    a
    Codice:
    md5($password_inserita) == md5($password)
    e non cambierà praticamente nulla a "vista".

    Oops... piccolo problemino: si sono iscritti già vari utenti!
    E adesso?

  12. #12
    Guest

    Predefinito

    opzione 1) crea una pagina per cambiare la password e digli che per problemi tecnici chiedi cortesemente di cambiare la loro password (criptando la nuova nel database appunto)

    opzione 2) lo fai tu accedendo al database , ovvero prendi le loro password e te le cripti in md5 (vedi http://www.md5encrypter.com/)

    io ti consiglierei l'opzione 1 dato che la numero 2 non mi sembra rispettosa verso gli utenti , poi scegli la strada che preferisci....................

    pagina di cambio password (preavviso che io ho iniziato a scriptare in php da due giorni e chiedo di controllare il codice a qualcuno con più esperienza per migliorarlo nel caso lo ritenese opportuno , il codice che posto comunque funziona tutto) :

    pagina cambiopassword.html
    Codice HTML:
    <form action=userp.php method="GET">
    Password:<br><input type="password" name="pass"><br>
    Nuova password:<br><input type="password" name="passnew"><br><br>
    <input type="submit" value="Submit">
    </form>
    pagina config.php
    Codice PHP:
    <?php

    $host
    = "IP_HOST_DATABASE_MYSQL";

    $user = "USERNAME_MYSQL";

    $pass = "PASSWORD_MYSQL";

    $nome = "NOME_DATABASE";

    // connessione

    $conn = mysql_connect($host, $user, $pass) or die ('Errore durante la connessione');

    mysql_select_db($nome)or die ('Errore nel selezionare il database');

    ?>
    pagina cambiopassword.php
    Codice PHP:
    <?php

    include ("config.php");

    session_start();

    session_regenerate_id(TRUE);

    $db="NOME_DATABASE";

    $username="NOME_CAMPO_DOVE_SI_TROVANO_GLI_USERNAME_DEGLI_UTENTI";

    $password="NOME_CAMPO_DOVE_SI_TROVANO_LA_PASSWORD_DEGLI_UTENTI";

    $user=$_SESSION['user'];

    $pass=md5(htmlspecialchars( $_GET["pass"]));

    $pass2=md5(htmlspecialchars( $_GET["passnew"]));

    $query = "UPDATE `$db`.`$tab` SET `password` = '$pass2' WHERE `$db`.`$username` = '$user' AND `$db`.`$password` = '$pass' LIMIT 1;";

    mysql_query($query, $conn);

    echo
    "password cambiata . procedi al ";
    echo
    '<a href="URL_PAGINA_LOGIN">login</a>';;

    ?>
    se ti da qualche errore dillo che eventualmente ti sistemo il codice XP

  13. #13
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Thumbs up

    Grazie mille zednetcorp, tutto sistemato!

Regole di scrittura

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