Visualizzazione dei risultati da 1 a 8 su 8

Discussione: L'update non avviene

Visualizzazione discussione

  1. #1
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606

    L'update non avviene

    Ciao,
    spero che questa sia la sezione giusta del forum, francamente non so dove sta l'errore, se nel PHP o nell'SQL.
    Il fatto è che non c'è un vero errore, se ci fosse lo saprei e l'avrei già corretto, ma apparentemente non c'è nessun errore se non nel fatto che l'update non avviene.
    Sto scrivendo una procedura per l'update di una password in un CMS che sto costruendo per un cliente ma l'update proprio non va. Funziona benissimo l'insert, le select di ogni rodine e grado ma non l'update.
    Ovviamente ho già controllato che l'utente che lo usa abbia i privilegi giusti e li ha :fonzie:


    dunque un po' di codice:
    Procedura di connessione si trova in un file separato che viene incluso al momento di usare il database.
    Codice PHP:
    function connetti($user '') {  $dsn 'mysql:dbname=dominio_XYZ;host=localhost;charset=UTF8';  $user 'dominio_' $user;  try {  $dbh = new PDO($dsn$user'password');            $dbh->setAttribute(PDO::ATTR_AUTOCOMMITfalse);            $dbh->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);            $dbh->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERYtrue);            $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARESfalse);            return $dbh;  }  catch (PDOException $e) {echo 'Connection failed: ' $e->getMessage();}  catch (Exception $e) {echo 'Generic error: ' $e->getMessage();}} 

    La procedura di update potenzialmente incriminata.
    Codice PHP:
    //    Verifico che i dati siano pieni e non ci siano variabili vuote.
    if (array_walk($input, function($v$k){                
      if (
    $v == '' || is_null($v)) return false; else true;
    },  
    ARRAY_FILTER_USE_BOTH) === true) {
                
    //    Nessun errore procedo con la verifica dei dati.                        
              /*
                *    Verifico che le due nuove password siano uguali.
                */
    if ($input['password'][1] == $input['password'][2]) {
                    try {
                        
    $dbh connetti();    //    mi connetto come utente per la verifica dei dati.
                       
    $querySQL 'SELECT password, salt, bannato FROM utente WHERE id_utente=:id LIMIT 1;';
                        
    $sth $dbh->prepare($querySQL);
                        
    $sth->bindValue(':id'$input['id'], PDO::PARAM_INT);
                        if (!
    $sth->execute()) {
                            unset(
    $dbh$querySQL);
                            
    $errore $sth->errorInfo();
                        } else {
                            
    //    Nessun errore proseguo...
                            
    $sth->setFetchMode(PDO::FETCH_ASSOC);
                            
    $utente $sth->fetch();    //    utente contiene i dati dal database.
                            /*
                                *    Prima di continuare verifico che:
                            *    1 - l'utente non sia bannato
                            *    2 - che la vecchia password sia corretta
                            */
                            
    if (($utente['bannato'] > 0) && ($utente['password'] == hash('sha512',"{$input['password'][0]}{$utente['salt']}"))) {
                                unset(
    $dbh$sth);    //    Mi disconnetto...
                                
    $dbh connetti('admin');    //    Mi riconnetto come "amministratore".
                                
    $querySQL 'UPDATE utente SET password = :p, salt = :s WHERE id_utente = :id;';
                                
    $sth $dbh->prepare($querySQL);
                                
    $sth->bindValue(':id'$input['id'], PDO::PARAM_INT);
                                
    $salt hash'sha512'uniqidmt_rand(1mt_getrandmax() ), true ) );    //    Nuovo SALT                            $password = hash( 'sha512', $input['password'][2].$salt );    //    Nuova password ( uso la seconda nuova password, comunque sono verificate entrambe come identiche ).
                                
    $sth->bindValue(':p'$passwordPDO::PARAM_STR);
                                
    $sth->bindValue(':s'$saltPDO::PARAM_STR);
                                if (!
    $sth->execute()) {
                                    unset(
    $sth$dbh$input$utente);
                                    
    $errore $sth->errorInfo();
                                } else {
                                    
    //    se non ci sono stati errori... fatto!
                                    
    unset($sth$dbh$input$utente);
                                    
    //include_once '../bin/logout.php';    //    Mi diconnetto, così l'utente deve per forza riconnettersi usando la nuova password.
                                    
    $errore 'Perfetto! Password cambiata.';
                                }
                            }
                        }
                    }
                    catch (
    PDOException $e) {echo $e->getMessage();}
                    catch (
    Exception $e) {echo $e->getMessage();}
                } else {
                    
    //    Ecco!
                    
    $errore 'Spiacente, ma le due nuove password non coincidono!';
                }

    La procedura è complicata dal fatto che i dati sono cifrati varie volte e confrontati tra loro ma alla fine non cambia la sostanza, anche perché in locale ho messo diversi break point e tutti danno esisto negativo, alla fine della procedura arriva sempre il messaggio "Perfetto! Password cambiata." ma in realtà controllando con phpMyAdmin vedo che non cambia affatto nulla.
    Non so che pesci prendere
    Ultima modifica di Marcolino's; 03-11-2014 a 14:39 Motivo: Per un refuso la formattazione non c'era, ora dovrebbe essere a posto.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.