Problema con funzione cambia password

Furion

Utente Attivo
26 Ago 2013
32
0
0
Salve a tutti, io ho dei problemi con una funzione che uso per cambiare le password, mi spiego meglio: la funzione in questione effettua una serie di controlli:

-Se i campi sono tutti settati,
-Se le password corrispondono tra loro,
-Se la nuova password è compresa tra 8 e 15 caratteri,
-Se la password è alfanumerica,
-Se la vecchia password è corretta.

il problema è che la funzione salta alcuni controlli, ad esempio: se i campi sono settati, le password corrispondono, la lunghezza è esatta e la password vecchia è corretta viene saltato in toto il controllo se la nuova password è alfanumerica e lo script aggiorna la password.

Per controllare se la password è alfanumerica ho provato sia con ctype_alnum e adesso con preg_match('/^[a-zA-Z0-9]+$/', $password).

Per comodità ho tolto la funzione md5 dallo script inoltre modifico solo una riga del db altrimenti nella riga
PHP:
$sql = "UPDATE users SET password = '$newpassword' WHERE password = '$oldpassword'";
uso anche l'id di chi richiede il cambio password ;).

qui di seguito i file:

changepassword.class.php
PHP:
<?php
error_reporting(E_ALL);

require('db_config.php');
 
class ModifyPassword
{

        public function ChangePassword()
        {
            $this->ErrorReport();
        }

        protected function IsEmptyField()
        {
            if(empty($_POST['oldpassword']) OR empty($_POST['password']) OR empty($_POST['password2']))
            {
                return TRUE;
            }
            else
            {
                return FALSE;
            }
        }

        protected function VerifyPassword()
        {
            if($_POST['password'] == $_POST['password2'])
            {
                return TRUE;
            }
            else
            {
                return FALSE;
            }
        }

        protected function VerifyLengthPassword()
        {
            if(strlen(trim($_POST['password'])) >= 8 && strlen(trim($_POST['password'])) <= 15)
            {
                return TRUE;
            }
            else
            {
                return FALSE;
            }
        }

        protected function VerifyAlphanumericPassword()
        {

            $password = $_POST['password'];
            if(preg_match('/^[a-zA-Z0-9]+$/', $password))
            {
                return TRUE;
            }
            else
            {
                return FALSE;
            }
        }

        protected function PasswordExists()
        {
                        $oldpassword = mysql_real_escape_string($_POST['oldpassword']);
            $sql = "SELECT password FROM users WHERE password='$oldpassword'";
            $res = mysql_query($sql);
            if($row = mysql_fetch_array($res))
            {  
                return TRUE;
            }
            else
            {   
                return FALSE;
            }
        }


        public function ErrorResult($num)
        {
            header("Location: change_password.php?alert=" . $num);
            die;
        }
 
        protected function ErrorReport()
        {
            if($this->IsEmptyField())
            {
                $this->ErrorResult(1);
            }
 
            if(!$this->VerifyPassword())
            {
                $this->ErrorResult(2);
            }

            if(!$this->VerifyLengthPassword())
            {
                $this->ErrorResult(3);
            }

            if(!$this->VerifyAlphanumericPassword())
            {
                $this->ErrorResult(4);
            }
 
            if(!$this->PasswordExists())
            {
                $this->ErrorResult(5);
            }


            $this->ChangePasswordUser();
 
        }

        protected function ChangePasswordUser()
        {
            $oldpassword = mysql_real_escape_string($_POST['oldpassword']);
            $newpassword = mysql_real_escape_string($_POST['password']);
 
            $sql = "UPDATE users SET password = '$newpassword' WHERE password = '$oldpassword'";

            $res = mysql_query($sql);
            mysql_close();

            if($res === TRUE)
            {
            die ('Password aggiornata con succeso!');
            }
            else
            {
            die ("Errore con l'aggiornamento: " . mysql_error());
            }

        }
}        
?>

change_password.php
PHP:
<?php
include 'error_definition.php';
?>
<form action="modify_password.php" method="POST">
Inserisci la tua vecchia password:<br>
<input type="text" name="oldpassword" />
<br><br>
Inserisci la nuova password:<br>
<input type="text" name="password" />
<br><br>
Ripeti la nuova password:<br>
<input type="text" name="password2" />
<br><br>

<input type="submit" value="invia" />
</form>

modify_password.php
PHP:
<?php
 
include 'changepassword.class.php';
 
$obj = new ModifyPassword();
$obj->ChangePassword();

?>

error_definition.php
PHP:
<?php
 
