Come prima cosa, salve a tutti, ecco il mio problema:
sto sviluppando un'applicazione web basata su php e db postgres nella quale ho anche implementato la gestione degli utenti memorizzazione credenziali, gestione del login, ecc ecc... tra le tante ho creato una pagina per la gestione del proprio account ( modifica dello user e della password ) e fin qui nessun problema la password riesco a cambiarla tranquillamente da una form php che poi farà le query adatte per cambiarla nel db, il problema salta fuori quando all'interno di una password piazzo degli spazi bianchi ad esempio "la mia password".
Le password all'interno del db sono memorizzate in una tabella chiamata credenziali che contiene tutte le credenziali ( nome utente e password ) di tutti gli utenti, ma oltre a questo ho creato anche dei Ruoli Utente dove ogni ruolo utente corrisponde ad un utente che avrà il nome che lo rappresenta e la password di accesso uguali a quelle memorizzate nella tabella credenziali. Detto tutto ciò, quando cambio una password con una contenente dei blank space questa viene cambiata senza problemi nella tabella credenziali dove il campo password non è criptato ma è in chiaro, mentre all'interno dei Ruoli Utente,dove viene criptata in md5, viene sì cambiata ma a quanto pare non come vorrei visto che nel login successivo alla modifica ( il log in viene fatto tramite php ) mi dice che le credenziali sono sbagliate.
Questo errore non si presenta se all'interno delle password non ci sono spazi bianchi...
posto le parti interessate del mio codice php:
Codice PHP:
// [...]
//questa conterrà la nuova password, viene riempita grazie ad una form
$pwd = $_POST["pwd"];
// [...]
if(isset($pwd)){
//doQuery è una mia funzione postata sotto
//$_SESSION["user"] e $_SESSION["pwd"] contengono lo user e password dell'utente attualmente loggato
//la prima parte della query cambia la password ai ruoli utente
//la seconda la cambia nella tabella credenziali
$risp = doQuery("alter role ".$_SESSION["user"]." password '".$pwd."';
update motorizzazione.credenziali set pass='".$pwd."' where pass='".$_SESSION["pwd"]."';");
//funzione postata sotto
printAnswer($risp);
//solo se il cambio è avvenuto allora aggiorno la varibile di sessione
if($risp == "")
$_SESSION["pwd"]=$pwd;
}
// [...]
function doQuery($str_query){
/* funzione che passata una stringa contenente una query si connette al DB, effettua la query e
nel caso in cui la query vada a buon fine restituisce le tuple ottenute ( array di array ) altrimenti
restituisce una stringa contenente il messaggio di errore riscontrato*/
$conn = @pg_connect("dbname=ufficio_della_motorizzazione user=".$_SESSION['user']." password=".$_SESSION['pwd']);
$query = pg_send_query($conn,$str_query);
if($query){
$risposta = pg_get_result($conn);
$err = pg_result_error_field($risposta,PGSQL_DIAG_MESSAGE_PRIMARY);
return ($err == "")? pg_fetch_all($risposta): $err;
}else
print("ERRORE INTERNO");
}
function printAnswer($asw){
/* funzione che presa una risposta di una query stampa il possibile messaggio di errore, oppure
in caso di successo delega la stampa delle tuple alla funzione printTable*/
if(is_array($asw))
//funzione che stampa in forma tabellare non la posto perchè non inerente
printTable($asw);
else
if($asw!=""){
echo "<div class='queryErrorBox'>";
include($includePath."boxBegin.html");
echo "<div class='title'>FATAL ERROR</div>";
echo "<div class='error'>".$asw."</div>";
echo "<input type='button' value = 'Indietro' onclick='history.back()'></input>";
include($includePath."boxEnd.html");
echo "</div>";
}else
echo "tutto ok";
}
Premetto che ho provato a trimmare e aggiustare le slash nella pwd come segue:
Codice PHP:
$pwd = addslashes(trim($pwd));
utilizzandolo ovviamente anche nella $_SESSION["pwd"] ma niente stesso risultato... che sia un problema di codifica? help