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.

qui di seguito i file:

changepassword.class.php
Codice 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'])) >= && 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
Codice PHP:
<?php
include 'error_definition.php';
?>
<form action="modify_password.php" method="POST">
Inserisci la tua vecchia password:

<input type="text" name="oldpassword" />



Inserisci la nuova password:

<input type="text" name="password" />



Ripeti la nuova password:

<input type="text" name="password2" />




<input type="submit" value="invia" />
</form>
modify_password.php
Codice PHP:
<?php
 
include 'changepassword.class.php';
 
$obj = new ModifyPassword();
$obj->ChangePassword();

?>
error_definition.php
Codice 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?

P.S: infine ho notato una cosa strana, premetto che questi script sono hostati su altervista, detto questo nel file db_config.php che contiene le info per collegarsi al db, la password era errata ma lo script riusciva lo stesso a collegarsi al db e modificare i dati...come è possibile una cosa del genere?

Grazie anticipatamente!