PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Vernünftiges PHP für Webseite programmieren


Gast
2005-08-02, 15:53:45
hy!

ich programmiere hobbymäßig an meiner kleinen homepage, php mit mysql halt. also nur so eine einfache navigation, und ein bisschen switchen und includen, bisschen was in die datenbank speichern.

"unterprogramme" schreibe ich bisher so, dass ich das in ein extra file auslagere und dann include. aber wie gehts vernünftig? weil so wird das (wenn ich es richtig verstanden habe), einfach zu einem großen php-file zusammengesetzt dass dann geparst wird.

Durcairion
2005-08-02, 20:54:32
Also ich schreibe soweit es geht alles in eine Datei und switche dann.

D.h.:

Wenn ich z.B. ein Gästebuch schreibe, gibt es nicht X beliebige Files wie gb_eintrag.php, gb_anzeigen.php usw.

Dann sieht die File nach dem System aus:

if($action == 'lesen')
{

PHP Code fürs anzeigen des GB's

}

if($action == 'add')
{

PHP Code fürs eintragen eines neuen Eintrages

}

usw.

Sprich alle Segemente für das Gästebuch befinden sich in einer PHP Datei.

Variablen wie z.B. MySQL Tabellennamen, PW usw speicher ich extern in einer mysql_connect.php wodurch es mir ermöglicht das GB auf jeglichen Webseiten binnen weniger Minuten einzubinden.

Hoffe das war deine Frage, falls nicht sorry :-)

MfG,
soucy

GloomY
2005-08-03, 05:38:41
Webseite "programmieren" -> ab ins Webdesign Forum

Gast
2005-08-03, 08:09:14
ich war mir unsicher, aber gut gloomy, passt hier auch.
soucy, oh, das ist schon mal was, danke :) aber wie "übergebe" ich jetzt die action bzw. wie sieht jetzt der code aus wenn du das gb aufrufen willst.

Evalley
2005-08-03, 11:33:31
Ich schätze mal er ruft die Datei auf und hängt die Variable action dran. Das heist um die Einträge zu lesen wird er dann folgendermaßen auf die Datei verlinken: gbook.php?action=lesen
Um einen Eintrag einzutragen sieht das dann vermutlich so aus:
gbook.php?action=add

Allerdings müsste dann noch ganz zu Anfang der gbook.php die Zeile:
$action=$_GET["action"];
Sonst würde das wohl nicht funktionieren.

ZapBee
2005-08-03, 11:59:24
Allerdings müsste dann noch ganz zu Anfang der gbook.php die Zeile:
$action=$_GET["action"];
Sonst würde das wohl nicht funktionieren.
Da gibts nette Funktionen, die dir automatisch alle Variablen auslesen. Für die GET-Variablen z.B.

if(isset($HTTP_GET_VARS)) {
reset($HTTP_GET_VARS);
foreach($HTTP_GET_VARS as $key=>$value) {
if(get_magic_quotes_gpc()) $$key=$value;
else{
if(is_array($value)) {array_walk($value,'arr_addsl'); $$key=$value;}
else $$key=addslashes($value);
}
}



diese Funktion am Anfang jeder Datei aufrufen und schon stehen dir die GET-Variablen zur Verfügung. Geht natürlich für POST, SESSION und COOKIE genauso

Zap

clm[k1]
2005-08-03, 12:10:10
Dann sieht die File nach dem System aus:

if($action == 'lesen')
{

PHP Code fürs anzeigen des GB's

}

if($action == 'add')
{

PHP Code fürs eintragen eines neuen Eintrages

}

usw.


Ich hoffe doch, du rufst an den stellen nur funktionen auf, falls es umfangreicherer Code sein sollte... oder schreibst du hier wirklich spagetti-code?

Ich frage nur, weil ich das schon öfters gesehen habe, das da einfach nur sämtlicher code einfach hingeschrieben wurde anstatt in funktionen ausgelagert zu werden.

Ich jedenfalls teile meine scripts so auf wie man das aus bspw. C gewöhnt ist: oben einen kleinen teil als "Main-funktion" und der eigentliche Programablauf wird in funktionen geschrieben.

Bspw:


// Includes
// ############
include_once("hastenichgesehen");
// ############

// Main
// #################

$make = htmlentities($_GET['make'], ENT_QUOTES);

if($make == "irgendwas") {
funktionNr1();
}
else {
funktionNr2($make);
}

// #################


function funktionNr1() {
// mache irgendwas
}

function funktionNr2() {
// mache was anderes
}




just my 2 cent
clm[k1]

Gast
2005-08-03, 12:46:35
mit diesem "include_once("hastenichgesehen");" includierst du eine andere datei, in der dann die funktionen stehen, die du dann einfach aus der "hauptdatei" aufrufen kannst?

clm[k1]
2005-08-03, 13:02:44
mit diesem "include_once("hastenichgesehen");" includierst du eine andere datei, in der dann die funktionen stehen, die du dann einfach aus der "hauptdatei" aufrufen kannst?

Korrekt!
Für funktionen die man in mehreren modulen (also mehreren php-scripten) braucht, kann man so in eine art toolbox schreiben.


clm[k1]

Gast
2005-08-03, 13:15:20
']Korrekt!
Für funktionen die man in mehreren modulen (also mehreren php-scripten) braucht, kann man so in eine art toolbox schreiben.
super :)
wie meinen? kann ich also nicht einfach in zwei verschiedene php-scripte das gleiche, dritet, php-script includieren? oder meinst du so eine funktions-sammlung, die man immer wieder mal gebrauchen kann?

