Visualizzazione risultati 1 fino 29 di 29

Discussione: errore codice login e registrazione sito esami

  1. #1
    prova111111111 non è connesso Utente AlterBlog
    Data registrazione
    02-05-2018
    Messaggi
    15

    Predefinito errore codice login e registrazione sito esami

    Salve a tutti, chiedo il vostro aiuto, sto creando un sito che riguarda la segnalazione di animali smarriti, di animali avvistati e la possibilità di regalarli/venderli.
    il primo problema è sul codice della registrazione (uso xampp, tutto in localhost)
    Codice PHP:
    <html>
    <head>
    <title>Registrazione</title>
    <link real="stylesheet" type="text/css" href="styleRegister.css"/>
    <script src="http//code.jquery.com/jquery-1.6.4.min-js" type="text/javascript"></script>
    </head>
        <body>
      <div id="container">
      <?php
        
    if (!(isset($_POST['invia_dati']))){
      
    ?>
        <form action="registrazione.php" method="post">
            Nome: <input type="text" name="nome" /><br/>
            Cognome: <input type="text" name="cognome" /><br/> 
            Password: <input type="password" name="pass1" /><br/>
            Ripeti Password: <input type="password" name="pass2" /><br/>
            Email: <input type="text" name="email"/><br/>
            <input type="submit" name="invia_dati" value="REGISTRATI"/>
        </form>
        <?php
            
    }else {
                
    $nome $_POST['nome'];
                
    $cognome $_POST['cognome'];
                
    $pass1 $_POST['pass1'];
                
    $pass2 $_POST['pass2'];
                
    $email $_POST['email'];
             
                if(
    $nome == "" || $cognome == "" || $pass1 == "" || $pass2  == "" || $email == "") {
                    echo 
    "devi compilare tutti i campi";
                }else{
                    if(
    $pass1 != $pass2) {
                        echo 
    "le password devono coincidere";
                    }else{
                        
    $servername "localhost";
                        
    $username "root";
                        
    $password "";
                        
    $dbname "amichetti";
                    
                    
                
                        
    $conn =new mysqli($servername,$username$password$dbname);
                        if (
    $conn->connect_error){
                            die (
    "Connection failed: " $conn->connection_error);
                        }
                    
                        
    $query ="INSERT INTO utente (nome,cognome,email,password) VALUES ('$nome','$cognome','$email','$pass1')";
                      
                      
                        
    $sql="SELECT * FROM utente";
                        
    $result=$conn->query($sql);
                        if(
    $result->num_rows>0){ //SE I RECORD SONO PIU' DI 0
                            
    while($row $result->fetch_assoc()){ //SCORRE I RECORD
                                
    if($email==$row['email']){
                                    echo 
    "Email già usata da un altro utente.<br><a href='registrazione.php'>Riprova</a>";
                                }else{
                                    if(
    $username==$row['username']){
                                        echo 
    "Username già in uso da un altro utente.<a href='registrazione.php'>Riprova</a>";
                                    }else{
                                        
    $result=$conn->query($query);
                                        echo 
    "Registrazione effettuata! <br/><a href='login.php'>Entra</a>";
                                    }
                                }
                            }
                        }
                    }
                }
            }
           
    ?>
      </div>
        </body>
    </html>
    e mi da questo errore ="Registrazione effettuata!
    Entra
    Fatal error: Uncaught Error: Call to a member function fetch_assoc() on boolean in C:\xampp\htdocs\esercizi\PROGETTO\registrazione.ph p:52 Stack trace: #0 {main} thrown in C:\xampp\htdocs\esercizi\PROGETTO\registrazione.ph p on line 52"

    questo è il database:

    vi chiedo scusa per il disturbo, perchè poi ci sono poi altri problemi

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

    Predefinito

    A prima vista mi sembra che il codice sia corretto (ma non l'ho provato).
    Mi sembra strano che dia errore sulla fetch_assoc() quando passa la num_rows; prova comunque a fare un var_dump() di $result per vedere cosa è: dall'errore sembra un booleano (TRUE o FALSE), ma in tal caso penso dovrebbe dar un errore anche la num_rows.

    Ciao!

  3. #3
    prova111111111 non è connesso Utente AlterBlog
    Data registrazione
    02-05-2018
    Messaggi
    15

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    A prima vista mi sembra che il codice sia corretto (ma non l'ho provato).
    Mi sembra strano che dia errore sulla fetch_assoc() quando passa la num_rows; prova comunque a fare un var_dump() di $result per vedere cosa è: dall'errore sembra un booleano (TRUE o FALSE), ma in tal caso penso dovrebbe dar un errore anche la num_rows.

    Ciao!
    mai sentito il "var_dump()" da premettere che non sono un esperto dei codici, me la cavicchio perdendo del tempo, esattamente dove devo inserirlo? grazie per l'aiuto

  4. #4
    mzanella è connesso ora AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,141

    Predefinito

    In realtà un errore c'è, ma ben nascosto dalla bizzarra logica che stai usando.
    Codice:
    result = query("SELECT...");
    while (row = result->fetch) {
      if (...) { echo "email in uso" }
      else if (...) { echo "username in uso" }
      else {
        result = query("INSERT...")
      }
    }
    In pratica stai usando una variabile $result per iterare in un ciclo while ma ad un certo punto cambi il valore di $result, rendendo la struttura del ciclo inconsistente. Dovresti come minimo usare nomi diversi per variabili diversi.

    Un altro bel miglioramento che potresti apportare è eliminare del tutto quel ciclo while: se dovessi avere un milione di utenti registrati, con quel ciclo li controlli tutti quanti ogni volta, il che è poco efficiente. Se vuoi verificare che non siano presenti nomi utente o indirizzi email duplicati, il modo migliore è chiederlo direttamente alla base di dati (meglio ancora è creare un indice su questi campi!).

    Questo in teoria, in pratica c'è un altro problema: il nome utente. Nel codice mostrato fai riferimento ad una variabile $username come se fosse il nome utente inserito dall'utente all'atto della registrazione, quando in realtà è il nome dell'utente associato alla base di dati. Analogamente effettui un controllo su $row['username'], ma non sembra che nella tua tabella ci sia una colonna username, si deduce dal fatto che nella query di inserimento specifichi dei valori nome, cognome, email, password ma non per il nome utente.

    Altra cosa: non memorizzare le password in chiaro nella base di dati. Usa password_hash.

  5. #5
    prova111111111 non è connesso Utente AlterBlog
    Data registrazione
    02-05-2018
    Messaggi
    15

    Predefinito

    Codice PHP:
    $sql="SELECT * FROM utente";
                        
    $result=$conn->query($sql);
                        if(
    $result->num_rows>0){ //SE I RECORD SONO PIU' DI 0
                            
    while($row $RESULT->fetch_assoc()){ //SCORRE I RECORD
                                
    if($email==$row['email']){
    ..........
    $result2=$conn->query($query);
                                        echo 
    "Registrazione effettuata! < 
    ok ho cambiato l'ultimo result in result2 (per curiosità, posso mettere sempre nell'ultimo RESULT in grande? anzichè result2?)
    adesso non mi da più errori, ma non mi inserisce lo stesso nulla nel database :c

    per il problema degli indici non ci avevo pensato e ti ringrazio magari proverò a risolvero in un altro momento
    invece per convertire la password in password hash posso dichiare semplicemte (prima dell'inserimento della prima query) "pass1=password_hash" oppure "md5($pass1);" o devo inserirlo in una parte specifica del codice (se non ho scritto cose orrende )
    Ultima modifica di prova111111111 : 02-05-2018 alle ore 19.22.40

  6. #6
    mzanella è connesso ora AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,141

    Predefinito

    In questi casi meglio fermarsi e fare un passo indietro.

    Hai riflettuto sulla questione del nome utente?

    Rinominare uno dei $result in $result2 fa scomparire gli errori, ma non risolve il problema, e non è una buona idea. Supponiamo che fra un mese sia necessario effettuare altri 5 controlli diversi sulla base di dati: ti ritroveresti ad avere in giro variabili $result2, $result3, $result4, $result5, $result6, e dopo un po' è alquanto probabile non capirci più nulla.

    Discorso analogo per l'annidamento dei cicli, puoi semplificarli notevolmente. Altre osservazioni: usa empty per verificare se una stringa è vuota, e non è necessario verificare che $pass2 sia non vuota: se $pass1 è nonn vuota e $pass2 == $pass1 allora anche $pass2 è non vuota.

    Codice PHP:
    $nome $_POST['nome'];
    $cognome $_POST['cognome'];
    $email $_POST['email'];
    $pass1 $_POST['pass1'];
    $pass2 $_POST['pass2'];
    $password password_hash($pass1PASSWORD_DEFAULT);


    if (empty(
    $nome) || empty($cognome) || empty($pass1) || empty($email)) {
        echo 
    "devi compilare tutti i campi"
    }
    else if (
    $pass1 != $pass2) {
        echo 
    "le password devono coincidere"
    }
    else { 
        
    $servername "localhost";
        
    $username "root";
        
    $password "";
        
    $dbname "amichetti";
        
        
    $conn = new mysqli($servername$username$password$dbname);
        if (
    $conn->connect_error) {
            die (
    "Connection failed: " $conn->connection_error);
        }
        
        
    // Verifica l'assenza di email duplicate
        
    $query "SELECT * FROM utente WHERE email = '$email'";
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }

        if (
    $result->num_rows 0) {
            die(
    "Email già usata da un altro utente.<br><a href='registrazione.php'>Riprova</a>");
        }


        
    // Eventuali controlli aggiuntivi
        // ...


        // Inserimento
        
    $query "INSERT INTO utente (nome, cognome, email, password) VALUES ('$nome', '$cognome', '$email', '$password')";
        
    $result $conn->query($sql);
        if (!
    $result) {
            die(
    $conn->error);
        }


        
    // Inserimento avvenuto con successo
        
    echo "Registrazione effettuata! <br/><a href='login.php'>Entra</a>"

    In questo caso è accettabile riutilizzare i nomi degli identificatori, perché utilizzati in frammenti di codice distinti.

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  7. #7
    prova111111111 non è connesso Utente AlterBlog
    Data registrazione
    02-05-2018
    Messaggi
    15

    Predefinito

    sera scusate il ritardo ma ho avuto vari impegni, allora riguardo al nome utente ho eliminato dal database username, cosichè anche se possono essere presenti due o più utenti con il nome e cognome uguali ciò che li differenzia è l'email. come vi sembra?

    riguaro al codice
    Codice PHP:
    <html>
    <head>
    <title>Registrazione</title>
    <link real="stylesheet" type="text/css" href="styleRegister.css"/>
    <script src="http//code.jquery.com/jquery-1.6.4.min-js" type="text/javascript"></script>
    </head>
        <body>
      <div id="container">
      <?php
        
    if (!(isset($_POST['invia_dati']))){
      
    ?>
        <form action="registrazione.php" method="post">
            Nome: <input type="text" name="nome" /><br/>
            Cognome: <input type="text" name="cognome" /><br/> 
            Password: <input type="password" name="pass1" /><br/>
            Ripeti Password: <input type="password" name="pass2" /><br/>
            Email: <input type="text" name="email"/><br/>
            <input type="submit" name="invia_dati" value="REGISTRATI"/>
        </form>
        <?php
            
    }else {
                
    $nome $_POST['nome'];
    $cognome $_POST['cognome'];
    $email $_POST['email'];
    $pass1 $_POST['pass1'];
    $pass2 $_POST['pass2'];
    $password password_hash($pass1PASSWORD_DEFAULT);


    if (empty(
    $nome) || empty($cognome) || empty($pass1) || empty($email)) {
        echo 
    "devi compilare tutti i campi"
    }
    else if (
    $pass1 != $pass2) {
        echo 
    "le password devono coincidere"
    }
    else { 
        
    $servername "localhost";
        
    $username "root";
        
    $password "";
        
    $dbname "amichetti";
        
        
    $conn = new mysqli($servername$username$password$dbname);
        if (
    $conn->connect_error) {
            die (
    "Connection failed: " $conn->connection_error);
        }
        
        
    // Verifica l'assenza di email duplicate
        
    $query "SELECT * FROM utente WHERE email = '$email'";
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }

        if (
    $result->num_rows 0) {
            die(
    "Email già usata da un altro utente.<br><a href='registrazione.php'>Riprova</a>");
        }


        
    // Eventuali controlli aggiuntivi
        // ...
         
        


        // Inserimento
        
    $query "INSERT INTO utente (nome, cognome, email, password) VALUES ('$nome', '$cognome', '$email', '$password')";
        
    $result $conn->query($sql);
        if (!
    $result) {
            die(
    $conn->error);
        }


        
    // Inserimento avvenuto con successo
        
    echo "Registrazione effettuata! <br/><a href='login.php'>Entra</a>"
    }  
    }
           
    ?>
      </div>
        </body>
    </html>
    da questo errore: "
    Notice: Undefined variable: sql in C:\xampp\htdocs\esercizi\PROGETTO\registrazione.ph p on line 67

    Warning: mysqli::query(): Empty query in C:\xampp\htdocs\esercizi\PROGETTO\registrazione.ph p on line 67"

    riguardo ad altri controlli (dato che ho eliminato l'username) se ne dovrei farne altri dovrei AD ESEMPIO scrivere così?
    Codice PHP:
    // Eventuali controlli aggiuntivi
        // ...
         
        
    $query "SELECT * FROM utente WHERE nome = '$nome'";
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }

        if (
    $result->num_rows 0) {
            die(
    "nome già usato da un altro utente.<br><a href='registrazione.php'>Riprova</a>");
        }


        
    // Inserimento 
    vi ricordo che non sono bravo a maneggiare i codici, spero che abbiate pazienza con me

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

    Predefinito

    Non ho letto la logica del codice, ma l'errore è evidente, si capisce leggendo il messaggio di errore:
    Codice PHP:
    $query "INSERT INTO utente (nome, cognome, email, password) VALUES ('$nome', '$cognome', '$email', '$password')"
        
    $result $conn->query($sql); 
    Metti la query in $query e poi passi $sql che non esiste.

    Ciao!

  9. #9
    prova111111111 non è connesso Utente AlterBlog
    Data registrazione
    02-05-2018
    Messaggi
    15

    Predefinito

    Buona domenica a tutti! eccomi di nuovo ahahahahha, allora intanto vi ringrazio perchè il codice questa volta funziona con tutti gli eventuali controlli, l'unico problema che si presenta è che inserisce le varie informazioni dell'utente, ma riguardo alla password non inserisce nulla


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

    Predefinito

    È normale che sia vuota, tu la assegni ad un valore nullo:
    Codice PHP:
    $servername "localhost"
    $username "root"
    $password ""
    $dbname "amichetti"
    Dovresti usare un nome differente per la password di connessione al database e quella dell'utente.

    Ciao!

  11. #11
    prova111111111 non è connesso Utente AlterBlog
    Data registrazione
    02-05-2018
    Messaggi
    15

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    È normale che sia vuota, tu la assegni ad un valore nullo:
    Codice PHP:
    $servername "localhost"
    $username "root"
    $password ""
    $dbname "amichetti"
    Dovresti usare un nome differente per la password di connessione al database e quella dell'utente.

    Ciao!
    ciao ho risolto cosi è funziona!:
    Codice PHP:
    //l'ho inserito prima 
    $passwordmd5 md5($pass1);

    //di...

    .............if (empty($nome) || empty($cognome) || empty($pass1) || empty($email)) {......

    //poi ho corretto....

    // Inserimento, inclusa la password md5 in hash
        
    $query "INSERT INTO utente (nome, cognome, email, password) VALUES ('$nome', '$cognome', '$email', '$passwordmd5')";
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        } 
    adesso ho un'altro problema, vorrei fare un controllo della email, cioè se è stata scritta in modo corretto, ad esempio che sia presente il simbolo "@" o che non ci siano segni strani, quindi ho inseirto questo codice dopo:
    Codice PHP:
    .......
    $nome $_POST['nome'];
    $cognome $_POST['cognome'];
    $email $_POST['email'];
    $pass1 $_POST['pass1'];
    $pass2 $_POST['pass2'];


    //conversione password con md5
    $passwordmd5 md5($pass1);




        
    // check if e-mail address is well-formed
         
    if (!filter_var($emailFILTER_VALIDATE_EMAIL)) {
          
    $email_error "errore nell'inserimeto della email"
         }
      



    if (empty(
    $nome) || empty($cognome) || empty($pass1) || empty($email)) {
        echo 
    "devi compilare tutti i campi"
        
    }
    else if (
    $pass1 != $pass2) {
        echo 
    "le password devono coincidere"

    ma inserisce tutto senza controllare, se inserisco dopo l'if else e le seu parentesi graffe nel punto giusto del codice mi da sempre lo stesso errore, che richiede di inserire una parentesi graffa
    (vi continuo a ringraziarvi, perchè dato che è un progetto per gli esami mi state facendo risparmiare tempo ed ansia GRAZIE MILLE!)
    Ultima modifica di prova111111111 : 06-05-2018 alle ore 22.08.10

  12. #12
    mzanella è connesso ora AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,141

    Predefinito

    Non usare md5 per la password, non è sufficientemente sicuro. Usa password_hash.

    Le email vengono inserite comunque perché, quando incontri un indirizzo in un formato sbagliato, ti limiti ad assegnare una stringa ad una variabile senza fare altro, ad esempio interrompere l'esecuzione dello script mostrando il messaggio d'errore:
    Codice PHP:
    if (!filter_var($emailFILTER_VALIDATE_EMAIL)) {
        die(
    "errore nell'inserimeto della email");

    (vi continuo a ringraziarvi, perchè dato che è un progetto per gli esami mi state facendo risparmiare tempo ed ansia GRAZIE MILLE!)
    Tieni conto che i suggerimenti che ricevi sul forum servono più che altro a fornirti delle indicazioni generali su come procedere, se ti basi solo su esse senza spendere un [bel] po' di tempo approfondendo gli argomenti è improbabile che il risultato sia di qualità adeguata per essere presentato come progetto per un esame.

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  13. #13
    prova111111111 non è connesso Utente AlterBlog
    Data registrazione
    02-05-2018
    Messaggi
    15

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Non usare md5 per la password, non è sufficientemente sicuro. Usa password_hash.

    Le email vengono inserite comunque perché, quando incontri un indirizzo in un formato sbagliato, ti limiti ad assegnare una stringa ad una variabile senza fare altro, ad esempio interrompere l'esecuzione dello script mostrando il messaggio d'errore:
    Codice PHP:
    if (!filter_var($emailFILTER_VALIDATE_EMAIL)) {
        die(
    "errore nell'inserimeto della email");


    Tieni conto che i suggerimenti che ricevi sul forum servono più che altro a fornirti delle indicazioni generali su come procedere, se ti basi solo su esse senza spendere un [bel] po' di tempo approfondendo gli argomenti è improbabile che il risultato sia di qualità adeguata per essere presentato come progetto per un esame.
    Grazie mzanella, ho ri-inserito il la password_hash e ho notato che la password criptografata è molto più sicura! purtroppo faccio errori stupidi non accorgendomi che avevo lasciato il "die", per questo andavo in panne inoltre ho perfezionato il codice aggiungendo eventuali controlli, si può dire che la registrazione adesso è completa!

    passando al login ho cercato di seguire questa guida come esempio: https://www.mrwebmaster.it/sicurezza...i_11755_2.html adattando il codice, infatti ho scritto:
    Codice PHP:
    <html>
    <head>
    <title>Login</title>
    <link real="stylesheet" type="text/css" href="styleRegister.css"/>
    <script src="http//code.jquery.com/jquery-1.6.4.min-js" type="text/javascript"></script>
    </head>
        <body>
        <?php
        
    if (!(isset($_POST['invia_dati']))){
        
    ?>
        <div id="container">
          <form action="" method="post">
            E-mail: <input type="text" name="email" /><br/>
            Password: <input type="password" name="pass"/><br/>
            <input type="submit" name="invia_dati" value="ENTRA"/>
                    <input type="reset" value="Resetta campi!"/>
          </form>
        </div>
        
        
        <?php
        
    } else {
          
    $email $_POST['email'];
           
    $pass $_POST['pass'];
          if (
    $email == "" || $pass == "")
              echo 
    "devi compilare tutti i campi";
            else {
            
            
    $servername "localhost";
            
    $username "root";
            
    $password "";
            
    $dbname "amichetti";
        
        
    $conn = new mysqli($servername$username$password$dbname);
        if (
    $conn->connect_error) {
            die (
    "Connection failed: " $conn->connection_error);
        }
            
              
    //controllo se ho inserito correttamente l'email
        
    if (!filter_var($emailFILTER_VALIDATE_EMAIL)) {
    die(
    "<center>errore nell'inserimeto della email, controlla meglio<br><a href='login.php'>Riprova</a></center>");
    }

            
            
            
    // Verifico tramite l'email se l'utente si è registrato
        
    $query "SELECT * FROM utente WHERE email = '$email'";
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }
        if (
    $result->num_rows 0) {
            
    //die("<center>Email già usata da un altro utente.<br><a href='registrazione.php'>Riprova</a></center>");
        
            

            
    $userPassword password_hash($passPASSWORD_DEFAULT); // password inserita convertita 
      
     
     //verifica password presenti nel databse ed effettuo il controllo
      
    $query "SELECT * FROM utente WHERE password = '$pass'";
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }
            if (
    password_verify($userPassword$query)) {
                 echo 
    "Accesso effettuato con successo, benvenuto";
             } else {
                      echo 
    "La password non è corretta.<br><a href='login.php'>Riprova</a>";
                    }
        
           }
            }
        }
                
        
    ?>
        </body>
    </html>
    ecco il database aggiornato

    dandomi una pagina bianca appena logo indipendentemente da ciò che inserisco

  14. #14
    mzanella è connesso ora AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,141

    Predefinito

    Se ti viene restituita una pagina bianca, quasi certamente nel codice c'è un errore che fa sì che il codice non venga nemmeno eseguito.

    La migliore cosa che puoi fare a questo punto è indentare il codice correttamente, altrimenti diventa molto difficile ragionarci su.

    Si vede che per scrivere la procedura di autenticazione sei partito da una copia di quella di registrazione: va bene, ma sono due processi diversi ed è possibile (come in questo caso) che ci siano controlli utili nel primo caso ma assolutamente inutili nel secondo caso, o viceversa.
    Ad esempio, non serve verificare che la stringa inserita sia un indirizzo email nel formato corretto: se è presente nel database vuol dire che è già nel formato giusto, se non è presente vuol dire che l'autenticazione non può procedere a prescindere dalla correttezza del formato.
    Analogamente, non serve a nulla controllare che ci sia almeno un record con l'indirizzo email specificato: l'email è unica, dunque o non c'è (nel qual caso ci si ferma con un messaggio d'errore) o c'è (nel qual caso si va avanti).

    E guarda bene il controllo della password, il brano di codice che hai scritto è senza senso: prima definisci una query in cui cerchi una corrispondenza sulla password, ma nella base di dati non memorizzi le password, bensì il loro hash.
    Poi esegui la query, che per il motivo sopra indicato restituirà sempre zero risultati.
    Poi ignori completamente il risultato dell'interrogazione appena fatta (dunque perché l'hai eseguita?) e usi password_verify per controllare che l'hash della password che hai appena calcolato (non quella del database...) coincida con... la stringa di query!

    Dopo aver sistemato l'indentazione e le altre cose, controlla bene come si utilizza password_verify, nella documentazione trovi gli esempi di cui hai bisogno.
    Ultima modifica di mzanella : 08-05-2018 alle ore 18.26.01

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  15. #15
    prova111111111 non è connesso Utente AlterBlog
    Data registrazione
    02-05-2018
    Messaggi
    15

    Predefinito

    Salve a tutti! rieccomi! volevo solo informarvi che il codice è quasi funzionante al 90% ci sono piccoli problemi riguardo alle SESSION ed alcune piccolezze, la professoressa mi sta dando una mano in più (per questo non vi ho risposto) appena il codice del login sarà pronto al 100% ve lo posterò se magari a qualche utente servirà!

    invece il codice della registrazione è funzionante al 100%! ho rimesso l'md5 (so che è meno sicuro) perchè ho avuto vari problemi e la prof mi ha consigliato di lasciare questo.
    questo è il codice, ci sentiamo al più presto ;)

    Codice PHP:
    <html>
    <head>
    <title>Registrazione</title>
    <link real="stylesheet" type="text/css" href="styleRegister.css"/>
    <script src="http//code.jquery.com/jquery-1.6.4.min-js" type="text/javascript"></script>
    </head>

         <!--sfondo pagina-->
        <body background="sfondoregistrazione.png">
      <div id="container">
      <?php
      
        
    //Controlla se la variabile invia dati è vuota compare il form, se è piena si prende i dati
        
    if (!(isset($_POST['invia_dati']))){
      
    ?>
        <form action="registrazione.php" method="post">
        <center><h1><img src="logo.png" alt="Mia Immagine"></h1></center>
            <center><table>
            <tr><th>Nome: </th><th><input type="text" name="nome" /><br/></tr></th>
            <tr><th>Cognome: </th><th><input type="text" name="cognome" /><br/></tr></th>
            <tr><th>Nickname: </th><th><input type="text" name="nickname" /><br/></tr></th>
            <tr><th>Password: </th><th><input type="password" name="pass1" /><br/></tr></th>
            <tr><th>Ripeti Password: </th><th><input type="password" name="pass2" /><br/></tr></th>
            <tr><th>Email: </th><th><input type="text" placeholder="esempio@esempio.it" name="email"/><br/></tr></th>
            <tr><th><input type="reset" value="Resetta campi!"/></th><th><input type="submit" name="invia_dati" value="Registrati!"/></tr></th>
            </table></center>
        </form>
        <?php
            
    }else {
    $nome $_POST['nome'];
    $cognome $_POST['cognome'];
    $nickname $_POST['nickname'];
    $email $_POST['email'];
    $pass1 $_POST['pass1'];
    $pass2 $_POST['pass2'];


    //conversione password con md5
    // med5 meno sicura    
    $passwordmd5 md5($pass1);
    //$passwordmd5 = password_hash($pass1, PASSWORD_DEFAULT);     


        // controlla se l'email inserita è corretta o meno
    if (!filter_var($emailFILTER_VALIDATE_EMAIL)) {
    die(
    "<center>errore nell'inserimeto della email, controlla meglio<br><a href='registrazione.php'>Riprova</a></center>");
    }  
      
    //controllo variabili
    if (empty($nome) || empty($cognome) || empty($pass1) || empty($email)) {
        echo 
    "<center>devi compilare tutti i campi</center>"
        
    }
    else if (
    $pass1 != $pass2) {
        echo 
    "<center>Le password devono coincidere <a href='registrazione.php'>Riprova</a></center>"
    }


    else { 
        
    $servername "localhost";
        
    $username "root";
        
    $password "";
        
    $dbname "amichetti";
        
        
    $conn = new mysqli($servername$username$password$dbname);
        if (
    $conn->connect_error) {
            die (
    "Connection failed: " $conn->connection_error);
        }
        
        
    // Verifica se ci sono email duplicate
        
    $query "SELECT * FROM utente WHERE email = '$email'";
        
    //query, esecuzione della query che si è creata
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }
        if (
    $result->num_rows 0) {
            die(
    "<center>Email già usata da un altro utente.<br><a href='registrazione.php'>Riprova</a></center>");
        }

        
    // verifica se il nickname è già presente
        // ...
         
        
    $query "SELECT * FROM utente WHERE nickname = '$nickname'";
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }
       
    //controlla il risultato della query sia maggiore di zero 
        
    if ($result->num_rows 0) {
            die(
    "<center>Il nickname è già usato da un altro utente.<br><a href='registrazione.php'>Riprova</a></center>");
        }


        
    // Inserimento, inclusa la password md5 in hash
        
    $query "INSERT INTO utente (nome, cognome, nickname, email, password) VALUES ('$nome', '$cognome', '$nickname', '$email', '$passwordmd5')";
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }


        
    // Inserimento avvenuto con successo
        
    echo "<center>Registrazione effettuata! Benvenuto/a ".$nome." <br/><a href='login.php'>Entra</a></center>"
    }  
    }
           
    ?>
      </div>
        </body>
    </html>

  16. #16
    prova111111111 non è connesso Utente AlterBlog
    Data registrazione
    02-05-2018
    Messaggi
    15

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Se ti viene restituita una pagina bianca, quasi certamente nel codice c'è un errore che fa sì che il codice non venga nemmeno eseguito.

    La migliore cosa che puoi fare a questo punto è indentare il codice correttamente, altrimenti diventa molto difficile ragionarci su.

    Si vede che per scrivere la procedura di autenticazione sei partito da una copia di quella di registrazione: va bene, ma sono due processi diversi ed è possibile (come in questo caso) che ci siano controlli utili nel primo caso ma assolutamente inutili nel secondo caso, o viceversa.
    Ad esempio, non serve verificare che la stringa inserita sia un indirizzo email nel formato corretto: se è presente nel database vuol dire che è già nel formato giusto, se non è presente vuol dire che l'autenticazione non può procedere a prescindere dalla correttezza del formato.
    Analogamente, non serve a nulla controllare che ci sia almeno un record con l'indirizzo email specificato: l'email è unica, dunque o non c'è (nel qual caso ci si ferma con un messaggio d'errore) o c'è (nel qual caso si va avanti).

    E guarda bene il controllo della password, il brano di codice che hai scritto è senza senso: prima definisci una query in cui cerchi una corrispondenza sulla password, ma nella base di dati non memorizzi le password, bensì il loro hash.
    Poi esegui la query, che per il motivo sopra indicato restituirà sempre zero risultati.
    Poi ignori completamente il risultato dell'interrogazione appena fatta (dunque perché l'hai eseguita?) e usi password_verify per controllare che l'hash della password che hai appena calcolato (non quella del database...) coincida con... la stringa di query!

    Dopo aver sistemato l'indentazione e le altre cose, controlla bene come si utilizza password_verify, nella documentazione trovi gli esempi di cui hai bisogno.
    ovviamente ho corretto la maggior parte del codice seguendo i tuoi consigli molto preziosi!

  17. #17
    prova111111111 non è connesso Utente AlterBlog
    Data registrazione
    02-05-2018
    Messaggi
    15

    Predefinito Errore database/ modello e/r

    salve e rieccomi! invoco di nuovo il vostro aiuto! ho una serie di problemi che purtroppo non riesco a risolvere, il primo è nel database:
    nella tabella ritrovamento l'idAnimale non viene presa come chiave esterna, e nella tabella animale l'idUtente non viene preso come chiave esterna. dandomi per tutti e due lo stesso errore "Errore nel creare una foreign key su idAnimale/idUtente (controlla il tipo di dati)" però il tipo è uguale in tutti gli attributi, allego le foto

    utente:


    smarrimento:


    animale:


    ritrovamento:
    Ultima modifica di prova111111111 : 31-05-2018 alle ore 21.51.02

  18. #18
    mzanella è connesso ora AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,141

    Predefinito

    Ci sono già dei dati nelle tabelle? È possibile che dati preesistenti che non soddisfano il vincolo causino questo problema.

    Se è questo il caso, le soluzioni sono due: specifica un'azione da eseguire ON UPDATE ed ON DELETE o, se questo non funziona, cancella i dati, crea i vincoli e reimporta i dati.

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  19. #19
    prova111111111 non è connesso Utente AlterBlog
    Data registrazione
    02-05-2018
    Messaggi
    15

    Predefinito

    ciao! non vi ho risposto perchè ho provato più volte a risolvere il problema, e l'ho risolto in parte prima facendo quello che mi hai detto tu, poi ho usato questa guida (magari può servire a qualcuno): https://www.youtube.com/watch?v=bnNqvzV4hmw
    ora l'unico problema è che nella tabella smarrito e ritrovato non mi riporta il valore della chiave esterna di idAnimale

    comunque, il problema successivo è questo, quando mi registro nel sito mi deve portare nella homepage principale con tutti i dati passati tramite le SESSION, invece succede che si registra correttamente portandomi nella homepage senza spuntare il mio nome, così:



    ANZICHE' COSI'(che il login fa correttamente):



    e nello stesso momento mi da i seguenti errori (nella pagina della registrazione)
    Codice PHP:
    NoticeUndefined variablerow in C:\xampp\htdocs\esercizi\PROGETTO\registrazione.php on line 98

    Notice
    Undefined variablerow in C:\xampp\htdocs\esercizi\PROGETTO\registrazione.php on line 99

    Notice
    Undefined variablerow in C:\xampp\htdocs\esercizi\PROGETTO\registrazione.php on line 100

    Notice
    Undefined variablerow in C:\xampp\htdocs\esercizi\PROGETTO\registrazione.php on line 101

    Notice
    Undefined variablerow in C:\xampp\htdocs\esercizi\PROGETTO\registrazione.php on line 102

    Notice
    Undefined variablerow in C:\xampp\htdocs\esercizi\PROGETTO\registrazione.php on line 103

    Notice
    Undefined variablerow in C:\xampp\htdocs\esercizi\PROGETTO\registrazione.php on line 104

    Notice
    Undefined variablerow in C:\xampp\htdocs\esercizi\PROGETTO\registrazione.php on line 105 
    codice registrazione
    Codice PHP:
    <html>
    <head>
    <title>Registrazione</title>
    <link real="stylesheet" type="text/css" href="styleRegister.css"/>
    <script src="http//code.jquery.com/jquery-1.6.4.min-js" type="text/javascript"></script>
    </head>

         <!--sfondo pagina-->
        <body background="sfondoregistrazione2.png">

      <?php
      
        
    //Controlla se la variabile invia dati è vuota compare il form, se è piena si prende i dati
        
    if (!(isset($_POST['invia_dati']))){
     
            }else {
    $nome $_POST['nome'];
    $cognome $_POST['cognome'];
    $nickname $_POST['nickname'];
    $email $_POST['email'];
    $pass1 $_POST['pass1'];
    $pass2 $_POST['pass2'];
    $cellulare $_POST['cellulare'];
    $via $_POST['via'];


    //conversione password con md5
    // med5 meno sicura    
    $passwordmd5 md5($pass1);
    //$passwordmd5 = password_hash($pass1, PASSWORD_DEFAULT);     


        // controlla se l'email inserita è corretta o meno
    if (!filter_var($emailFILTER_VALIDATE_EMAIL)) {
    die(
    "<center>errore nell'inserimeto della email, controlla meglio<br><a href='registrazione.php'>Riprova</a></center>");
    }  
      
    //controllo variabili
    if (empty($nome) || empty($cognome) || empty($pass1) || empty($email) || empty($cellulare) || empty($via)) {
        echo 
    "<center>devi compilare tutti i campi<a href='registrazione.html'>Riprova</a></center>"
        
    }
    else if (
    $pass1 != $pass2) {
        echo 
    "<center>Le password devono coincidere <a href='registrazione.php'>Riprova</a></center>"
    }


    else { 
        
    $servername "localhost";
        
    $username "root";
        
    $password "";
        
    $dbname "amichetti";
        
        
    $conn = new mysqli($servername$username$password$dbname);
        if (
    $conn->connect_error) {
            die (
    "Connection failed: " $conn->connection_error);
        }
        
        
    // Verifica se ci sono email duplicate
        
    $query "SELECT * FROM utente WHERE email = '$email'";
        
    //query, esecuzione della query che si è creata
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }
        if (
    $result->num_rows 0) {
            die(
    "<center>Email già usata da un altro utente.<br><a href='registrazione.html'>Riprova</a></center>");
        }

        
    // verifica se il nickname è già presente
        // ...
         
        
    $query "SELECT * FROM utente WHERE nickname = '$nickname'";
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }
       
    //controlla il risultato della query sia maggiore di zero 
        
    if ($result->num_rows 0) {
            die(
    "<center>Il nickname è già usato da un altro utente.<br><a href='registrazione.html'>Riprova</a></center>");
        }


        
    // Inserimento, inclusa la password md5 in hash
        
    $query "INSERT INTO utente (nome, cognome, nickname, email, password, cellulare, via) VALUES ('$nome', '$cognome', '$nickname', '$email', '$passwordmd5', '$cellulare', '$via')";
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }

    else{
        
    // Inserimento avvenuto con successo
        
    echo "<center>Registrazione effettuata! Benvenuto/a ".$nome." <br/><a href='utente.php'>Entra</a></center>"
        
        
    session_start();

              
    $_SESSION['invia_dati']=true;
              
    $_SESSION['idUtente']=$row['idUtente'];
              
    $_SESSION['nome']=$row['nome'];
              
    $_SESSION['cognome']=$row['cognome'];
              
    $_SESSION['nickname']=$row['nickname'];
              
    $_SESSION['email']=$row['email'];
              
    $_SESSION['password']=$row['password'];
              
    $_SESSION['cellulare']=$row['cellulare'];
              
    $_SESSION['via']=$row['via'];
    }
        
    }  
    }
           
    ?>
      
        </body>
    </html>
    codice della homepage:
    Codice PHP:
    <?php
    session_start
    ();
    ?>
    <html>
    <head>
    <title>Trova Amico</title>
    <style>



    ul {
        
        margin: 0 0 0 318px; /*spazio creato per il logo*/
        padding: 0 ;
        overflow: hidden;
        background-color: #FF6600; /* colore sfondo barra orizontale */
        list-style:none;
        
        
         
        
    }

    li {
        float: left;  /*menù di sinistra*/
        
    }


    nav {
       width:100%;
       background:#FF6600;
       overflow:auto;
       border-radius: 7px; /*arrotondamento dell'intera navbar*/
       font-size: large; /*ingrandimento testo*/
    }

    li a {
        display: block;
        color: white;  /* colore parole scritte nei menù*/
        text-align: center;
        padding: 21px 16px;  /*larghezza navbar e larghezza parole*/
        text-decoration: none;
        border-radius: 7px; /* arrotondamento bordi dei 3 menù di destra*/
         
        
        }

    li a:hover:not(.active) {
        background-color: #0099FF; /* cambia colore in azzurro al passaggio del mouse nei tasti*/
        
    }

    .active {
        background-color: #0099FF;   /* colore azzurro fisso*/
        border-right:5px solid #FF6600; /* spessore arancione degli ultimi 3 menù*/

    }


    .logo img {  /*posizionamento del logo all'interno della navbar*/
       position: absolute;
       margin-top:-05px;
       margin-left:-01px;
       
    }

    #menu1 {
                position:absolute;
                left: 40px;  /*più piccolo è il numero più si sposta a sx*/
                top: 120px;  /*più piccolo è il numero più sale*/
    }

    #menu2 {
                position:absolute;
                left: 350px;
                top: 120px;
    }

    #menu3 {
                position:absolute;
                left: 190px;
                top: 360px;            
    }


    </style>
    </head>
    <body background="sfondohome.jpg">

    <div class="logo"><a href = "utente.php"><img src="logo1.png"></a></div>

    <nav>
    <ul>
      <li><a href="#home">I tuoi amichetti smarriti</a></li>
      <li><a href="#news">I tuoi amichetti avvistati</a></li>
      <li><a href="#contact">I tuoi amichetti offerti</a></li>
      <li style="float:right"><a class="active" href="logout.php">Logout</a></li>
      <li style="float:right"><a class="active"  href="
      <?php
      
    if(isset($_SESSION['nome'])){
          echo 
    "opzioniUtente.html";
      }
      else{
        echo 
    "Login.PHP";
      }
    ?>"><?php
      
    if(isset($_SESSION['nome'])){
          echo 
    "Benvenuto ".$_SESSION['nome'];
      }
      else{
        echo 
    "Login";
      }
    ?></a></li>
      
       <!--<li style="float:right"><a class="active" href="registrazione.html">Registrazione</a></li>-->
        <!--<li style="float:right"><a class="active" href="login.html">Login</a></li>-->
    </ul> 
    </nav> 

    <div id="menu1"><a href="form smarriti.php"><img src="menu1.png" /></a></div> 
    <div id="menu2"><a href="form avvistati.php"><img src="menu2.png" /></a></div>
    <div id="menu3"><a href="form offerta.php"><img src="menu3.png" /></a></div>

         
         
    </body>
    </html>
    ps: il progetto sta prendendo forma! non smetterò di ringraziarvi!

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

    Predefinito

    Leggi il messaggio:
    Notice: Undefined variable: row in
    Dove crei la variabile $row?

    Ciao!

  21. #21
    prova111111111 non è connesso Utente AlterBlog
    Data registrazione
    02-05-2018
    Messaggi
    15

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Leggi il messaggio:

    Dove crei la variabile $row?

    Ciao!
    ho scritto questo:
    Codice PHP:
    // Inserimento, inclusa la password md5 in hash
        
    $query "INSERT INTO utente (nome, cognome, nickname, email, password, cellulare, via) VALUES ('$nome', '$cognome', '$nickname', '$email', '$passwordmd5', '$cellulare', '$via')";
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }
    else{
        
         if (
    $result->num_rows 0) {  //RIGA 93
            // fetch_array - restituisce sotto forma di array i dati della riga corrente del risultato della query
              
    $row$result ->fetch_array();
        
    // Inserimento avvenuto con successo
        
    echo "<center>Registrazione effettuata! Benvenuto/a ".$nome." <br/><a href='utente.php'>Entra</a></center>"
        
        
    session_start();

              
    $_SESSION['invia_dati']=true;
              
    $_SESSION['idUtente']=$row['idUtente'];
              
    $_SESSION['nome']=$row['nome'];
              
    $_SESSION['cognome']=$row['cognome'];
              
    $_SESSION['nickname']=$row['nickname'];
              
    $_SESSION['email']=$row['email'];
              
    $_SESSION['password']=$row['password'];
              
    $_SESSION['cellulare']=$row['cellulare'];
              
    $_SESSION['via']=$row['via'];
              }
    }
        

    dandomi questo:
    Notice: Trying to get property 'num_rows' of non-object in C:\xampp\htdocs\esercizi\PROGETTO\registrazione.ph p on line 93
    Ultima modifica di prova111111111 : 03-06-2018 alle ore 11.01.50

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

    Predefinito

    Codice PHP:
     $query "INSERT INTO utente (nome, cognome, nickname, email, password, cellulare, via) VALUES ('$nome', '$cognome', '$nickname', '$email', '$passwordmd5', '$cellulare', '$via')";
    $result $conn->query($query);
    if (
    $result->num_rows 0) {  //RIGA 93
            // fetch_array - restituisce sotto forma di array i dati della riga corrente del risultato della query
              
    $row$result ->fetch_array(); 
    Come puoi leggere dei dati con una INSERT?
    Se vuoi leggere dati, devi usare la SELECT!

    Ciao!

  23. #23
    prova111111111 non è connesso Utente AlterBlog
    Data registrazione
    02-05-2018
    Messaggi
    15

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Codice PHP:
     $query "INSERT INTO utente (nome, cognome, nickname, email, password, cellulare, via) VALUES ('$nome', '$cognome', '$nickname', '$email', '$passwordmd5', '$cellulare', '$via')";
    $result $conn->query($query);
    if (
    $result->num_rows 0) {  //RIGA 93
            // fetch_array - restituisce sotto forma di array i dati della riga corrente del risultato della query
              
    $row$result ->fetch_array(); 
    Come puoi leggere dei dati con una INSERT?
    Se vuoi leggere dati, devi usare la SELECT!

    Ciao!
    Giusto! che stupido! si adesso ho corretto il tutto e funziona! grazie!
    l'altro problema successivo non riguarda prorpio il codice vi spiego, io uso 2 homepage, la prima da una spiegazione di che cosa fa il sito dove ti obbliga a loggarti o registrarti, dopo aver fatto ciò l'utente viene portato alla 2 homepage dove può effettuare il logout, il tasto funziona che mi riporta alla prima homepage, ma se vado indietro usando i tasti del browser per cambiare pagina mi riporta di nuovo alla homepage precedente (senza essere loggato quindi e senza i dati riportati) e questo non deve avvenire, si può risolvere?

  24. #24
    mzanella è connesso ora AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,141

    Predefinito

    Quando effettui il login, tieni traccia dell'utente autenticato in una variabile di sessione. Questa variabile verrà opportunamente distrutta al logout.

    Nella tua seconda homepage controlla, come prima cosa, che l'utente sia effettivamente autenticato, facendo riferimento alla suddetta variabile di sessione: se non presente, reindirizzerai l'utente alla prima homepage, ad esempio con:
    Codice PHP:
    header('Location: prima_homepage.php'); 
    Assicurati di aver prima capito bene come funziona header.

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  25. #25
    prova111111111 non è connesso Utente AlterBlog
    Data registrazione
    02-05-2018
    Messaggi
    15

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Quando effettui il login, tieni traccia dell'utente autenticato in una variabile di sessione. Questa variabile verrà opportunamente distrutta al logout.

    Nella tua seconda homepage controlla, come prima cosa, che l'utente sia effettivamente autenticato, facendo riferimento alla suddetta variabile di sessione: se non presente, reindirizzerai l'utente alla prima homepage, ad esempio con:
    Codice PHP:
    header('Location: prima_homepage.php'); 
    Assicurati di aver prima capito bene come funziona header.
    Eccomi di nuovo yeee! allora ho risolto facendo cosi,ho inserito questo (magai può servire a qualcuno) all'inizio di ogni pagina dopo che l'utente si è loggato:
    Codice PHP:
    <?php
    session_start
    ();
    if(!isset(
    $_SESSION['idUtente'])) header("Location: homee.html"); 
    ?>
    ADESSO ho un ultimo (e credo che così vi lascio in pace) nella modifica utenti, ecco cosa succede:
    1) se voglio aggiornare SOLO la password esegue ciò dandomi l'errore SOLO nella riga 60 (è commentata) e però mi sembra strano che mi di questo errore (Notice: Undefined variable: pass1 in C:\xampp\htdocs\esercizi\PROGETTO\opzioniUtente1.p hp on line 60)

    2)se io aggiorno i dati senza compilare nessun campo O se compilo un campo a mia scelta(escluse le pass), non mi fa nulla e mi porta all'header presente nella riga 64 (commentata)

    3) se inserisco solo la vecchia password e inserisco la stessa password nella parte "conferma nuova password" mi da questi errori, le righe sono segnate nel codice (Notice: Undefined variable: pass1 in C:\xampp\htdocs\esercizi\PROGETTO\opzioniUtente1.p hp on line 60

    Notice: Undefined variable: password2md5 in C:\xampp\htdocs\esercizi\PROGETTO\opzioniUtente1.p hp on line 177)
    e la vecchia password presente scompare diventando nulla!
    non vi ho scritto prima perchè ho provato a fare qualcosa, ma adesso sono ad un punto morto! mi manca solo l'aggiornamento dati per completare il progetto!

    Pagina con i controlli
    Codice PHP:
    <?php
    session_start
    ();
    ?>

    <html>
    <head>
    <title>Aggiornamento dati</title>
    <link real="stylesheet" type="text/css" href="styleRegister.css"/>
    <script src="http//code.jquery.com/jquery-1.6.4.min-js" type="text/javascript"></script>
    </head>

         <!--sfondo pagina-->
        <body background="sfondoregistrazione2.png">

      <?php
      
      $flag_email
    =-1;
      
    $flag_nickname=-1;
        
    //Controlla se la variabile invia dati è vuota compare il form, se è piena si prende i dati
        
    if (!(isset($_POST['invia_dati']))){
     
            }
            else {
                if(empty(
    $_POST['nome'])){ 
                
    $nome=$_SESSION['nome'];
                }
                else 
                    
    $nome=$_POST['nome'];
                
                
                
                if(empty(
    $_POST['cognome'])){ 
                
    $cognome=$_SESSION['cognome'];
                }
                else 
                    
    $cognome=$_POST['cognome'];
                
                
                
                if(
    $_POST['nickname']==NULL){ 
                
    $nickname=$_SESSION['nickname'];
                }
                else {
                    
    $nickname=$_POST['nickname'];
                
    $flag_nickname=1;}
                
                
                
                if(empty(
    $_POST['email'])){ 
                
    $email=$_SESSION['email'];
                }
                else {
                    
    $email=$_POST['email'];
                
    $flag_email=1;
                }
                
                
                if(
    md5($_POST['pass1'])==$_SESSION['password']){ 
                
                    
    $passwordmd5 md5($pass1); //riga 60
                
                
    }
                else{ 
                
                    
    header("location: errore password1.html"); //riga64
                    
    die();
                }
                
                
                
                    
                
                
                
                if(empty(
    $_POST['cellulare'])){ 
                
    $cellulare=$_SESSION['cellulare'];
                }
                else 
                    
    $cellulare=$_POST['cellulare'];
                
                
                
                
                if(empty(
    $_POST['via'])){ 
                
    $via=$_SESSION['via'];
                }
                else 
                    
    $via=$_POST['via'];
                
                
                
            
            
            
            
    if(!empty(
    $_POST['pass2']))    
    {    
    $pass2=$_POST['pass2'];

    if(!empty(
    $_POST['pass3']))    
    {
    $pass3=$_POST['pass3'];
    if(
    $pass2==$pass3)
            
    $password2md5 md5($pass2);
        else {
        
    header("location: errore password1.html"); //riga 105
        
    die();
    }
    }
    }


    //conversione password con md5
    // med5 meno sicura    



    //$passwordmd5 = password_hash($pass1, PASSWORD_DEFAULT);     


        // controlla se l'email inserita è corretta o meno
    if (!filter_var($emailFILTER_VALIDATE_EMAIL) ) {
    die(
    "<center>errore nell'inserimeto della email, controlla meglio<br><a href='opzioniUtente.html'>Riprova</a></center>");
    }  
      
    //controllo variabili




     
        
    $servername "localhost";
        
    $username "root";
        
    $password "";
        
    $dbname "amichetti";
        
        
    $conn = new mysqli($servername$username$password$dbname);
        if (
    $conn->connect_error) {
            die (
    "Connection failed: " $conn->connection_error);
        }
        
        
        
        
    // Verifica se ci sono email duplicate
        
    $query "SELECT * FROM utente WHERE email = '$email'";
        
        
    //query, esecuzione della query che si è creata
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }
        if (
    $result->num_rows && $flag_email==1) {
            die(
    "<center>Email già usata da un altro utente.<br><a href='opzioniUtente.php'>Riprova</a></center>");
        }

        
        
        
        
        
        
    // verifica se il nickname è già presente
        
    $query "SELECT * FROM utente WHERE nickname = '$nickname'";
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }
       
    //controlla il risultato della query sia maggiore di zero 
        
    if ($result->num_rows && $flag_nickname==1) {
            die(
    "<center>Il nickname è già usato da un altro utente.<br><a href='opzioniUtente.html'>Riprova</a></center>");
        }


        
        
        
        
    // aggiornamento dati, inclusa la password md5 in hash.   LA QUERY E' LA RIGA 177
        
    $query "UPDATE `utente` SET `nome` = '$nome', `cognome` = '$cognome', `nickname` = '$nickname', `email` = '$email', `password` = '$password2md5', `cellulare` = '$cellulare', `via` = '$via' WHERE `utente`.`idUtente` = '".$_SESSION['idUtente']."'"
     
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }
        
        
        
        
        
        
        
    $query "SELECT * FROM utente WHERE idUtente ='".$_SESSION['idUtente']."'";
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }
        
    if (
    $result->num_rows 0) {
            
              
    $row$result ->fetch_array();

        
    // Aggiornamento avvenuto con successo
              
    $_SESSION['invia_dati']=true;
              
    $_SESSION['idUtente']=$row['idUtente'];
              
    $_SESSION['nome']=$row['nome'];
              
    $_SESSION['cognome']=$row['cognome'];
              
    $_SESSION['nickname']=$row['nickname'];
              
    $_SESSION['email']=$row['email'];
              
    $_SESSION['password']=$row['password'];
              
    $_SESSION['cellulare']=$row['cellulare'];
              
    $_SESSION['via']=$row['via'];
              echo 
    "<center>Aggiornamento effettuato! Ritorna alla home ".$nome." <br/><a href='utente.php'>Entra</a></center>"

              
        }
        
     
    }       
    ?> 
    </body>
    </html>


    Pagina inserimento
    Codice PHP:
    <?php
    session_start
    ();
    if(!isset(
    $_SESSION['idUtente'])) header("Location: homee.html"); 
    ?>
    <html>
    <head>
    <title>Aggiornamento dati</title>
    </head>

    <style>
    /*codice solo tasto*/

    .button {
      display: inline-block;
      border-radius: 4px;
      background-color: #f4511e;
      border: none;
      color: #FFFFFF;
      text-align: center;
      font-size: 28px;
      padding: 20px;
      width: 200px;
      transition: all 0.5s;
      cursor: pointer;
      margin: 5px;
    }

    .button span {
      cursor: pointer;
      display: inline-block;
      position: relative;
      transition: 0.5s;
    }

    .button span:after {
      content: '\00bb';
      position: absolute;
      opacity: 0;
      top: 0;
      right: -20px;
      transition: 0.5s;
    }

    .button:hover span {
      padding-right: 25px;
    }

    .button:hover span:after {
      opacity: 1;
      right: 0;
    }
    </style>


    <body background="sfondi/sfondoregistrazione.png">
    <form action="opzioniUtente1.php" method="post">
        <center><h1><img src="sfondi/logo.png" alt="Mia Immagine"></h1></center>
            <center><table>
            <tr><th>Nuovo Nome: </th><th><input type="text" name="nome" /><br/></tr></th>
            <tr><th>Nuovo Cognome: </th><th><input type="text" name="cognome" /><br/></tr></th>
            <tr><th>Nuovo Nickname: </th><th><input type="text" name="nickname" /><br/></tr></th>
            <tr><th>Vecchia password: </th><th><input type="password" name="pass1" /><br/></tr></th>
            <tr><th>Nuova password: </th><th><input type="password" name="pass2" /><br/></tr></th>
            <tr><th>Conferma nuova password: </th><th><input type="password" name="pass3" /><br/></tr></th>
            <tr><th>Nuovo Email: </th><th><input type="text" placeholder="esempio@esempio.it" name="email"/><br/></tr></th>
            <tr><th>Nuovo Cellulare: </th><th><input type="tel" placeholder="0123456789" name="cellulare"/><br/></tr></th>
            <tr><th>Nuovo Via: </th><th><input type="text" placeholder="via Roma" name="via"/><br/></tr></th>
            <tr><th><input type="reset" value="Resetta campi!"/></th><th><input type="submit" name="invia_dati" value="Aggiorna!"/></tr></th>
            </table></center></form>
            <br>
            <!--sto stampande l'id utente dentro lhref per prenderlo-->
            <center> <a href="elimina account.php?del=<?php echo $_SESSION['idUtente']?>"><button class="button" style="vertical-align:middle"><span>Cancellare account?</span></button></a>
            <p>(ciò cancellerà anche tutti i dati inseriti)</p></center>
        
        </body>
    </html>

    Codice dell'header
    Codice PHP:
    <html>
    <
    head>
    <
    title>Errore password</title>
    </
    head>
     <
    body background="sfondi/sfondo errore password.jpg"> </form>
     <
    meta http-equiv="refresh" content="3; url=opzioniUtente.php">
        </
    body>
    </
    html

  26. #26
    mzanella è connesso ora AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,141

    Predefinito

    Non c'è nulla di strano, stai cercando di accedere a variabili che non sono definite da nessuna parte.
    Ad esempio, nella riga 60 cerchi di calcolare md5($pass1): questo $pass1 chi è? A naso dovrebbe essere $_POST['pass1'].

    Un discorso analogo per l'errore alla riga 177: per come hai scritto il codice non è detto che $password2md5 sia definita. Preso il tuo codice e indentato correttamente si vede subito qual'è il problema:
    Codice PHP:
    if(!empty($_POST['pass2'])) {
        
    $pass2=$_POST['pass2'];

        if(!empty(
    $_POST['pass3'])) {
            
    $pass3=$_POST['pass3'];
            if(
    $pass2==$pass3)
                
    $password2md5 md5($pass2);
            else {
                
    header("location: errore password1.html");
                die();
            }
        }

    Se $_POST['pass2'] e $_POST['pass3'] esistono e sono uguali, definisci la variabile. Se esistono ma non sono uguali, esci. Se non esistono non fai niente, e la variabile $password2md5 non viene definita, però alla riga 177 cerchi di usarla comunque.
    A meno che tu non intendessi fare riferimento a $passwordmd5 calcolato alla riga 60 e che poi non usi più?

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  27. #27
    prova111111111 non è connesso Utente AlterBlog
    Data registrazione
    02-05-2018
    Messaggi
    15

    Predefinito

    Ho risolto tutto! mancavano molti controlli, e molti else! vi posto il codice magari vi può servire! il codie è pure commentato (adesso l'ultimo passo è caricarlo online!)
    Codice PHP:
    <?php
    session_start
    ();
    ?>

    <html>
    <head>
    <title>Aggiornamento dati</title>
    <link real="stylesheet" type="text/css" href="styleRegister.css"/>
    <script src="http//code.jquery.com/jquery-1.6.4.min-js" type="text/javascript"></script>
    </head>

         <!--sfondo pagina-->
        <body background="sfondoregistrazione2.png">

      <?php
      
      
    //usiamo variabili flag per futuri controlli di settaggio dei relativi campi del form
      
    $flag_email=-1;
      
    $flag=-1;
      
    $flag_nickname=-1;
      
        
    //Controlla se sono stati inseriti tutti i dati richiesti dal form
        
    if(empty($_POST['nome']) && empty($_POST['cognome']) && empty($_POST['nickname']) && empty($_POST['email']) && empty($_POST['cellulare']) && empty($_POST['via']) && empty($_POST['pass1']) && empty($_POST['pass2']) && empty($_POST['pass3']))
        { 
             
    header("location: opzioniUtente.php"); //riga 105
        
    die();
        }
        
        
    //controlla i campi vuoti da non aggiornare
        
    else {
                if(empty(
    $_POST['nome'])){ 
                
    $nome=$_SESSION['nome'];
                }
                else 
                    
    $nome=$_POST['nome'];
                
                
                
                if(empty(
    $_POST['cognome'])){ 
                
    $cognome=$_SESSION['cognome'];
                }
                else 
                    
    $cognome=$_POST['cognome'];
                
                
                
                if(
    $_POST['nickname']==NULL){ 
                
    $nickname=$_SESSION['nickname'];
                }
                else {
                    
    $nickname=$_POST['nickname'];
                
    $flag_nickname=1;}
                
                
                
                if(empty(
    $_POST['email'])){ 
                
    $email=$_SESSION['email'];
                }
                else {
                    
    $email=$_POST['email'];
                
    $flag_email=1;
                }
                
            
                
                
                if(empty(
    $_POST['cellulare'])){ 
                
    $cellulare=$_SESSION['cellulare'];
                }
                else 
                    
    $cellulare=$_POST['cellulare'];
                
                
                
                
                if(empty(
    $_POST['via'])){ 
                
    $via=$_SESSION['via'];
                }
                else 
                    
    $via=$_POST['via'];
                
                
        
    $servername "localhost";
        
    $username "root";
        
    $password "";
        
    $dbname "amichetti";
        
        
    // si crea una nuova connessione al server mysql 
        
    $conn = new mysqli($servername$username$password$dbname);
        if (
    $conn->connect_error) {
            die (
    "Connection failed: " $conn->connection_error);
        }    
        
    // controllo se sono stati inseriti tutti i valori per procedere all'aggiornamento della password        
    if( !empty($_POST['pass1']) && !empty($_POST['pass2']) && !empty($_POST['pass3']))    
    {    
        
    //controllo corispondenza con vecchia password tramite la session
        
    if(md5($_POST['pass1'])==$_SESSION['password']){ 
        
        
    $pass2=$_POST['pass2'];

    $pass3=$_POST['pass3'];
    //controllo coerenza della nuova password
        
    if($pass2==$pass3)
       {
            
    $password1md5 md5($pass2);
        
    //setto il flag di controllo query con password a 1
        
    $flag=1;
        
    //eseguo la query di aggiornamento password
         
    $query "UPDATE `utente` SET `nome` = '$nome', `cognome` = '$cognome', `nickname` = '$nickname', `email` = '$email',`password`='$password1md5', `cellulare` = '$cellulare', `via` = '$via' WHERE `utente`.`idUtente` = '".$_SESSION['idUtente']."'"
         
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }
    }
    else 
    {
        
    //nel caso in cui le 2 password non coincidano (pass nuova con quella di conferma) effettuiamo il redirect alla pagina di aggiornamento 
        
    header("location: errore password1.html"); //riga 105
        
    die();
    }            
    }
    else {
        
    header("location: errore password1.html"); //riga 105
        
    die();
    }
    }

        
    // controlla se l'email inserita è corretta o meno
    if (!filter_var($emailFILTER_VALIDATE_EMAIL) ) {
    die(
    "<center>errore nell'inserimeto della email, controlla meglio<br><a href='opzioniUtente.html'>Riprova</a></center>");
    }  
         
        
    // Verifica se ci sono email duplicate
        
    $query "SELECT * FROM utente WHERE email = '$email'";
        
        
    //esecuzione della query
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }
        if (
    $result->num_rows && $flag_email==1) {
            die(
    "<center>Email già usata da un altro utente.<br><a href='opzioniUtente.php'>Riprova</a></center>");
        }
        
        
    // verifica se il nickname è già presente
        
    $query "SELECT * FROM utente WHERE nickname = '$nickname'";
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }
       
    //controlla il risultato della query ha restituito un numero di righe maggiore di zero 
        
    if ($result->num_rows && $flag_nickname==1) {
            die(
    "<center>Il nickname è già usato da un altro utente.<br><a href='opzioniUtente.php'>Riprova</a></center>");
        }
        
        
        if(
    $flag!=1)
        {
        
    // aggiornamento dati, inclusa la password md5 in hash.
        
    $query "UPDATE `utente` SET `nome` = '$nome', `cognome` = '$cognome', `nickname` = '$nickname', `email` = '$email', `cellulare` = '$cellulare', `via` = '$via' WHERE `utente`.`idUtente` = '".$_SESSION['idUtente']."'"
     
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }
        }
        
        
    //aggiorna i dati dell'utente memorizzati nella sessione
        
    $query "SELECT * FROM utente WHERE idUtente ='".$_SESSION['idUtente']."'";
        
    $result $conn->query($query);
        if (!
    $result) {
            die(
    $conn->error);
        }
        
    if (
    $result->num_rows 0) {
            
              
    $row$result ->fetch_array();

        
    // Aggiornamento avvenuto con successo
              
    $_SESSION['invia_dati']=true;
              
    $_SESSION['idUtente']=$row['idUtente'];
              
    $_SESSION['nome']=$row['nome'];
              
    $_SESSION['cognome']=$row['cognome'];
              
    $_SESSION['nickname']=$row['nickname'];
              
    $_SESSION['email']=$row['email'];
              
    $_SESSION['password']=$row['password'];
              
    $_SESSION['cellulare']=$row['cellulare'];
              
    $_SESSION['via']=$row['via'];
              echo 
    "<center>Aggiornamento effettuato! Ritorna alla home ".$nome." <br/><a href='utente.php'>Entra</a></center>"

              
        }
        }
     
        
    ?> 
    </body>
    </html>

  28. #28
    TrovaAmico non è connesso Neofita
    Data registrazione
    09-06-2018
    Messaggi
    6

    Predefinito

    domanda stupida e banale come si sposta lo sfondo in questo codice? (preferibilmente verso il basso)
    Codice PHP:
    body{    
        
    background-imageurl("sfondi/sfondohome.jpg");
        
    background-repeatno-repeat;
        
    background-positioncenter;
        
    background-color#ff1a1a;


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

    Predefinito

    @trovaAmico il tuo problema non centra nulla con la discussione. Apri una tua discussione per il tuo problema.
    Comunque vedi qui.

    Ciao!

Regole di scrittura

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