OOP based?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

PHP Developer

Zie jij mogelijkheden om onze tooling technisch te verbeteren en uit te bouwen? Over Jobmatix Jobmatix is een innovatieve en internationale speler op het gebied van jobmarketing. Onze jobmarketing automation tool helpt organisaties bij het aantrekken van nieuw talent door vacatures digitaal, geautomatiseerd en op een efficiënte manier te adverteren en onder de aandacht te brengen bij de doelgroep op 25+ jobboards. Volledig performance-based, waarbij organisaties betalen op basis van cost per click of cost per applicant. Maandelijks wordt onze jobmarketing automation tool al gebruikt door vele directe werkgevers, intermediairs en mediabureaus, waaronder Picnic, Rijkswaterstaat, AdverOnline, Schiphol, DPA, Teleperformance en

Bekijk vacature »

Front-end Developer

Onze klant is sinds 2 jaar actief als adviseur en bemiddelaar in de verzekeringsmarkt. Sindsdien proberen zij deze slapende markt flink wakker te schudden. Dit willen zij doen door het bouwen van slimme vergelijkers op hun eigen website en die van partners. Het bedrijf wil continu voorop lopen, zodat consumenten eenvoudig de verzekeringen kunnen vinden die het beste bij ze past. Functieomschrijving Als Front-end Developer werk je aan vergelijkingsmodules die consumenten dagelijks gebruiken bij het vergelijken en afsluiten van verzekeringen. Je vindt het leuk om samen te werken met de product owner, bestaande modules te verbeteren en nieuwe vergelijkers "from

Bekijk vacature »

Developer

Functie omschrijving Gaat jouw hart sneller kloppen van software developen in C#.NET? Voor een softwarebedrijf in regio Den Bosch zijn wij op zoek naar een C# programmeur. Lees snel verder! Wat ga je doen? Je gaat werken met C# en ASP.NET MVC Framework om onder meer webapplicaties, webshops en websites te ontwikkelen. Je optimaliseert de bestaande software en helpt mee aan het automatiseren van bedrijfsprocessen. Je gaat samen met je collega's de juiste oplossing op basis van de wensen van de klanten uitwerken tot een mooi product. Bedrijfsprofiel Het ontwikkelen van softwareoplossingen en kantoorautomatiseringen is waar dit bedrijf voor staat.

Bekijk vacature »

Intern - Junior PHP ontwikkelaar in fris en jong t

Bedrijfsomschrijving Werk jij graag een in fris, flexibel en jong team? Bij ons ben jij vrij om te bepalen waar jij het liefst werkt en op de vrijdag komen wij gezellig bij elkaar op kantoor. Flexibiliteit en vrijheid zijn bij ons de norm en dat geeft jou de ruimte en energie om het beste uit jezelf te halen! Ons team bestaat uit vijf enthousiaste collega's die jou graag ondersteunen in zowel je persoonlijke als professionele ontwikkeling. Met twee ervaren Senior Developers als mentoren ben jij in goede handen. Wij zien onszelf als een vriendengroep die gezamenlijk werken aan iets moois

Bekijk vacature »

JAVA Programmeur

Bedrijfsomschrijving Functieomschrijving We zoeken per direct enthousiaste software engineers die ons team komen versterken.We werken in DevOps teams met een sterk gevoel voor verantwoordelijkheid. Er wordt nauw samengewerkt met ons Business analyse team (BAT), met onze uitvoerende medewerkers en met de DevOps teams onderling binnen het domein. Het liefst hebben we veel en vaak interactie met onze interne en externe eindgebruikers om zo de juiste dingen te maken. We werken multidisciplinair in een dynamische omgeving. Achtergrond opdracht De Businesseenheid Examens is verantwoordelijk voor de logistiek van de staatsexamens Voortgezet (speciaal) onderwijs, Nederlands als 2e taal en schoolexamens. In het kader

Bekijk vacature »

Digitale Tovenaar Gezocht: Junior Low-code/No-code

Bedrijfsomschrijving Duik mee in een wereld vol innovatieve avonturen waar gegevens en technologie een magische symbiose aangaan! Al meer dan twee decennia lang zijn we de tovenaars achter de schermen die oplossingen creëren voor de meest complexe klantcontactvraagstukken en datagedreven software-uitdagingen. Bij ons draait het om de kracht van samenwerking en groei. We zijn een hechte vriendengroep die samen bergen verzet om elkaar én onze klanten te laten schitteren. Jouw succes is ons succes en we streven ernaar om elkaar naar nieuwe hoogten te tillen, niet voor even, maar voor altijd. We willen dat jij je helemaal thuis voelt in

