10-07-2009, 17:23
Wydaje mi się że nie mam zadeklarowanej dwa razy tej samej klasy. Otóż jest to kod formularza w jednym pliku mam kod klasy
a w innym tworzenie uzytkownika
no i do tego plik z klasami błędów
Kod:
<?php
require_once('dbinfo.inc');
require_once('errors.inc');
class UserManager
{
public function isValidUserName($in_user_name)
{
if($in_user_name =='' or ereg('[^[:alnum:] _-]', $in_user_name)===TRUE)
return FALSE;
else
return TRUE;
}
public function createAccount($in_uname,$in_pw,$in_fname,$in_email,$in_year,$in_month,$in_day)
{
if($in_pw =='' or $in_fname=='' or !$this->isValidUserName($in_uname))
{
throw new InvalidArgumentException();
}
$conn=$this->getConnection();
try
{
$exists=False;
$exists=$this->userNameExists($in_uname,$conn);
if($exists===true)
throw new UserAlreadyExistsException();
$uname=$this->super_escape_string($in_uname,$conn);
$fname=$this->super_escape_string($in_fname,$conn);
$email=$this->super_escape_string($in_email,$conn);
$pw = md5($in_pw);
$qstr= <<<OEM
INSERT INTO Users(user_name,full_name,user_email,birthdate,password) VALUES
('$uname', '$fname','$email', '$in_year-$in_month-$inday','$pw')
OEM;
$result=@$conn->query($qstr);
if($result===FALSE)
{
throw new DatabaseErrorException($conn->error);
}
$user_id=$conn->insert_id;
}
catch(Exception $e)
{
if(isset($conn))
$conn->close();
throw $e;
}
$conn->close();
return $user_id;
}
public function userNameExists($in_uname,$in_db_conn=NULL)
{
if($in_uname=='')
{
throw new InvalidArgumentException();
}
if($in_db_conn===NULL)
$conn=$this->getConnection();
else
$conn=$in_db_conn;
try
{
$name=$this->super_escape_string($in_uname,$conn);
$qstr= <<<EOM
SELECT user_name FROM Users WHERE user_name='$name'
EOM;
$result=$conn->query($qstr);
if($result ===FALSE)
{
throw new DatabaseErrorException($conn->error);
}
$user_exists=False;
while(($row=@$result->fetch_assoc()) !== NULL )
{
if($row['user_name']==$in_uname )
{
$user_exists=TRUE;
break;
}
}
}
catch(Exception $e)
{
if($in_db_conn===NULL and isset($conn))
$conn->close();
throw $e;
}
$result->close();
if($in_db_conn===NULL)
$conn->close();
return $user_exists;
}
# PRIVATE FUNCTIONS
private function getConnection()
{
$conn= new mysqli(DB_SERVER,DB_USER,DB_PW,DB_DB);
if(mysqli_connect_errno() != 0)
{
throw new DatabaseErrorException(mysqli_connect_error());
}
return $conn;
}
private function super_escape_string($in_string,$in_conn,$in_removePct=False)
{
$str=$in_super_escape_string($in_string);
if($in_reomve_Pct)
$str=ereg_replace('([%;])','\\\1', $str);
return $str;
}
}
?>
a w innym tworzenie uzytkownika
Kod:
<?php
require_once('UserManager.inc');
require_once('errors.inc');
session_start();
$uname=isset($_POST['username']) ? $_POST['username']:'';
$pw1=isset($_POSt['password1']) ? $_POST['password1']:'';
$pw2=isset($_POST['password2']) ? $_POST['password2']:'';
$fname=isset($_POST['fullname']) ? $_POST['fullname']:'';
$email=isset($_POST['emailaddr']) ? $_POST['emailaddr']:'';
$year=isset($_POST['year']) ? intval($_POST['year']):0;
$month=isset($_POST['month']) ? intval($_POST['month']):0;
$day=isset($_POST['day']) ? intval($_POST['day']):0;
if($uname == '' or $fname == '' or $pw1 == '' or $pwd2 == '')
{
throw new InvalidInputException();
}
$usermgr= new UserManager();
$result= $usermgr->isValidUserName($uname);
if($result !== TRUE)
{
throw new InvalidInputException();
}
if($pw1!= $pw2)
{
throw new InvalidInputException();
}
if(!checkdate($month,$day, $year))
{
throw new InvalidInputException();
}
$usermgr->createAccount($uname,$pw1,$fname,$email,$year, $month,$day); // tworzy konto
header('Location: logowanie.php');
?>
no i do tego plik z klasami błędów
Kod:
<?php
class InvalidArgumentException extends Exception
{
public function __construct()
{
parent::__construct('Wywołanie funkcji z nieprawidłowym parametrem');
}
}
class UserAlreadyExistsException extends Exception
{
public function __construct()
{
parent::__construct('Użytkownik o takiej nazwie już istnieje.');
}
}
class NoSuchUserException extends Exception
{
public function __construct()
{
parent::__construct('Nie ma takiego użytkownika w systemie');
}
}
class InvalidLoginException extends Exception
{
public function __construct()
{
parent::__construct('Przesłana hasła login/hasło jest nieprawidłowa.');
}
}
class DatabaseErrorException extends Exception
{
public function __construct($in_msg)
{
parent::__construct('Wystąpił błąd bazy danych: '
. $in_msg);
}
}
class InvalidInputException extends Exception
{
public function __construct()
{
parent::__construct('Treść formularza była nieprawidłowa');
}
}
?>