En simpel “Att göra” applikation Del 2

Efter lite tänkande bestämde jag mig för att utöka min lilla applikation och lägga till kategorier för dina tasks. Hur det fungerar är att det använder sig av en “Mant To Many” databasstruktur vilket innebär att en Task kan ha många kategorier och en Kategori kan ha många tasks kopplade till sig. Just nu i min applikation så kan man bara lägga till en kategori till en task men man kan se alla tasks tillhörande en specifik kategori.

Hur det loopas ut är det som jag fan komplicerat när jag skapade denna funktionen, jag hade nyligen läst om JOIN statements i SQL och var ivrig att få testa det i min egen kod. Men det var inte så lätt att uttrycka sig i SQL första gången men tillslut efter jag tagit lite hjälp från en psuedo kod som fanns på internet lyckades jag snickra ihop detta

<?php
foreach($conn->getConnection()->query(“SELECT * from tasks t
JOIN `task category table` cc ON t.TaskID = cc.TaskID
WHERE cc.CategoryID = $category”
) as $row) {
?>

Det som händer här är att den joinar de kolumner där TaskID instämmer på task databasen och task category databasen där de innehåller ett specifikt kategori ID. Nu i efterhand förstår jag hur det fungerar och jag hade kunnat göra det igen.

Något annat jag kom över och blev intresserad av var något som nyligen länkades i  en av de internet tidningar jag läser och det var en artikel som handlade om Design Patterns i PHP. Bland annat i denna artikeln stod det om ett pattern som kallades för Singleton. En Singleton är ett sätt att begränsa användningen av en klass till endast en instans. Det du gör är att du ändrar klassens constructor till private så man inte kan skapa en ny instans bara sådär samt skapar du en privat statisk variabel som kommer innehålla en instans av klassen, sedan skapar du en funktion som kollar ifall det finns en instans och om det finns returnerar den en existerande instans.

public static function getInstance(){
if (empty(static::$instance)) {
$class = get_called_class();
static::$instance = new $class;
}

return self::$instance;
}

Mer går att läsa här: http://www.phptherightway.com/pages/Design-Patterns.html

 

Jag har återrigen vandrat iväg med tankarna angående min kariär som programmerare och jag har faktiskt kommit fram till att jag ska göra ett beslut. Det som jag faktiskt tycker om att göra det är att skriva backend kod, jag gillar själva idéen att faktiskt skriva kod och inte sitta och knäppa med HTML/CSS hela tiden. Design har aldrig lockat mig och även om jag måste jobba med det nu som frilans webb utvecklare så är det inte min grej. Jag vill kunna bli kallad programmerare och backend är min väg till det. Så vad jag har bestämt mig för är att vid sidan om lära mig PHP och göra det bra, jag ska från och med nu läsa allt, vara som en svamp och suga åt mig all kunskap jag kan få tag på.

En sak som hållt mig tillbaka länge nu har varit det att det går sakta att lära sig, jag har försökt pusha på lärandet hela tiden med det ska ta ett stopp nu, jag ska istället för att skumma igenom information på internet läsa varje ord. Det är dags att få ett slut på detta påhitt jag vet inte hit och dit, jag vet vad jag vill och det är dags att plocka äpplet från trädet. Jag ska avsluta min bok PHP 5 And MySQL Bible och sedan gå över till en ny bok som väntar vid namn Code Complete.

 

Med detta säger jag tack för mig!

En simpel “Att göra” applikation

Efter att jag fortsatte att läsa boken om PHP och MySQL förstod jag att jag inte kan ge mig in på ett för stort projekt. Jag måste börja från början och skapa någonting enkelt och jobba mig uppåt. Jag tänkte igenom vad jag använder mycket och något jag gjort under lång tid är att skriva listor. Att skriva listor har hjälpt mig att komma ihåg vad som måste göras samt sätta upp mål angående vad som ska göras under en viss dag.

Jag bestämde mig att skriva en applikation i PHP och MySQL som använder just de två språk den bok jag läst handlar om. I detta projektet hade jag inte säkerhet i baktanke utan jag tänkte att jag bara ska få allt att fungera. Jag använde inga ramverk eftersom jag anser att det hade försvårat utvecklingen av en så liten applikation. Något jag ville öva på var också objekt orienterad programmering vilket jag ville klämma in i detta lilla projektet.

För enkel start började jag med anslutningen till MySQL databasen,  i en separat klass Connection.php skapade jag en constructor som initierade en anslutning till databasen via PDO. PDO är en väldigt simpel väg att ansluta till databasen samt ifall man skulle vilja byta databas är det väldigt lätt att ändra. Jag nämnde att jag inte skulle tänka på säkerhet men kan endå nämna att PDO är ett säkert sätt att hantera databasen via kod då den förbereder kodraden innan den körs vilket lägger på ett lager säkerhet.

<?php
public function __construct() {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
}
?>
Jag gick manuellt in i databasen via phpmyadmin och lade till ett par test inlägg för att ha något att jobba med visuellt. Därefter gick jag in i index.php och började jobba med att få något att visas på skärmen. Vi var nu anslutna till databasen och hade ett par test inlägg i databasen. Det som behövdes var en funktion som hämtar inläggen ifrån databasen och placerar dem så användaren kan se dem visuellt.
<?php
foreach($dbh->query('SELECT * FROM tasks') as $row)
Ett enkelt sätt att loopa igenom varje inlägg som finns i databasen. I denna loopen skapar vi HTML kod som man normalt hade gjort om man designar en hemsida och lägger in klasser som sedan låter oss hantera dem visuellt i CSS efter. Efter detta hade jag mina test inlägg visandes på skärmen.
Sista som behövdes var ett sätta att både ta bort och lägga till nya inlägg. Jag skapade ett simpelt formulär som skickar en POST request till samma sida för att lägga till nya inlägg och lade till en länk som var till för att ta bort ett inlägg genom att också skapa en form med en hidden input som var inläggets id. Enkelt härefter kunde jag skapa två funktioner som var näst intill identiska.
<?php
public function addTask($title, $text){
$sql = "INSERT INTO tasks (title, text) VALUES(:title, :text)";
$q = $this->dbh->prepare($sql);
$q->execute(array(
':title' => $title,
':text' => $text));
}
Efter detta var jag färdig med min simpla applikation. Något jag hade velat tillägga till applikationen hade varit kategorier som använder fler databaser så jag får känn för MySQLs JOIN statements samt lägga till funktion för att uppdatera / redigera inlägg. Något mer som hade varit bra hade varit säkerhet så som att inte vem som helst kan lägga upp tasks.
Något som jag kommit och tänka på nu efteråt är att PHP och backend i helhet är något som är väldigt roligt och underhållande för mig som programmerare men som ensamvarg är just nu frontend viktigare. Något som är bra med frontend är att det nästa varje dag händer något nytt, det finns nyhetssidor att följa och så mycket att lära sig. Det är också väldigt viktigt eftersom det är vad din kund som webbutvecklare ser, din kund ser inte din kod för hur ditt bokningssystem ser ur han vill bara att det ska fungera. Han ser och bryr sig om hur det visuella på sidan ser ut vilket fått mig att tänka på ifall jag ska hålla mig till WordPress som bidrar med färdigställda backend funktioner och sedan fokusera på design och frontendutveckling. Detta är något jag ska kika på!
Tack för mig!