Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: DeveloperTalk. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

psycho

Fortgeschrittener

  • »psycho« ist der Autor dieses Themas

Beiträge: 413

Registrierungsdatum: 26.06.2011

Danksagungen: 80

  • Private Nachricht senden

1

23.07.2011, 21:00

Erster Frontcontroller (MVC)

Dank Patricks Tut zu MVC wollte ich mich mal daran wagen...^^
Also, ich hab schon einige Ideen, nur ist es eigentlich irwie möglich (ohne case), über die url eine methode auf zu rufen? (Formulierung ist etwas doof^^)

Beispiel:
index.php?module=admin&action=add ...

Kann man das dynamisch machen ohne case?
Mit dem Modul das weiß ich, aber für das Aufrufen der Methode fehlt mir noch die entscheidene Idee.
Computer sind dazu da, uns die Arbeit zu
erleichtern, die wir ohne sie gar nicht hätten.

Patrick

Profi

Beiträge: 694

Danksagungen: 168

  • Private Nachricht senden

2

23.07.2011, 21:58

Ich versteh deine Frage nciht :D
Was für ein Modul ? :D
Ex ungue leonem.

War der Beitrag für dich hilfreich?
Dann drück auf .

Simon

Profi

Beiträge: 725

Registrierungsdatum: 14.06.2011

Danksagungen: 210

  • Private Nachricht senden

3

24.07.2011, 00:06

Dann mache ich mal einen Vorschlag:
Wie wäre es, wenn du einen Ordner erstellst, in dem alle PageController drin sind.
Sprich IndexController.php, AdminController.php (Nameswahl wie gewünscht dann :D)
Wenn nun Modul: Admin angefragt wird, wird geprüft, ob AdminController.php in dem Ordner existiert.
Wenn ja, wird die Datei inkludiert und sicherheithalber noch einmal geprüft, ob die Klasse nun auch existiert.

In dem Controller könntest du die Actions wie folgt aufbauen: addAction(), deleteAction(), etc.
nun wird geprüft, ob in der Klasse, welche nun inkludiert wurde, die Methode existiert, die angefragt wird.
Wenn dies der Fall ist, wird sie ausgeführt.
Wenn nicht, kannste den Fehler irgendwie handlen.
Ebenfalls, wenn der Klassencheck fehlschlägt.

Klassen dynamisch erzeugen und Funktionen aufrufen geht wie folgt:

PHP-Quelltext

1
2
3
4
5
$className "AdminController";
$actionName "addAction";

$class = new $className();
$class->{$actionName}();

Es hat sich bereits 1 registrierter Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

psycho (24.07.2011)

psycho

Fortgeschrittener

  • »psycho« ist der Autor dieses Themas

Beiträge: 413

Registrierungsdatum: 26.06.2011

Danksagungen: 80

  • Private Nachricht senden

4

24.07.2011, 12:39

Danke Simon genau das meinte ich^^

Das mit den Ordner und Methoden aufbau wollte ich auch machen, ich wusste halt nicht wie man das mit den Methodenaufruf macht^^
Computer sind dazu da, uns die Arbeit zu
erleichtern, die wir ohne sie gar nicht hätten.

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

5

25.07.2011, 12:11

Also ich habesowas ähnliches auch geplant gehabt, aber ich dachte einfach, dass man eben das Modul includiert, dass Modul könnte dann ja einfach mit den GET Parametern arbeiten oder? Oder wäre das zusehr gegen dass MVC? Ich meine, vielleicht stellt das Modul garkeine Actions zur Verfügung... Da wäre eine Pauschale Fehlerbehandlung, falls die Methode nciht existiert irgendiwe schwierig. Außerdem gibt es ja sowiso noch viel mehr GET Parameter, die direkt vom Modul ausgewertet werden...
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

Patrick

Profi

Beiträge: 694

Danksagungen: 168

  • Private Nachricht senden

6

25.07.2011, 13:48

Das Model wird auch includiert, allerdings sollte nicht das Model mit den GET-Parametern arbeiten, weil das gegen das MVC wäre. Der Controller muss die GETs auswerten und dann entsprechend auf das Model zugreifen und dessen Methoden aufrufen.
Simons Methode finde ich nicht gerade perfekt, weil dadurch schnell Sicherheitslücken auftreten können.
Nehmen wir mal an, wir haben ein Model, welches einen Datensatz darstell. Es hat folgende Methoden: saveData(), clearData(), setData(), getData(). Und wenn jetzt ein Hacker iwie das herausgefunden hat und in den GET-Parameter schreibt: „clearData”, dann sind die Daten futsch und gelöscht. Ebenfalls könnte er auch die Daten neu setzten, was ja ganz und gar nicht im Sinne des Programmierers ist. Es könnten riesige Schäden auftreten.
Deshalb würde ich lieber mit case oder ner if-Abfrage die GETs auswerten.