if(isset($_GET['alert']))
{
 
    switch($_GET['alert'])
    {
        case 1:
        die ('Tutti i campi devono essere compilati.');
        break;
 
        case 2:
        die ('Le due password inserite non corrispondono.');
        break;
 
        case 3:
        die ('La password deve essere tra 8 e 15 caratteri.');
        break;

        case 4:
        die ('La password deve essere alfanumerica.');
        break;
 
        case 5:
        die ('La password fornita è errata.');
        break;
 
    }

}

?>

Qualcuno sa dirmi perchè?

Un altro probblema che affligge questo script avviene se setto mysql_close($db); invece di mysql_close(); ricevendo l'errore:

Notice: Undefined variable: db in /membri2/furion/changepassword.class.php on line 126

Warning: mysql_close() expects parameter 1 to be resource, null given in /membri2/furion/changepassword.class.php on line 126

anche questo perchè avviene?


Grazie anticipatamente a chi mi risponderà e a chi saprà aiutarmi :fonzie:
 

Salvo Salvi

Utente Attivo
14 Nov 2012
230
0
0
Ciao, se posso esserti d'aiuto ti consiglio di non usare mysql, ma di rifare tutta la classe usando le pdo o mysqli.
Poichè mysql a breve non sarà piu valido
 

Furion

Utente Attivo
26 Ago 2013
32
0
0
Vi ringrazio per la risposta ma non ho il tempo per impararmi mysqli o pdo ora, magari in futuro chissà, quindi sareste così gentili da aiutarmi con questa classe?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ci sono un paio di cose che non mi tornano, ma può essere che sbagli in quanto dovrei provarla.
in tutte le funzioni (salvo una) tu dai il return true se la condizione è soddisfatta.
es. nella VerifyLengthPassword() se la pass è piu luna di 8 e meno di 15 ritorni true
nella funzione IsEmptyField() invece fai il contrario
a parte che io farei un unico controllo con preg_match
preg_match('/^[a-zA-Z0-9]{8,15}$/', $password)
metti in giro dei var_dump($nome_variabile) per capire dove è l'inghippo
 
Discussioni simili
Autore Titolo Forum Risposte Data
M Problema con connessione MySqli e funzione PHP 2
A [PHP] Problema invio mail con funzione mail() PHP 3
F [Javascript] Problema funzione jquery con elementi css esterni Javascript 1
S Problema con funzione "imagecreatefrompng" PHP 10
R Problema funzione caricate con il body Javascript 1
G Problema con la funzione array_combine PHP 2
L problema con la funzione header!!! AIUTO! PHP 24
M problema con elementi della funzione Javascript 3
L problema nella implementare una funzione con ritorno PHP 2
S Problema return con funzione PHP 2
L problema email con funzione mail PHP 1
B Problema con funzione JS Javascript 4
S problema con funzione php PHP 3
D Problema apostrofo con funzione unlink PHP 7
C Problema nel Caricare file e spostarlo con la funzione move_uploaded_file PHP 14
D Problema con funzione preg_match() per controllo email PHP 2
Neptune7650 Piccolo problema con la funzione include PHP 1
asevenx problema con funzione per far apparire e scomparire un form di commenti PHP 1
asevenx problema con la funzione AVG() PHP 1
P Problema con la funzione mail PHP 13
G ajax php myqsl - problema con funzione javascript Ajax 1
F Problema con funzione di RainTpl PHP 3
dk-wamp problema con la funzione sleep PHP 4
jan267 Problema con funzione getElementsByClassName Javascript 2
O Principiante: problema con funzione CURL ###URGENTE### PHP 1
O problema con dvr dahua xvr5116 IP Cam e Videosorveglianza 0
G Problema con Xampp Web Server 1
andrea barletta Problema con miniature comandi Photoshop 0
I problema con alice Posta Elettronica 0
N Problema con position absolute e overflow HTML e CSS 4
L Problema con inner join PHP 11
K [php] Problema con inner join PHP 4
K [PHP] Problema con variabili concatenate. PHP 1
O problema con query PHP 4
I problema con 2 account Posta Elettronica 1
L problema collegamento file css con html HTML e CSS 1
E Problema accesso a file con app sviluppata con MIT APP INVENTOR 2 Sviluppo app per Android 0
M Problema con Try Catch PHP 0
Sergio Unia Problema con gli eventi del mouse su una data table: Javascript 2
T PROBLEMA CON SESSIONI PHP 3
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
R problema con else PHP 0
T PROBLEMA CON ARRAY PHP 8
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
F Problema con risposta PHP 0
S problema con recupero dati tabella mysql PHP 2
Z Problema con il mio tp-l i nk Reti LAN e Wireless 1
L Problema RAM con Tomcat 8 Apache 0
napuleone problema con sort e asort PHP 4

Discussioni simili