Bekijk vacature »

.NET Software Developer

Dit ga je doen Als .NET Software Developer zul jij je voornamelijk bezig houden met: Het van scratch af aan bouwen van applicaties (.NET, C#, Bootstrap, KnockoutJs en WebAPI2); Het testen van jouw code d.m.v. het uitvoeren van unittesten; Het oplossen van bugs in de code; Het onderhouden van contact met collega's betreffende de door jouw ontwikkelde applicaties; Het verbeteren en doorontwikkelen van maatwerkapplicaties. Hier ga je werken Jij gaat aan de slag als .NET Software Developer en gaat je focussen op het bedenken, ontwikkelen en testen van maatwerkapplicaties in voornamelijk C#. Dit ga je doen bij een grote, internationale

Bekijk vacature »

Senior Fullstack Developer (GOLang, TypeScript)

Bedrijfsomschrijving Our client is one of the large worldwide accounting firms. Functieomschrijving We are looking for a senior (all-round) developer (Project On Demand / Tax Technology) Uses as much as possible technology in support of the development process: Git, Jenkins, Docker, npm, skaffold, helm, etc. We are looking for a real hands-on developer; ie not a team lead or other managerial-style role; Acts with integrity both internally and externally and takes personal responsibility in this respect; Curious about the developments within their field and driven to make a difference with the team; Able to empathize with colleagues and stakeholders and

Bekijk vacature »

React developer Inhouse cloudplatform

Functie De functie: Als front-end developer kom je te werken naast 2 andere front-end/React developers, waaronder één senior. Een hele mooie kans dus om in korte tijd veel nieuwe kennis en ervaring op te doen. Ze hebben momenteel veel werk hierin en daarom willen ze het team graag uitbreiden. Het is van belang dat je, zeker gezien het vele thuiswerken, in ieder geval al een aantal projecten hebt gedaan in React. Taken waar je aan kunt denken zijn het ontwikkelen van client-applicaties o.b.v. HTML5, React en andere open standaarden. Ook ben je nauw betrokken bij het implementeren van designs o.b.v.

Bekijk vacature »

Software Programmeur PHP - JAVA

Functie Heb jij altijd al willen werken voor een bedrijf, dat veilige netwerkverbindingen levert, door middel van veilige oplossingen, die door middel van de nieuwste technologieën ontwikkelt zijn? Stop dan nu met zoeken! Voor een opdrachtgever in omgeving Moordrecht zijn wij op zoek naar een programmeur. Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen C / C++ / PHP. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten goed verlopen. Je gaat klanten ondersteunen op

Bekijk vacature »

PHP Developer

Functie omschrijving Als PHP Developer ga jij aan de slag met uitdagende software projecten. Jij gaat in deze functie software applicaties ontwikkelen. Deze software projecten zijn heel divers, en deze organisatie maakt software, van A tot Z. Klanten kunnen in elke sector werkzaam zijn, van profit tot non-profit. Deze software bouw je vooral in PHP en specifiek Laravel. Dit framework kent dus geen geheimen voor jou. De software die jij gaat ontwikkelen is heel divers, van urenregistratiesystemen tot compleet geautomatiseerde tools. In deze veelzijdige functie ga jij je zeker niet vervelen, elke dag bestaat weer uit nieuwe uitdagingen. Bedrijfsprofiel Deze

Bekijk vacature »

Scrum Master

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Scrum master op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je begeleidt twee teams binnen de afdeling Platform Services (PLS). Je helpt mee de devops manier van werken van de teams verder door te ontwikkelen. Je helpt de PO bij het managen van de product backlog; het voorbereiden van

Bekijk vacature »

Productontwikkelaar Food

Wat ga je doen Als Productontwikkelaar Food ga je nieuwe producten ontwikkelen en bestaande producten verbeteren. Je bent hierbij betrokken bij het gehele proces: van productconcept naar proefreceptuur, het realiseren va het product (op kleine schaal) en het testen van producten in een productieomgeving. Verder: Bewaak je de status van verschillende fases van productontwikkeling en lever je tijdig de benodigde data aan Ben je bezig met de optimalisatie van oude en nieuwe recepturen Begeleid of organiseer je proefsessies (sensorisch onderzoek) in het team en/of bij klanten Onderhoud je contacten met de klanten, leveranciers van grondstoffen e.a. externe partijen Houd je

Bekijk vacature »

Dynamics Ontwikkelaar

Dit ga je doen Ontwikkelen van Dynamics 365 voor de interne uitrol; Samen met de consultants sparren met klanten over de wensen en eisen; Ontwikkelen van Dynamics 365 voor verschillende grote klanten; Technische analyse en testen; Meedenken over het gebruik en de richting van Dynamics binnen de organisatie. Hier ga je werken Onze opdrachtgever, gevestigd in regio Eindhoven, levert een compleet dienstenpakket op het gebied van IT. Zij pakken verschillende (complexe) vraagstukken van grote organisaties op. De sfeer intern is gezellig en informeel. Men houdt van hard werken maar gezelligheid door middel van een borrel of gezamenlijke lunch komt er

Bekijk vacature »

Database developer - SQL

Functie omschrijving Kan jij goed overweg met complexe algoritmes en het schrijven van procedures in T-SQL? Heb jij al wat ervaring opgedaan met SQL en vind je het tijd voor de volgende stap? Lees dan snel verder! Dit software bedrijf, gespecialiseerd in de ontwikkeling van logistieke software, is op zoek naar een ervaren SQL database developer. Jouw werkzaamheden zullen onder andere bestaan uit: Je sluit aan bij meetings en brengt het gehele logistieke proces in kaart. Vervolgens ga je als lead developer aan de slag om de klus te klaren. Je stuurt het junior developer team en helpt, zo nodig,

Bekijk vacature »
Lex van der poel

lex van der poel

21/06/2012 20:25:09
Quote Anchor link
Ik snap het denk ik eindelijk.

En voorbeeld hoe het zou moeten bij mijn site [die in verbinding staan met een spel server].

Voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|---------------------------------------------------------|
|         UserMapper        |           User              |
|---------------------------------------------------------|
| -Db                       | -Name                       |
| -Table                    | -Password                   |
|                           | -Id                         |
|                           | -Lastlogin                  |
|                           | -Money                      |
|---------------------------|-----------------------------|
| +SetDb(db)                | +SetName(name : string)     |
| +GetById(id : int)        | +GetName()                  |
| +GetByName(name : string) | +SetPass(pass : string)     |
| +Create(user : string)    | +GetPass()                  |
| +Delete(user : string)    | +SetId(id : int)            |
|                           | +GetId()                    |
|                           | +SetMoney(money : int)      |
|                           | +GetMoney()                 |
|                           | +SetLastLogin(date : string)|
|                           | +GetLastLogin()             |
|---------------------------------------------------------|

Ik hoop dat ik het zo goed heb ? zit best wel veel tijd in xD

maar hoe zit het dan met inloggen dat lijkt me dan dat je dat zo doet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
+Login(user : string, password : string)

en dat dat dan true of false returnt...
of niet?
Gewijzigd op 21/06/2012 20:30:16 door Lex van der poel
 
PHP hulp

PHP hulp

26/12/2024 21:06:40
 
Wouter J

Wouter J

21/06/2012 20:31:48
Quote Anchor link
Login doe je met de UserMapper. En de objecten zien er wel goed uit. Behalve dan dat ik een constructor zou gebruiken met alles sets erin in de User. Ook zou ik een populate functie maken in de UserMapper, die zet een array om naar een User object.

Verder zijn de parameters van de login functie niet helemaal correct. De waardes, user en password, zijn eigenschappen van de user. Je maakt dus eerst een user object aan en vervolgens stop je die in de UserMapper::login() functie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
// afhandeling van form
$userMapper = new UserMapper($PDO);

$user = new User($_POST['name'], $_POST['pass']);

$user = $userMapper->logIn($user);
?>

De logIn functie zal dan het user object retourneren met daarin een eigenschap loggedIn op true gezet oid. Mocht het wachtwoord verkeerd zijn wordt er een Exception (error) gegooid (throw).


Als tip wil ik nog meegeven dat je je aan een Coding standard zal moeten houden, dat maakt je code een stuk meer leesbaar voor andere developers. Coding standards zijn bijv. die van Symfony, ZEND of PEAR. Zo moet een method naam altijd beginnen met een kleine letter en een klassenaam met een hoofdletter.
 
Lex van der poel

lex van der poel

21/06/2012 20:34:40
Quote Anchor link
Oke dus ik begin het te snappen maar waar is de functie $PDO voor?

Toevoeging op 21/06/2012 20:41:42:

en kan je trouwens html gebruiken in dit forum?? want volgens mij zie ik een <hr> tag?

Toevoeging op 21/06/2012 20:57:41:

en kan dit nader uitgelegt worden was reactie van [Wouter J]
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
class Send
{
    public function query($str)
    {

        return mysql_query($str);
    }
}

class Sql
{
    // gebruik NOOIT public variabelen --- Wat bedoel je daarmee dat dit wat hieronder gebeurt onhandig is?
    public $send;

    public function __construct()
    {

        $this->send = new Send();
    }
}


$sql = new Sql();

$sql->send->query('...');
?>
 
Jasper DS

Jasper DS

21/06/2012 21:00:56
Quote Anchor link
Lex van der poel op 21/06/2012 20:34:40:
Oke dus ik begin het te snappen maar waar is de functie $PDO voor?


Kijk eens even naar pdo. PDO is de abstractie laag waar ik het al eens over had. Via PDO kan je verschillende databasen aanspreken wat het makkelijk maakt als je bijvoorbeeld moet wisselen van db.

Quote:
Toevoeging op 21/06/2012 20:41:42:

en kan je trouwens html gebruiken in dit forum?? want volgens mij zie ik een <hr> tag?

Neen, nog steeds gewoon BB-code: http://www.phphulp.nl/veel-gestelde-vragen/#bbcode

Quote:
Toevoeging op 21/06/2012 20:57:41:

en kan dit nader uitgelegt worden was reactie van [Wouter J]
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
...

Wat begrijp je nog niet?
Gewijzigd op 21/06/2012 21:01:13 door Jasper DS
 
Lex van der poel

lex van der poel

21/06/2012 21:13:29
Quote Anchor link
of deze dode:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
class Send
{
    public function query($str)
    {

        return mysql_query($str);
    }
}

class Sql
{
    public $send;

    public function __construct()
    {

        $this->send = new Send();
    }
}


$sql = new Sql();

$sql->send->query('...');
?>

zal werken...
en watt __construct() doet.

Toevoeging op 21/06/2012 21:20:39:

Haha ik heb het door ik heb nu dit maar ga ik ombouwen tot script voor mijn website met OOP gedachtengang :P
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
class Send
{
    public function query($str)
    {

        echo $str;
    }
}

class Recive
{
    public function query($str)
    {

        echo $str;
    }
}

class Main
{
    public $send;

    public function __construct()
    {

        $this->send = new Send();
        $this->recive = new Recive();
    }
}


$main = new Main();

$main->send->query('...');
echo "<br />";
$main->recive->query('...2');
?>

output:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
...
...2
 
Wouter J

Wouter J

21/06/2012 21:38:12
Quote Anchor link
__construct is een van die hele nuttige magic methods in PHP OO. Lees anders ook eens rustig die OOP beginnershandleiding, wordt het allemaal uitgelegd...

Tevens moet je nooit een echo plaatsen in een functie, altijd retourneren en dan pas in de procedurele code beslissen wat je er mee gaat doen (opslaan in var, echo, enz.)

Tevens gebruik je bijna nooit public properties, altijd protected of private. Je moet getters en setters maken om toegang te krijgen tot die vars.

En je Main object is hier nutteloos, je moet dit gewoon in je procedurele code plaatsen.

Als laatst heb je de property $recive niet gedefinieerd in de Main klasse en is het recieve. Ook heeft deze code natuurlijk niks met je bovenstaande idee te maken...
 
Lex van der poel

lex van der poel

21/06/2012 22:15:06
Quote Anchor link
okay zal ik eens doen maar heb nu net een script gemaakt.. :P

heb ik nu gedaan kijk maar.

ik heb het nu wel gebruikt.

main object heb ik code in geplaatst.

heb ik toegevoegd en verbeterd.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
class Main {

    function
connect($db_Host, $db_User, $db_Password) {
        $link = mysql_connect($db_Host, $db_User, $db_Password);
        if(!$link) {
            return false;
        }
else {
            return true;
        }
    }
    
    function
select($db) {
        $db = mysql_select_db($db);
        if(!$db) {
            return false;
        }
else {
            return true;
        }
    }
    
    function
login($username, $userpassword) {
        $username = @trim($username);
        $userpassword = @trim($userpassword);
        if(get_magic_quotes_gpc()) {
            $username = stripslashes($username);
            $userpassword = stripslashes($userpassword);
        }

        $username = mysql_real_escape_string($username);
        $userpassword = md5(mysql_real_escape_string($userpassword));
        $result = mysql_query("SELECT * FROM users WHERE username='" . $username . "' AND password='" . $userpassword . "'");
        if($result) {
            if(mysql_num_rows($result) == 1) {
                session_start();
                session_regenerate_id();
                $row = mysql_fetch_assoc($result);
                $_SESSION['SESS_USERNAME'] = $row['username'];
                $_SESSION['SESS_LASTLOGIN'] = $row['lastlogin'];
                $_SESSION['SESS_USERID'] = $row['ID'];
                session_write_close();
                $main->send->updateLastLogin();
                return true;
            }
else {
                return false;
            }
        }
else {
            return false;
        }
    }

    
    public $send;
    public $recieve;
    
    public function __construct() {
        $this->send = new Send();
        $this->recieve = new Recieve();
    }
}

class Send {
    public function updateLastLogin() {
        mysql_query("UPDATE users SET lastlogin = NOW() WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
    }
}

class Recieve {
    public function getUserName() {
        return $_SESSION['SESS_USERNAME'];
    }

    public function getUserId() {
        return $_SESSION['SESS_USERID'];
    }

    public function getLastLogin() {
        return $_SESSION['SESS_LASTLOGIN'];
    }
}


//---------------------- end of class----------------

$main = new Main();
if($main->connect("db-host", "db-user", "db password") === true) {
    if($main->select("db-name") === true){
        if($main->login($_POST["username"], $_POST["password"]) === true) {
            echo "You are logged in:" . $main->Recieve->getUserName();
        }
else {
            die("Username and Password combination does not match");
        }
    }
else {
        die("Unable to select database, Please contact the site administrator");
    }
}
else {
    die("Unable to connect to server, Please contact the site administrator");
}

?>
 
Wouter J

Wouter J

21/06/2012 22:22:43
Quote Anchor link
Geen die, niemand/niks gaat dood als er iets fout gaat (behalve als je spreekt van een ramp, maar dat is dit niet).

Verder wat hebben die object namen nou te maken met een user enz.? En een main object die de login regelt??
Kijk eens naar wat je hierboven nou hebt gemaakt (die tabel in de 1e post) dat lijkt toch 0 komma 0 op het geen jij hier nu hebt getypt?
Ik zie geen form afhandeling? Wat als nou iets niet is ingevuld? Waar komt $main->Recieve vandaan? Naar mijn mening is dit $main->recieve?
Wat zei ik nou? Geen publieke properties... En ook: geef het user object mee aan de UserMapper.
Verder zie ik lelijke foutonderdrukking, magic_quotes (!!!), slechte afhandeling: als Main::login() false retourneert kunnen er meer dingen fout zijn, gooi zoals al gezegd de error in het object en niet daarbuiten.

Nee, sorry als ik boos of slecht overkom. Maar als ik dit zo zie zal je eerst eens heel goed je PHP kennis moeten bijspijkeren, OO denken is echt nog 100 stappen te ver...
 
Lex van der poel

lex van der poel

21/06/2012 22:25:42
Quote Anchor link
ja idd je hebt gelijk alleen ik snapte niet meer hoe ik het login systeem moest maken voor die opbouw...

Toevoeging op 21/06/2012 22:33:03:

okay ik heb dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|---------------------------------------------------------|
|         UserMapper        |           User              |
|---------------------------------------------------------|
| -Db                       | -Name                       |
| -Table                    | -Password                   |
|                           | -Id                         |
|                           | -Lastlogin                  |
|                           | -Money                      |
|---------------------------|-----------------------------|
| +SetDb(db)                | +SetName(name : string)     |
| +GetById(id : int)        | +GetName()                  |
| +GetByName(name : string) | +SetPass(pass : string)     |
| +Create(user : string)    | +GetPass()                  |
| +Delete(user : string)    | +SetId(id : int)            |
|                           | +GetId()                    |
|                           | +SetMoney(money : int)      |
|                           | +GetMoney()                 |
|                           | +SetLastLogin(date : string)|
|                           | +GetLastLogin()             |
|---------------------------------------------------------|

ik denk dat ik nog een +Connect(dbhost : string, dbuser : string, dbpass : string)
nodig heb om met de database te verbinden dan gebruik ik +SetDb(db) om de database te selecteren. en dan +GetByName(name : string) om een array te krijgen met alle gegevens die aan het gebruikersnaam zijn gekopelt en dan controleert of het wachtwoord klopt maar wat moet ik dan doen als het wachtwoord klopt alles opslaan in een paar sessions?
Gewijzigd op 21/06/2012 22:59:09 door lex van der poel
 
Erwin H

Erwin H

22/06/2012 09:30:25
Quote Anchor link
Dat met die DB methodes zou ik anders doen. Als je ervan uit gaat dat elke class maar 1 taak heeft, dan moet de usermapper dus niet voor de databaseverbinding zorgen. De taak van de usermapper is het om de user gevevens in de database te zetten en er weer uit te halen.
Je kan dus veel beter een andere class bouwen die de database verbinding verzorgd (misschien zelfs wel splitsen in meerder classes). Die class (of classes) verzorgen dan de verbinding, het selecteren van de database en het daadwerkelijk uitvoeren van de query. De usermapper roept die class aan met de query die moet worden uitgevoerd.
 
Lex van der poel

lex van der poel

22/06/2012 13:43:06
Quote Anchor link
Maar dan heb ik de usermaper toch ook niet meer nodig want user zorgt in pricipe voor alle info van de user...
 
Erwin H

Erwin H

22/06/2012 13:59:15
Quote Anchor link
Wat mij betreft heb je user wel nodig. User is de class die intelligentie toevoegt. Die class weet wat het object user is, wat er mee kan gebeuren en bijvoorbeeld dat als iemand de leeftijd -3 wil invoeren dat dat niet zal kunnen.

De class usermapper zorgt ervoor dat de data opgehaald wordt en weggeschreven wordt. In dit geval richting een database, maar misschien in een volgende applicatie haal je het op van een andere site (en heb je dus bijvoorbeeld een cUrl actie nodig om het via de API van die andere site op te halen).

De database class zorgt weer voor de echte interactie met de database en kan je eventueel vervangen als je naar een andere database overstapt (van MySQL naar Oracle bijvoorbeeld).

Zo heeft elke class zijn eigen taak en zorgen veranderingen in een deel van je opzet, niet meteen voor veranderingen in alle classes.
 
Lex van der poel

lex van der poel

22/06/2012 14:03:41
Quote Anchor link
Hoe kan ik dan vanuit de class user de class uermaper oproepen?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
class Main {
}

    
    public $User;
    public $UserMapper;
    
    public function __construct() {
        $this->User = new User();
        $this->UserMapper = new UserMapper();
    }
}

class User {
}

class UserMapper {
}


//---------------------- end of class----------------

$main = new Main();
if($main->connect("db-host", "db-user", "db password") === true) {
    if($main->select("db-name") === true){
        if($main->login($_POST["username"], $_POST["password"]) === true) {
            echo "You are logged in:" . $main->Recieve->getUserName();
        }
else {
            die("Username and Password combination does not match");
        }
    }
else {
        die("Unable to select database, Please contact the site administrator");
    }
}
else {
    die("Unable to connect to server, Please contact the site administrator");
}

?>



Toevoeging op 22/06/2012 14:06:12:

want met $main->User->SetName('lol'); moet het in de db worden gezet maar aangezien dat via de usermapper moet moet ik een functie aanmaken in de usermapper om die weer aan te roepen in SetName...
Gewijzigd op 22/06/2012 14:09:10 door lex van der poel
 
Erwin H

Erwin H

22/06/2012 14:13:53
Quote Anchor link
Er zijn meerdere manier om dat te doen.
1) Bij de construct van de User geef je een object van class UserMapper mee. Die sla je op in een property en elke keer dat er interactie nodig is roep je een methode aan via het property.

