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'])) >= 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
Codice 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
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, 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!