Jag hade tänkt att jag skulle försöka greppa det här med objektorienterad programmering i PHP. jag har nyligen läst en kurs i OOP i ASP.NET så kanske har jag tänket för att även klara detta i PHP.
Jag har en enkel funktion som jag tänkte att jag kunde försöka göra om. Funktionens uppgift är att ta hand om en användaraktivering, och skapa en ny användare om aktiveringsnyckeln stämmer. Men i exemplet lämnar jag ute själva aktiveringsnyckeln och går direkt på Användarregistreringen.
Jag har letat efter en del artiklar på webben men jag har inte hittat sådär jättemycket nyttigt. Har ni några länkar liggande tar jag gärna emot dem.
Så vad jag har nu är två stycken klasser, ett affärslager och ett dataåtkomstlager. Kalla dem User och UserDAL.
Ifrån mitt formulär, efter att in-datat har behandlats och lite annat så kommer jag till User->UserActivasion($username, $password, $email).
Härifrån ska jag då först validera datat på nytt, och sedan skicka vidare objektet till UserDAL om allt validerar för att lägga in datat i databasen.
Så min tanke är ju att på rad 45 i User, skicka med detta objektet med $this(Vet inte om det fungerar så, men kändes på något sätt logiskt) till UserDAL för att senare i UserDAL kunna använda mig av getUsername() för att hämta ut User-objektets username (Rad 10 UserDAL)
<?php class User
{
# Fält
private $username;
private $password;
private $email;
# Egenskaper
public function getUsername()
{
return $this->username;
}
public function setUsername($username)
{
$this->username = $username;
}
public function setPassword($password)
{
$this->password = $password;
}
public function setEmail($email)
{
$this->email = $email;
}
# Instansmetoder - CRUD
public function UserActivasion($activasion, $username, $password, $email)
{
$this->setUsername($username);
$this->setUsername($password);
$this->setUsername($email);
/*
* TODO Validering av data.
*/
// Hämta data ifrån DataåtkomstLagret
$dal = new UserDAL();
$result = $dal->addUser($this);
}
}
?>
<?php class UserDAL
{
public function addUser(User $user)
{
global $db_prefix;
$sql = mysql_query("SELECT Username
FROM {$db_prefix}user
WHERE LOWER(Username)=LOWER($user->getUsername())
LIMIT 1");
$count = mysql_num_rows($sql);
if($count == 0)
{
$sql = mysql_query("INSERT INTO {$db_prefix}user
SET Username=$user->getUsername, Password=$password, Email=$email");
if(!$sql)
{
$error[0] = 'Det skedde ett fel vid skapandet av användaren. Kontakta administratören.';
}
}
else
{
$error[0] = 'Användarnamnet du angav är upptaget.';
}
// Om $count > 0, returnera true, annars false.
return (isset($error)) ? $error : true;
}
}
?>
Är jag helt fel ute när jag gör på detta sätt? För jag får ett antal felmeddelanden på rad 10 i UserDAL som gnäller över $user->getUsername().
Notice: Undefined property: User::$getUsername in ******\dataaccess\UserDAL.class.php on line 10
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ******\dataaccess\UserDAL.class.php on line 12