2) Je roept vanuit User de UserMapper niet aan, maar bij het ophalen van gegevens in de UserMapper creeer je een object van class User waar je direct de net opgehaalde gegegevens aan meegeeft.

3) User en UserMapper zien elkaar helemaal niet, maar vanuit de controller (of flat php bestand) wordt eerst de UserMapper aangeroepen om data op te halen die daarna doorgegeven wordt aan een object van class User.

En er zijn vast nog wel meer mogelijkheden, net wat het beste werkt in jouw applicatie. De eerste zou ik gebruiken als je verwacht veel interactie nodig te hebben, zoals bijvoorbeeld ook updates en je dus niet alleen maar gegevens hoeft op te halen.
 
Lex van der poel

lex van der poel

22/06/2012 14:29:35
Quote Anchor link
zou je een voorbeeld van de eerste optie kunnen laten zien?
 
Erwin H

Erwin H

22/06/2012 15:07:44
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

class User_Mapper{
  public function getUser( $userid ){
    //deze functie haalt de user gegevens op en returned het
  }
}


class User{

  private $userMapperObj;
  private $userData;

  public function __construct( User_Mapper $obj ){
    $this->userMapperObj = $obj;
  }


  public function populate( $userid ){
    $this->userData = $this->userMapperObj->getUser( $userid );
  }

}

