[PDO][MySQL] L'update non avviene

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
Ciao,
spero che questa sia la sezione giusta del forum, francamente non so dove sta l'errore, se nel PHP o nell'SQL quindi mi rimetto al vostro giudizio.
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.
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_AUTOCOMMIT, false);
			$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
			$dbh->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
			$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
			return $dbh;
  }
  catch (PDOException $e) {echo 'Connection failed: ' . $e->getMessage();}
  catch (Exception $e) {echo 'Generic error: ' . $e->getMessage();}
}

La procedura di update potenzialmente incriminata.
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', uniqid( mt_rand(1, mt_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', $password, PDO::PARAM_STR);
							$sth->bindValue(':s', $salt, PDO::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 :(
 

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
Risolto, la colpa era di: $dbh->setAttribute(PDO::ATTR_AUTOCOMMIT, false); che va settato a true.
Strano l'avevo settato a false in quanto true non mi dava la possibilità di fare una inserto ... ON DUPLICATE KEY
 
Discussioni simili
Autore Titolo Forum Risposte Data
K Non trovo l'errore! PDO MYSQL UPDATE PHP 2
3_g errore con mysql insert in PDO PHP 29
F Help-PDO copiare Database MySQL PHP 3
F php PDO mysql connessione(select_db) PHP 3
MarcoGrazia [PHP][PDO][MySQL] Non registra ma non da nemmeno errori. PHP 0
MarcoGrazia [PDO][PHP[MySQL] Piccolo modulo di ricerca in un sito tramite l'operatore LIKE Snippet PHP 1
R Organizzazione PHP Mysql PDO PHP 15
Monital Da mysql a PDO PHP 3
L login con pdo/mysql PHP 2
L da mysql a pdo PHP 4
L pdo (stampare un valore con ritorno a funzione) PHP 0
K [PHP] PDO.bindingParam PHP 2
M [PHP] Interrompere DROP TABLE con PDO PHP 0
M [PHP] Alternativa a datagrid con PDO PHP 6
M [PHP] Creare un menu a tendina con pdo PHP 18
M [PHP] Array di array - PDO PHP 2
W [PHP] Creazione classe PDO PHP 4
F PHP, PDO e visualizzazioni errori e/o eccezioni PHP 3
3_g [PHP] mvc, pdo e classi... PHP 7
Fredyss redirect a altra pagina php dopo commit su postgresql con PDO PHP 1
C [PHP] PDO prepared statement - select query errore PHP 7
ANDREA20 [PHP] Errore $this->db_connection = new PDO PHP 0
CristianB72 Non riesco a connettermi al DB tramite PDO Database 10
MarcoGrazia [PHP][PDO] Come connettersi al database Snippet PHP 0
neo996sps [PHP e funzioni con PDO] Funzione per generare corpo tabella PHP 1
Marco_88 fetchAll() PDO PHP 13
D Paginazione dati PDO PHP 8
N Problemi estrazione / visualizzazione immagini dal database con PDO PHP 2
M PDO e mysqli PHP 1
MarcoGrazia [PDO] insert che non inserisce e non da errori PHP 1
Monital PDO e connessioni a più database PHP 4
S PDO accertarsi del avvenimento della query PHP 1
voldemort PHP PDO: non c'ho capito niente PHP 1
L [RISOLTO]PDO if per "non ci sono dati" PHP 8
L pdo e sistema crud PHP 1
L Paginazione con pdo. PHP 8
L pdo con login PHP 2
L PDO : bindParam PHP 3
S Problema di login con PDO PHP 2
B Esercizio PDO PHP 20
B Pdo PHP 6
S Meglio mysqli o PDO ? PHP 2
borgo italia query con PDO PHP 11
borgo italia classe pdo PHP 9
M PDO prepare PHP 1
K form Inserimento record mysql PHP 2
P Mysql lento a cancellare MySQL 1
P Codifica caratteri speciali mysql php PHP 0
N MAX() + ADD_DATE - per update su Mysql MySQL 0
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20

Discussioni simili