LG Patrick
Ex ungue leonem.

War der Beitrag für dich hilfreich?
Dann drück auf .

Simon

Profi

Beiträge: 725

Registrierungsdatum: 14.06.2011

Danksagungen: 210

  • Private Nachricht senden

7

25.07.2011, 16:07

Wieso sind die Daten dann futsch?
Wenn jemand in seinem PageController eine cleardataAction macht, welche dem Model befielt alles zu löschen, dann hat das nichts mit meiner Methode zu tun :D

Meine Methode ruft ja nur einen neuen Skriptteil auf, welcher sich in der durch Page und Action bestimmten Datei befindet.

Patrick

Profi

Beiträge: 694

Danksagungen: 168

  • Private Nachricht senden

8

25.07.2011, 18:48

Das sollte auch kein Vorwurf gegen deine Methode sein :D Er wollte es ja auch so haben ;)
Ich wollte nur drauf hinweisen, dass, wenn er es so macht, er die gesagten Probleme bekommt :D
Ex ungue leonem.

War der Beitrag für dich hilfreich?
Dann drück auf .

Simon

Profi

Beiträge: 725

Registrierungsdatum: 14.06.2011

Danksagungen: 210

  • Private Nachricht senden

9

25.07.2011, 19:01

Ne aber welche Probleme?
:D
Wenn du ne clearAction() erstellst, ist es das selbe, wie wenn du eine clear.php erstellst, oder die clear per case aufrufst? O.o

psycho

Fortgeschrittener

  • »psycho« ist der Autor dieses Themas

Beiträge: 413

Registrierungsdatum: 26.06.2011

Danksagungen: 80

  • Private Nachricht senden

10

25.07.2011, 19:15

Patrick ich verstehe dein Problem zwar, aber bevor das Model die Methode ausführen darf, werden erst die Rechte des Users kontrolliert und nur dann wird auch die Methode ausgeführt, wäre ja sonst auch das selbe, wenn sich ein User anmeldet, die Rechte werden nicht kontrolliert, zumindest gehst du davon aus xD, kann er ja auch alles löschen.

Ich werde natürlich vorher die Parameter ordentlich prüfen und denn dürfen meines erachtens keine Probleme auftreten.

zu case:
Ist das nicht etwas unsauber mit case zu arbeiten?
Außerdem muss man dann ja jedes mal am controller nach gucken, ob es die Methode gibt und wenn nicht muss man die dann ja jedes mal hinzufügen.
Computer sind dazu da, uns die Arbeit zu
erleichtern, die wir ohne sie gar nicht hätten.

Patrick

Profi

Beiträge: 694

Danksagungen: 168

  • Private Nachricht senden

11

25.07.2011, 19:22

Ich glaub wir reden aneinander vorbei xD


Bsp:

Die Klasse Model hat die Methoden clearData(), saveData(), getData(), setData().


GEFÄHRLICH:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
<?php
// controller.php


include './model.php';

$model = new Model();
model->{$_GET['action']}();
?>




SICHER

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// controller.php


include './model.php';

$model = new Model();

if($_GET['action'] == 'getData')
    model->getData();
else if($_GET['action'] == 'saveData')
    model->saveData();
else {
    echo 'Error!!!';
    exit(1);
}

?>


Wenn jetzt die die URL so aufgerufen wird: www.foo.de/controller.php?action=clearData, dann wird in der sicheren Variante „Error!!!” ausgegeben, bei der unsicheren werden alle Daten gelöscht :P

Verstehst du jetzt, was ich mein xD
Ex ungue leonem.

War der Beitrag für dich hilfreich?
Dann drück auf .

Patrick

Profi

Beiträge: 694

Danksagungen: 168

  • Private Nachricht senden

12

25.07.2011, 19:29

@psycho
Nein, das wäre nicht das selbe, weil das ganze über die Rechte läuft, mit der auch in der PHP-Datei gehandelt wird.
Ex ungue leonem.

War der Beitrag für dich hilfreich?
Dann drück auf .

psycho

Fortgeschrittener

  • »psycho« ist der Autor dieses Themas

Beiträge: 413