?>

In de construct van User heb ik dus ook via een typehint aangegeven dat het object dat meegegeven moet worden van het type User_Mapper moet zijn. Als je het echt netjes doet geef je daar als typehint echter een interface mee en niet een class. Op die manier kan je namelijk verschillende classes schrijven die dezelfde interface implementeren. Waarbij een class de gegevens vanuit de database haalt, de ander via een externe website. Zelfs als je nu niet verwacht dit te gaan doen is het raadzaam om interfaces te gebruiken, omdat je dan veel flexibeler bent.
 
Lex van der poel

lex van der poel

23/06/2012 16:47:34
Quote Anchor link
ik heb er nu all een heele tijd mee lopen klooien alleen ik snap het nog steeds niet die code hierboven is er geen tutorial?

Toevoeging op 23/06/2012 17:12:02:

ik heb al een oplossing gevonden bedankt.

Toevoeging op 23/06/2012 18:49:26:

dit begint er toch al meer op te lijken?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<?php
session_start();
class Main {
    
    public $User;
    public $UserMapper;
    public $DataBase;
    
    public function __construct() {
        $this->User = new User();
        $this->UserMapper = new UserMapper();
        $this->DataBase = new DataBase();
    }
}

class User {
    public function CheckLogin() {
        if(isset($_SESSION['SESS_USERNAME'])) {
            return true;
        }
else {
            return false;
        }
    }