Flipper
2005-08-03, 18:11:02
Da gibts nette Funktionen, die dir automatisch alle Variablen auslesen. Für die GET-Variablen z.B.
[...]
Zap
Dann kannst du auch gleich register_globals auf on stellen. Hat den selben (von mir unerwünschten, sicherheits-problematischen) Effekt, und geht einfacher.

@topic:
Für den Seitenaufbau gibt's ein paar ganz gute / gängige Lösungen:

Eine ist das index.php?page=x, und dann wird x inkludiert. Ich geb dafür ganz gerne x in einen mit .htaccess geschützten Ordner rein. Dort sind dann "news.inc", "forum.inc" etc. drinnen - inc für include. Bei dieser Lösung musst du aufpassen, dass niemand dann Sachen à la index.php?page=../password.txt aufrufen kann!

Dann gehts natürlich auch mit getrennten .php's, also index.php, news.php etc. - auch da verwende ich den lesegeschützten content-Ordner. Paranoid? Egal ;)

Funktionen lagere ich generell in eine functions.inc aus.
Auch bin ich ebenfalls davon abgegangen, zB ein guestbook in mehrere Dateien aufzuteilen, wie oben schon diskutiert wurde.

darph
2005-08-03, 18:19:54
Dann kannst du auch gleich register_globals auf on stellen. Hat den selben (von mir unerwünschten, sicherheits-problematischen) Effekt, und geht einfacher.
Ist aber ziemlich gefährlich.

Es hat seinen Grund, warum man eben nicht register_globals verwenden soll und auch nicht jede beliebige GET Variable einfach ummodeln sollte. Abgesehen davon erlauben das auch viele Hoster gar nicht.

Flipper
2005-08-03, 20:02:26
Er initialisiert ja mit der Funktion eh auch automatisch alle Variablen? OK, addslashes ist noch hinzugefügt.

clm[k1]
2005-08-03, 21:45:19
Funktionen lagere ich generell in eine functions.inc aus.

Das kann ziemlich gefährlich sein, wenn nicht eingestellt ist, das diese ebenfalls geparst werden, wenn die direkt aufgerufen werden.

Also entweder auf .php enden lassen, oder einstellen das dateien mit endung .inc ebenfalls durch den php-parser gehen.


clm[k1]

Flipper
2005-08-03, 22:41:59
die functions.inc ist ebenfalls im mit .htaccess geschützten Ordner drinnen. Aber zusätzlich einstellen, dass *.inc geparsed wird schadet nicht - bzw. ist gut :)

Gast
2005-10-03, 20:19:53
ok, gibts noch weiter tipps?
ich arbeite hobbymäßig an einem kleinen blog-system. ich hab jetzt im prinzip eine index.php, in der ein wenig code steht, und eine riesige funktionen.php-datei, in der alle benötigten funktionen stehen. aber irgendwie ist mir das alles zu unübersichtlich/zu wenig strukturiert. ich wüsst aber nicht wo ich mir was abschauen konnte, wordpress zum beispiel ist mir doch etwas zu komplex, ich habs mir mal angeschaut, in der aktuellen version.

MadMan2k
2005-10-03, 22:56:29
am Anfang:
function __autoload($className) {
require_once 'class/'.$className.'.php';
}

und dann alles ensprechend in Klassen gekapselt...

Tommes
2005-10-04, 00:46:44
Da gibts nette Funktionen, die dir automatisch alle Variablen auslesen. Für die GET-Variablen z.B.

if(isset($HTTP_GET_VARS)) {
reset($HTTP_GET_VARS);
foreach($HTTP_GET_VARS as $key=>$value) {
if(get_magic_quotes_gpc()) $$key=$value;
else{
if(is_array($value)) {array_walk($value,'arr_addsl'); $$key=$value;}
else $$key=addslashes($value);
}
}



diese Funktion am Anfang jeder Datei aufrufen und schon stehen dir die GET-Variablen zur Verfügung. Geht natürlich für POST, SESSION und COOKIE genauso

Zap
Erstens ist das keien Funktion ;) Und zweitens geht das leichter mit extract($_GET);

Tommes
2005-10-04, 00:48:43
Ist aber ziemlich gefährlich.

Es hat seinen Grund, warum man eben nicht register_globals verwenden soll und auch nicht jede beliebige GET Variable einfach ummodeln sollte. Abgesehen davon erlauben das auch viele Hoster gar nicht.
Außerdem und das ist er eigentlich Grund, könnte man so eine Seite die POST Werte erwarte, über die Adressleiste mit GET werten "füttern". Das kann natürlich zu sehr unschönen Sachen führen, wie man sich denken kann.

Gast
2005-10-08, 23:17:53
gut, das wär sicherheitsmäßig mal geklärt. was muss ich noch beachten? mysql_real_escape_string bei allen mysql-query-variablen, die vom user eingegeben werden? was noch?

MadMan2k
2005-10-08, 23:36:51
mysql_real_escape_string bei allen mysql-query-variablen, die vom user eingegeben werden?
sicher nciht verkehrt, aber addslashes ist ausreichend.