Seite mit includes aufbauen?

2Pac

Erfahrenes Mitglied
Hallo,

ist es sinnvoll eine Seite komplett mit includierten Dateien aufzubauen?

Ich stelle mir diese Frage, da ich meine Seite so gestalten möchte, dass ich später auftretende Scriptfehler oder Erweiterungen kurz implementieren kann. Dann wäre es für mich einfacher, wenn ich z.B. die Loginausgabe in die Datei include_login.php in den Ordner includes auf meinen Server lege. So kann ich dann Userfunktionserweiterungen schnell nur in dieser Datei ändern und diese sind wirksam auf allen Unterseiten. Oder habe ich eine Sicherheitslücke übersehen oder gar einen Denkfehler im System?

Mir ist auch aufgefallen, dass die Variablen sich gegenseitig bekämpfen. Sprich ich kann in 2 Dateien nicht die gleichen Variablen nehmen z.B. für eine Ausgabe eines Datensatzes aus einer MySQL Datenbank die Variable $get_db_data. Denn dann kommt es zu fehlerhaften Ausgaben.

Stellt sich also die Frage wie gestalte ich ein include mehrerer Dateien richtig?

Mein System bisher am Beispiel der Seite Index.php:

Include Menü:
Code:
include("includes/include_menu");

Include Login:
Code:
include("includes/include_login");

Include Top3 User / Top 10 News / Seitenstats
Code:
include("includes/include_aktuelles");

Include Werbung (Bannerrotation):
Code:
include("includes/include_werbung");

Und zum Schluss natürlich mach ich mit switch / case eine Zuweisung per include des Contents. In dem Beispiel dann z.b.:

Include News:
Code:
include("includes/include_news");

Für jede Include Datei setze ich den Include meiner Config (sprich Connect zur DB) und Close die DB Verbindung am Ende der Datei wieder.

Wie gestalte ich das denn am übersichtlichsten, programmiertechnisch am sichersten und feinsten. Ich meine nicht die einfachste Lösung ist die beste. Sprich was wäre für das Beispiel die Beste?

Danke im Voraus für Hilfe.
2Pac
 
Für immer wäreden Anfragen hat sich die OOP (Obejekt Orentierte Programmierung) raus Kristaliesiert.

Daher ist am einfachsten du erstellst dir für deine Db Abfragen eine Klasse.Dann brauchste dich später nicht mehr ums schließen der db kümmern. Das übernihmt dann alles die Klasse.

Mfg Splasch
 
Ehrlich gesagt versteh ich das mit der Klasse rein logisch nicht. Kann mir das mal einer genau erklären an Hand eines Code Schnipsel Beispiels?
 
Hallo nochmal,

also ich hab mir die Links alle angeschaut, die ihr geschrieben habt. Aber ich muss ehrlich sagen ich raff den Sinn von Klassen nicht. Bzw. die Funktionsweise. Ich verstehe schon das man mit Klassen Quasi Funktionen aufrufen kann. Aber das sieht für mich wie chinesisch aus.

Beispiel:

Code:
<?php
/*
::::::::::::: Copyrights ::::::::::::::::::::::::::::::::::.
::::::    Codet by Denys Koch - 32657 Lemgo :::::::::::::::::.
::  Sintima ® Web Service Development                    ::
::  Sintima Germany Dmtirijus Fajeras - 19063 Schwerin   ::
::  - all rights reserved - alle Rechte vorbehalen -     ::.
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.
*/
class sql
{
//::::: variables :::::
    var $connection;
    var $query;
    var $result;
//::::: edit here the value : 1 = show errors on the site; 0 = show errors only in the source-code :::::
    var $show_errors = 1;

//::::: Konstructor :::::
    function sql($host, $user, $passwd, $db)
    {
        $this->connect($host, $user, $passwd, $db);
    }
//::::: Connect :::::
    function connect($host, $user, $passwd, $db)
    {
        @$this->connection = mysql_connect($host, $user, $passwd);
        if ($this->connection)
        {
            $this->sel_db($db);
        }
        else 
        {
            $this->make_error(2, "Can not connect the MySQL server!", mysql_errno(), mysql_error());
        }
    }
//::::: Select database :::::
    function sel_db($db)
    {
        if (@!mysql_select_db($db, $this->connection))
        {
            $this->make_error(2, "Can not select ".$db, mysql_errno($this->connection), mysql_error($this->connection));
        }
    }
//::::: query :::::
    function query($str, $get = 0)
    {
        if(@!$this->query = mysql_query($str, $this->connection))
        {
            $this->make_error(2, "Can not query: ".$str, mysql_errno($this->connection), mysql_error($this->connection));
        }
        else
        {
            if($get == 1)
            {
                return $this->query;
            }
        }
    }
//::::: fetch object :::::
    function fetch_obj($query = 0)
    {
        if ($query == 0)
        {
            if (@$this->result = mysql_fetch_object($this->query))
            {
                return $this->result;
            }
        }
        else
        {
            if (@$this->result = mysql_fetch_object($query))
            {
                return $this->result;
            }
        }
    }
    
//::::: num_rows ::::::
    function num_rows($query = 0)
    {
        if ($query == 0)
        {
            if (@$this->result = mysql_num_rows($this->query))
            {
                return $this->result;
            }
        }
        else
        {
            if (@$this->result = mysql_num_rows($query))
            {
                return $this->result;
            }
        }
    }
//::::: Error function :::::
    function make_error($mode, $desc, $errno, $error)
    {
        /*::::: error modes :
            1 = Light Error
            2 = Critical Error
        :::::*/
        switch($mode)
        {
            case 1:
                $mod = "Light Error :"; break;
            case 2:
                $mod = "Critical Error :"; break;
            default:
                $mod = "Error :"; break;
        }
        if ($this->show_errors == 1)
        {
            $err_msg = "<span style=\"color: #FF0000; font-weight: bold; font-size: 14pt;\">".$mod."</span><br />";
            $err_msg .= "Description: <b>".$desc."</b><br />";
            $err_msg .= "MySQL error nummer: <b>".$errno."</b><br />";
            $err_msg .= "MySQL error description: <b>".$error."</b><br />";
            $err_msg .= "Time: <b>".date("d.m.y :: H:i:s")."</b<br />";
            $err_msg .= "<b>Please contact the Administrator! :: Bitte wenden Sie sich an den Administrator!<br /><a href=\"mailto: admin@sintima.de".$admin_mail."\">.:Administrator:.</a></b><br />";
            die ($err_msg);
        }
        elseif ($this->show_errors == 0)
        {
            $err_msg = $mod."\n";
            $err_msg .= "Description: ".$desc."\n";
            $err_msg .= "MySQL error nummer: ".$errno."\n";
            $err_msg .= "MySQL error description: ".$error."\n";
            $err_msg .= "Time: ".date("d.m.y :: H:i:s")."\n";
            $err_msg .= "Please contact the Administrator! :: Bitte wenden Sie sich an den Administrator! admin@sintima.de \n";
            die ("<!--".$err_msg."//-->");
        }
    }
}
?>

Die habe ich hier im Forum gefunden mit der Suchfunktion. Aber die Funktionsweise und die Implementierung verstehe ich nicht. Wenn ich die Klassen-Datei jetzt include. Was muss ich dann genauch machen? Definiere ich dann quasi nur noch den SELECT / UPDATE / DELTE Befehl oder was? Ich hoffe mein Problem wird verständlich? Denn ich versteh es irgendwie nicht =)

Bitte helft mir :D
mfg
 
Ich geb dir mal ein Beispiel für einen Klassen aufruf. Allerdings von einer anderen db klasse die oben gepostet muß du schon selbst analysieren.

PHP:
$db = new db($fehler);  // Klasse db wird inlasiert als $db
$Sqlstr="SELECT * From tabele";
$db->query($Sqlstr);   // Sql query wird an die db klasse übergeben

while ($db->next_record()) {  // So lange daten kommen von der Klasse 
$tabelenspalte=$db->r("Spalte1");  // Werte aus der abfrage von der table mit dem spaltennamen

}

Hier sieht nun auch den Vorteil von so einer Db klasse die Db Abfragen werden mit wenig Programmzeilen abgefragt und ausgeben.
Den Rest erledigt die klasse (Also das öffnen,schliesen unsw.)

Je nach Klasse gibst andere Namen für die aufrufende function aber functionen sollten dir eh bekannt sein. Was sich ändert das nun mit dem erzeugten objekt $db mit dem verweis -> funktionnamen aufgerufen wird.

$db->query($Sqlstr); bedeuted Objekt -> functionname(Parameter übergabe)

Mfg Splasch
 
Zuletzt bearbeitet:
Rein includierte Systeme gehen...
Hab ich ja auch so ^^
Du musst dir nur, wenn du einen Login-Skript für mehrere Seiten verwenden möchtest überlegen, dass du Die Daten für jede Sit ein ne andere DB schreibst und dementsprechend immer die richtige Db aufrufst... Wenn dann die angesprochenen Tabellen immer gleich benannt sind, hast du es geschafft ;)
 
Was sollte da der Sinn sein? Es geht nicht um verschiedene Domains! Es geht um verschiedene Unterseiten. Ich will halt nur wenn ich was verändere das nicht auf jeder Unterseite neu ändern! Und ich will auch keine Index.php die 4 MB hat Oo

@ splasch danke für deine Erläuterung!

Was genau ist denn der Inhalt von $fehler ? Sprich wo und wie deklariere ich die Variable?
 
Zurück