    public function GetName() {
        return $_SESSION['SESS_USERNAME'];
    }

    public function SetName($str) {
        $get->UserMapper = new UserMapper();
        $get->UserMapper->Qeury(1, $str);
    }

    public function GetPass() {
        return $_SESSION['SESS_USERPASSWORD'];
    }

    public function SetPass($str) {
        $str = md5($str);
        $get->UserMapper = new UserMapper();
        $get->UserMapper->Qeury(2, $str);
    }

    public function GetMoney() {
        return $_SESSION['SESS_USERMONEY'];
    }

    public function SetMoney($str) {
        $get->UserMapper = new UserMapper();
        $get->UserMapper->Qeury(3, $str);
    }

    public function GetId() {
        return $_SESSION['SESS_USERID'];
    }

    public function SetId($str) {
        $get->UserMapper = new UserMapper();
        $get->UserMapper->Qeury(4, $str);
    }

    public function getLastLogin() {
        return $_SESSION['SESS_LASTLOGIN'];
    }

    public function SetLastLogin($str) {
        $get->UserMapper = new UserMapper();
        $get->UserMapper->Qeury(5, $str);
    }

    public function UpdateLastLogin($str) {
        $get->UserMapper = new UserMapper();
        $get->UserMapper->Qeury(6);
    }
}

