OOP based?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Back-end Developer C#

Functie omschrijving We are looking for a dutch native speaker Ben jij een ervaren back-end developer, die graag in een in-house functie wil werken? Passen de woorden innovatie, programmeren en teamspeler bij jou? Zoek niet verder en lees snel verder. Voor een echt familiebedrijf in de regio van Uden ben ik op zoek naar een back-end developer, die met name kennis heeft van C# en .NET. Jij gaat de interne applicaties verder optimaliseren en nieuwe features ontwikkelen. Verder ga je de volgende werkzaamheden uitvoeren: Ondersteunen gebruikers; Uitvoeren van analyses van de software/applicaties; Maken van functionele ontwerpen en deze door vertalen

Bekijk vacature »

Front-End React Developer

As a Front-End React Developer you improve the user-experience of our web applications for your colleagues in Coolblue. How do I become a Front-End React Developer at Coolblue? As a Front-End React Developer you are responsible for developing user interface components and implementing them using React.js concepts and workflows. You work with the UX Designer and get energy from coming up with creative solutions and present these within the team. During the day you gather and welcome feedback on your technical and soft skills. Would you like to become a Front-End React Developer at Coolblue? Read below if the job

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Software Ontwikkelaar

Functie omschrijving Voor een echt familiebedrijf in de omgeving van 's-Hertogenbosch ben ik op zoek naar een Software Developer. Jij gaat in de functie van Software Developer werken met C# en .NET framework Jij gaat maatwerk software ontwikkelen en softwareoplossingen creëren. Daarnaast optimaliseer je de bestaande software. Oplossingen waar de klant echt iets aan heeft, jij krijgt er energie van op dit te realiseren. Je gaat werken in een Microsoft omgeving(ASP.NET) en gebruikt daarnaast C# en MVC. Samen met het huidige IT team binnen deze organisatie verwerk je de wensen van de klant tot een (eind)product. Bedrijfsprofiel Deze organisatie is

Bekijk vacature »

C# developer

Functie Als C# ontwikkelaar ben jij de spin in het web bij deze organisatie. Jij begeleidt en traint de field engineers die bij de klanten machines leveren en installeren. Daarnaast ondersteun jij de field engineers als zij bij de klant vastlopen bij het installeren van de machine m.b.t. software matige vragen. Jouw doel is dan ook om de technische kennis van de field engineers door middel van training zoveel mogelijk uit te breiden. Dit om ervoor te zorgen dat zij zelfstandiger software matige problemen kunnen oplossen. Ook ben jij verantwoordelijk voor het bedenken van software oplossingen voor klanten en dit

Bekijk vacature »

Applicatie ontwikkelaar

Functie omschrijving Zelfstandige applicatie ontwikkelaar gezocht voor familiair bedrijf in omgeving Rotterdam! Ben jij op zoek naar een nieuwe uitdaging en zoek jij een informele werkgever waar je zelfstandig kunt werken binnen een leuk IT team, lees dan snel verder want wie weet zijn wij op zoek naar jou! Binnen deze rol houdt jij je met het volgende bezig: Onderhouden en ontwikkelen van de IT systemen; Opzetten van Azure Cloud systemen, denk aan interfaces, hardware op de Cloud, webportalen of BI functies; Werken aan scripts binnen verschillende software applicaties, denk aan ERP en CAD; Ontwikkelen en implementeren van MS PowerApps

Bekijk vacature »

PHP Developer Symfony

Dit ga je doen Ontwikkelen van Product Informatie Management (PIM) systemen; Werken aan zowel grotere als kleine projecten voor toonaangevende klanten binnen o.a. de retail. Hier ga je werken Als PHP Developer kom je te werken binnen een vooruitstrevende organisatie die Product Informatie Management (PIM) systemen levert aan hun klanten. Hun klanten zijn toonaangevende bedrijven binnen o.a. de retail. De organisatie zit gevestigd in regio Zwolle en bestaat uit zo'n 35 medewerkers, waarvan 30 IT. Je komt te werken binnen één van de zelfsturende development teams welke ieder verantwoordelijk zijn voor hun 'eigen' klanten. Jouw team bestaat uit 6 backend

Bekijk vacature »

Fullstack JavaScript Developer Webapplicaties

Bedrijfsomschrijving Voor deze organisatie ben ik op zoek naar een getalenteerde Fullstack JavaScript Developer. Ze is een snelgroeiend software development agency dat zich richt op het ontwikkelen van moderne webapplicaties en complexe systemen voor haar klanten. Ze is gevestigd onder de rook van Utrecht en heeft als doel om tot de top van de Nederlandse agencies te behoren. Deze organisatie maakt softwareoplossingen voor verschillende soorten bedrijven. Innovatie staat hoog in het vaandel en je zult dus met nieuwe technieken aan de slag gaan. Ze hebben klanten in vele branches zitten, zoals retail, finance, gezondheid en onderwijs. De diverse klanten zorgen

Bekijk vacature »

.NET Developer Microservices