Registrierungsdatum: 26.06.2011

Danksagungen: 80

  • Private Nachricht senden

13

25.07.2011, 19:46

Ich verstehe dich trotzdem nicht^^

Ich will das so machen, wenn der User keine Rechte hat um bestimme Aktionen wie delUser etc. auszuführen, dann werden sie auch nicht ausgeführt.

Du musst mir das mal genauer erläutern was du meinst...^^
Computer sind dazu da, uns die Arbeit zu
erleichtern, die wir ohne sie gar nicht hätten.

Patrick

Profi

Beiträge: 694

Danksagungen: 168

  • Private Nachricht senden

14

25.07.2011, 20:16

Oh.. :D

Dann musst du einfach vorher überprüfen, welche Rechte er hat und dann erst die Methoden aufrufen ;)
Das geht z.B. so:

Tabelle:

Quellcode

1
2
3
4
5
Name | Rechte
_____________
XXXX | admin
YYYY | user
_____________


Überprüfung:

PHP-Quelltext

1
2
3
4
if(!mysql_fetch_object(mysql_query('SELECT * FROM table WHERE Name = "YYYY" AND Rechte = "admin"'))) 
    // Benutzer hat [b]keine[/b] Admin Rechte
if(mysql_fetch_object(mysql_query('SELECT * FROM table WHERE Name = "YYYY" AND Rechte = "admin"')) != false)
    // Benutzer har Admin Rechte 



Bevor ichs dir nochmal erkläre, sag mir bitte, welchen Teil du nicht verstanden hast xD
Ex ungue leonem.

War der Beitrag für dich hilfreich?
Dann drück auf .

psycho

Fortgeschrittener

  • »psycho« ist der Autor dieses Themas

Beiträge: 413

Registrierungsdatum: 26.06.2011

Danksagungen: 80

  • Private Nachricht senden

15

25.07.2011, 20:20

Du hast mich auch nicht verstanden :D

Ich weiß, wie man kontrolliert ob jemand Rechte hat xD

Ich wollte nur darauf hinweisen, das ich BEVOR jemand delUser etc. macht, seine Rechte kontrolliert werden, und wenn er die nicht hat gibts halt sowas wie: Zugriff verweigert oder die seite bleibt einfach so xD

Ich hoffe wir sind uns jetzt einig :D
Computer sind dazu da, uns die Arbeit zu
erleichtern, die wir ohne sie gar nicht hätten.

Patrick

Profi

Beiträge: 694

Danksagungen: 168

  • Private Nachricht senden

16

25.07.2011, 21:09

Haha, ich glaub ich hab heut öfters was nicht verstanden xD

Achsoo :D:D

Ja, sind wir :P
Ex ungue leonem.

War der Beitrag für dich hilfreich?
Dann drück auf .

psycho

Fortgeschrittener

  • »psycho« ist der Autor dieses Themas

Beiträge: 413

Registrierungsdatum: 26.06.2011

Danksagungen: 80

  • Private Nachricht senden

17

25.07.2011, 21:30

Ich merkt das schon^^

Gut dann wäre das ja geklärt xD

Vielleicht solltest du dir beim nächsten mal die posts besser durch lesen bzw. ich sollte mich genauer ausdrücken (Lg auch an meine Deutsch Lehrerin xD) :D
Computer sind dazu da, uns die Arbeit zu
erleichtern, die wir ohne sie gar nicht hätten.

Patrick

Profi

Beiträge: 694

Danksagungen: 168

  • Private Nachricht senden

18

25.07.2011, 21:47

Ich werds versuchen :P
Ne Spaß, heut hab ich wirklich vieles nicht richtig verstanden :D
// Lag vlt. am zuvielen MineCraft zocken xD
Ex ungue leonem.

War der Beitrag für dich hilfreich?
Dann drück auf .

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

19

25.07.2011, 23:45

Wie kann man denn zu viel Minecraft zoggen :D
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

psycho

Fortgeschrittener

  • »psycho« ist der Autor dieses Themas

Beiträge: 413

Registrierungsdatum: 26.06.2011

Danksagungen: 80

  • Private Nachricht senden

20

26.07.2011, 12:12

Das Frage ich mich auch....^^

Spielt ihr eigentlich offline oder online?

und wiedermal offtopic :D

EDIT von Erik:
Alles, was OT ist, geht jetzt hier weiter :)
Computer sind dazu da, uns die Arbeit zu
erleichtern, die wir ohne sie gar nicht hätten.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Erik« (26.07.2011, 12:56)