class UserMapper {
    function
Query($str, $str1) {
        if($str === 1) { // Sets Username
            mysql_query("UPDATE users SET username = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
            $_SESSION['SESS_USERNAME'] = $str1;
        }

        if($str === 2) { // Sets Password
            mysql_query("UPDATE users SET password = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
            $_SESSION['SESS_USERPASSWORD'] = $str1;
        }

        if($str === 3) { // Sets Money
            mysql_query("UPDATE users SET money = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
            $_SESSION['SESS_USERMONEY'] = $str1;
        }

        if($str === 4) { // Sets UserID
            mysql_query("UPDATE users SET ID = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
            $_SESSION['SESS_USERID'] = $str1;
        }

        if($str === 5) { // Sets Lastlogin
            mysql_query("UPDATE users SET lastlogin = " . $str1 . " WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
            $_SESSION['SESS_LASTLOGIN'] = $str1;
        }

        if($str === 6) { // Updates Lastlogin
            mysql_query("UPDATE users SET lastlogin = NOW() WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
            $sql = mysql_query("SELECT lastlogin FROM users WHERE username='" . $_SESSION['SESS_USERNAME'] . "'");
            $_SESSION['SESS_LASTLOGIN'] = $sql;
        }
    }
    function
Login($username, $userpassword) {
        $username = @trim($username);
        $userpassword = @trim($userpassword);
        if(get_magic_quotes_gpc()) {
            $username = stripslashes($username);
            $userpassword = stripslashes($userpassword);
        }

        $username = mysql_real_escape_string($username);
        $userpassword = md5(mysql_real_escape_string($userpassword));
        if ($username === "") {
            return 3;
        }
elseif ($userpassword === "") {
            return 4;
        }
else {
            $result = mysql_query("SELECT * FROM users WHERE username='" . $username . "' AND password='" . $userpassword . "'");
            if($result) {
                if(mysql_num_rows($result) == 1) {
                    session_regenerate_id();
                    $row = mysql_fetch_assoc($result);
                    $_SESSION['SESS_USERNAME'] = $row['username'];
                    $_SESSION['SESS_LASTLOGIN'] = $row['lastlogin'];
                    $_SESSION['SESS_USERID'] = $row['ID'];
                    $main->send->updateLastLogin();
                    return 1;
                }
else {
                    return 2;
                }
            }
else {
                return 5;
            }
        }
    }
    function
Delete($str) {
        $str = @trim($str);
        if(get_magic_quotes_gpc()) {
            $str = stripslashes($str);
        }

        $str = mysql_real_escape_string($str);
        $sql = mysql_query("DELETE FROM users WHERE username='" . $str . "'");
        if(!$sql) {
            return false;
        }
else {
            return true;
        }
    }
}

class DataBase {
    function
Connect($db_Host, $db_User, $db_Password) {
        $link = mysql_connect($db_Host, $db_User, $db_Password);
        if(!$link) {
            return false;
        }
else {
            return true;
        }
    }
    function
Select($str) {
        $db = mysql_select_db($str);
        if(!$db) {
            return false;
        }
else {
            return true;
        }
    }
}


//---------------------- end of class----------------

$main = new Main();
if($main->DataBase->Connect("localhost", "root", "root") === true) {
    if($main->DataBase->Select("mysql") === true) {
        if($main->User->CheckLogin() === false){
            echo "please login";
        }
else {
            echo"welcome";
        }
    }
else {
        echo"<html><head><title>Error</title></head><body><center><h1>Error: " . mysql_error() . "</h1></center></body></html>";
    }
}
else {
    echo"<html><head><title>Error</title></head><body><center><h1>Error: " . mysql_error() . "</h1></center></body></html>";
}

session_write_close();
?>
 
Lex van der poel

lex van der poel

24/06/2012 18:44:19
Quote Anchor link
bumb
 
Roel -

Roel -

24/06/2012 22:11:44
Quote Anchor link
Wouter J op 21/06/2012 21:38:12:
__construct is een van die hele nuttige magic methods in PHP OO. Lees anders ook eens rustig die OOP beginnershandleiding, wordt het allemaal uitgelegd...

Tevens moet je nooit een echo plaatsen in een functie, altijd retourneren en dan pas in de procedurele code beslissen wat je er mee gaat doen (opslaan in var, echo, enz.)

Tevens gebruik je bijna nooit public properties, altijd protected of private. Je moet getters en setters maken om toegang te krijgen tot die vars.

En je Main object is hier nutteloos, je moet dit gewoon in je procedurele code plaatsen.

Als laatst heb je de property $recive niet gedefinieerd in de Main klasse en is het recieve. Ook heeft deze code natuurlijk niks met je bovenstaande idee te maken...


Beetje tegenstrijdig wat je nu zegt. Een paar maanden geleden zei jij tegen me dat je in een method nooit een echo plaatst, behalve in een layout method o.i.d..
 
Wouter J

Wouter J

25/06/2012 09:16:45
Quote Anchor link
Inderdaad, in ene Layout method of een view helper mag dit, alleen dat gaat in dit geval niet op en soms hou ik alles wat makkelijker voor dan het is. Je moet niet teveel willen vertellen in 1 keer.

Lex, waarom stap je niet af van die Main klasse? Dat maakt de hele boel onduidelijk.

En tevens lijkt de UserMapper nog steeds niet op het geen je in Post 1 had, het geen goed was. Kijk eens naar deze reactie van Pim, of deze reactie van mij. Misschien dat het dan wat begrijpelijker wordt.
 
Roel -

Roel -

25/06/2012 13:42:25
Quote Anchor link
Oké, alleen omdat je het dikgedrukt had leek het me een beetje tegenstrijdig.
Ik snap 'm nu.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.