Dit ga je doen Je taken zullen voornamelijk bestaan uit: Het ontwikkelen van software, inclusief vormgeving, implementaties, integraties en (automatisch) testen (.NET, C#, Azure, Docker, Microservices, Angular); Het in kaart brengen van software requirements; Zorgen dat jouw code kwalitatief hoogstaand is; Het uitvoeren van risico analyses; Een bijdrage leveren aan het continuous quality improvement process. Hier ga je werken Dat kanker een verschrikkelijke ziekte is die de wereld uit geholpen moet worden, is duidelijk. Binnen deze Gelderse organisatie die duizenden ziekenhuizen van producten voorziet, proberen ze daar via technische innovaties aan bij te dragen. Samen met 10 collega .NET developers

Bekijk vacature »

.NET Developer te Naarden

Bedrijfsomschrijving Voor mijn klant ben ik op zoek naar een .NET Developer om het huidige team te komen versterken. Deze organisatie bevindt zich in de logistieke sector, en zij hebben een eigen ERP systeem ontwikkeld dat zij inzetten ter optimalisatie van de logistieke processen van haar eindklanten. Deze organisatie bestaat inmiddels al ruim 20 jaar, waarbij zij een duidelijke missie hebben, namelijk: het werk van de eindklant makkelijker maken door de systemen die zij leveren. Ze werken over heel de wereld, wat deze organisatie een echte internationale speler maakt. Binnen de organisatie kenmerken ze zich door een dynamische en professionele

Bekijk vacature »

Delphi Programmeur

Functie omschrijving Onze opdrachtgever is gespecialiseerd in kantoor-bedrijfssoftware en zit gevestigd in omgeving Numansdorp. Als programmeur ben jij bij dit bedrijf met het volgende bezig; Je vertaalt technische en functionele ontwerpen naar kwalitatieve software. Je ontwikkelt, ontwerpt en test software. Je maakt daarbij veel gebruik met de volgende tools & technologieën: Delphi 10.3 (Rio), QuickReport 6. Je krijgt in deze rol veel vrijheid en verantwoordelijkheid. Je levert projecten van A - Z op, en werkt daarbij projectmatig en gestructureerd. Bedrijfsprofiel Dit bedrijf richt zich op maatwerk software oplossingen. Deze software oplossingen worden ingezet in de financiële branche. Het betreft een

Bekijk vacature »

Software Ontwikkelaar C# .NET

Functie omschrijving Startende Software Ontwikkelaar gezocht met kennis van C# .NET! Ben jij net klaar met je opleiding en ben je op zoek naar je eerste echte werkervaring? Of heb jij al enige werkervaring maar ben toe aan iets nieuws? Dan is dit de perfecte kans voor jou! Wij zoeken namelijk een Junior Software Ontwikkelaar die klaar is voor een nieuwe uitdaging bij een leuke werkgeven in de regio Zeist. In deze functie werk jij vaak aan verschillende projecten en ga je bij klanten op bezoek. Ben jij op zoek naar een functie met uitdaging, diversiteit en verantwoordelijkheid? Dan is

Bekijk vacature »

Senior Front end developer Digital Agency

Functie Jij als Front end developer komt te werken in een van de 8 multidisciplinaire teams binnen de organisatie. Deze teams werken op basis van Scrum agile in 2 wekelijkse sprints. De grootte van de teams varieert van 9-14 collega’s en bestaan altijd uit één of meerdere project managers en een project manager. Samen met je team werk je aan verschillende projecten voor uiteenlopende klanten zoals grote multinationals tot het kleine mkb. De stack waarmee gewerkt wordt is voornamelijk Javascript, ES6, Es.next, HTML, CSS, React.js en Node.js. Wat deze organisatie onderscheid is dat ze echt langdurige partnerships aangaan met hun

Bekijk vacature »

Front-end Developer Magento 2/Wordpress

Voor het aantrekkelijk houden en steeds vernieuwen van de huidige websites en webshops en het meedenken in de marketing zijn wij per direct op zoek naar een ervaren Front-end developer met gedegen kennis van Magento 2 (webshops) en Wordpress (websites). Wat bieden wij jou Mooi salaris! Meteen op contract bij de opdrachtgever! Gezellig, Kempisch bedrijf! 35 uur per week! Auto van de zaak! Wie ben jij Van een front-end developer verwachten wij: Een afgeronde Bachelor ICT opleiding met profiel ICT & Media Design. Dat je in het bezit bent van een Magento 2 professional front-end developer certificaat; Je hebt ruime

Bekijk vacature »

Senior Java Ontwikkelaar

Dit ga je doen Werken aan uiteenlopende interne projecten voor grote (internationale) organisaties; Ontwikkelen van diverse (web)applicaties en platformen met technieken als Java, Azure en ASP.NET; Complexe vraagstukken tackelen met jouw expertise en ervaring; Waar nodig help jij je collega's om samen tot de juiste oplossing te komen. Hier ga je werken Als Java Developer kom je te werken bij een internationale organisatie in regio Amsterdam die zich richt op procesoptimalisatie door middel van zeer complexe IT oplossingen. Dit doen zij op het allerhoogste niveau met vestigingen over heel de wereld en met een groot aantal aansprekende, maatschappelijk betrokken klanten.

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

19/04/2024 12:57:13
 
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.