Webdesign in Siegen

Frage zu einer Strukturalternative

Fragen zum Thema PHP können hier gestellt werden

Moderator: Basti

Frage zu einer Strukturalternative

Beitragvon Sonny am 27.01.2006, 15:21

Hallo Leute,

Ich benutze auf einer meiner HPs einen Simplen i-frame für den Inhalt unter dem Banner und unter dem Menü weil es dort viele Unterkategorien bzw. Links zu weiteren Inhalten gibt.

Bei den anderen Sachen, wo es nur einen Inhalt gibt benutze ich bei Links: index.php?section=news <- Diese Möglichkeit. Dafür mache ich dann einen Case in meiner Switchschleife, die sich in der Datei Inhalt.php befindet <- und dieser Case includiert dann die Datei, in der sich der gewünschte Inhalt befindet. Bei diesem Beispiel wären das die News!

Ok soviel zu meinem System! Ich möchte jetzt aber doch gerne auf den i-frame verzichten und suche nach einer anderen Alternative!

Im php.de Forum konnte mir keiner so richtig helfen. Die beste Antwort war noch die:


index.php?action=xyz

PHP:

require(menu.php);
if(
file_exists($_GET['action'])
){
require($_GET['action'].'.php');
}


Bisschen anders sieht es noch aus, aber das ist so ungefähr das Prinzip.


Heißt das ich muss die Links dann so benennen wie die Dateien heißen?
A programmer is just a tool which converts caffeine into code.
Sonny
Mitglied
 
Beiträge: 214
Registriert: 29.04.2005

Beitragvon Dac-XP am 27.01.2006, 15:41

ich mache das so ähnlich...

Code: Alles auswählen
if(file_exists($_GET['page']))
  {
    include $_GET['Page'];
  }


Hier muss der Dateiname per URL übergeben werden (index.php?page=seite.php)
Bild
Benutzeravatar
Dac-XP
Mitglied
 
Beiträge: 1882
Registriert: 23.06.2005
Wohnort: Mönchengladbach / NRW

Beitragvon Sonny am 27.01.2006, 15:51

Stimmt so ist es einfacher: .php gleich beim Link zu übergeben.

Das klappt wirklich super und ich muss zukünftig nicht mehr mit Switch - Case rumfummeln!

Danke für deine Hilfe!

mfg

Sonny
A programmer is just a tool which converts caffeine into code.
Sonny
Mitglied
 
Beiträge: 214
Registriert: 29.04.2005

Beitragvon Dac-XP am 27.01.2006, 16:00

kein Problem!
Ich würde das sogar noch erweitern!

Code: Alles auswählen
if(!empty($_GET['page']
  {
    if(file_exists($_GET['page']))
      {
        include $_GET['page'];
      }
    else
      {
        include "failure.htm";
      }
  }
else
  {
    if(file_exists("main.php"))
      {
        include "main.php";
      }
    else
      {
        include "failure.htm";
      }
  }


So wird erst geguckt, ob überhaupt eine Seite übergeben wurde. Wenn nicht, dann soll standartmäßig die "main.php" eingebunden, fals diese existiert. Wenn nicht, dann wird die Fehlermeldung in "failure.htm" ausgegeben. Wenn eine Seite übergeben wurde, wird die entweder eingebunden, oder wenn diese nicht existiert, wird wieder die Fehlermeldung ausgegeben.
Zuletzt geändert von Dac-XP am 27.01.2006, 22:02, insgesamt 1-mal geändert.
Bild
Benutzeravatar
Dac-XP
Mitglied
 
Beiträge: 1882
Registriert: 23.06.2005
Wohnort: Mönchengladbach / NRW

Beitragvon Manuel am 27.01.2006, 16:36

Nun ja, den kompletten unteren Teil würde ich unbedingt weg lassen.

Geh doch einfach davon aus, dass eine main.php (oder besser index.php, denn so sollte man sie nennen) vorhanden ist. Sonst hast du jedes Mal mehrere if-Abfragen. Es mag sein, dass das bisher wenig kostet, aber vor allem bei etwas größeren Seiten sollte man dringenst auf den Quellcode achten. Auch würde ich nicht prüfen, ob page leer ist. Einfach auslesen und wenn nichts drin steht, dann wird auch nichts übergeben ;)

Lg,
Manuel ;-]
Benutzeravatar
Manuel
Site Admin
 
Beiträge: 8680
Registriert: 10.12.2004
Wohnort: Asbach

Beitragvon Dac-XP am 27.01.2006, 20:12

Diese If-Abfragen werden doch nur ein einziges mal pro Seitenaufruf ausgeführt... Die stehen nämlich eigentlich in der index.php und dann wird halt jede Seite geladen, wenn diese vorhanden ist. Wo soll das kompliziert sein?

Und die Abfrage, ob die übergebene Variable leer ist habe ich schonmal weggelassen, dann hat das nicht mehr funktioniert. Ist zwar schon was her, aber seitdem gehe ich auf Nummer sicher.
Bild
Benutzeravatar
Dac-XP
Mitglied
 
Beiträge: 1882
Registriert: 23.06.2005
Wohnort: Mönchengladbach / NRW

Beitragvon Manuel am 27.01.2006, 21:04

Hm okay, Informatiker nennen das Aufwand. Also O(n). Dieser mag zwar nicht exponentiell sein, denn das sind die schlimmeren Aufwandsklassen, aber du hast bei jedem Seitenaufruf diese Abfragen. Sagen wir mal man hat 1000 Besucher am Tag, dann hat man schon 2000 if-Abfragen, die eigentlich keinen wirklichen Sinn hatten, außer für die User, die es irgendwie geschafft haben etwas über POST zu übergeben was es nicht gibt. Gleiches gilt für GET. Klar kann man die Variablen dort abändern, aber welchen Sinn sollte das machen? Dann würde ich lieber mit HTACCESS eine Fehlerseite definieren, die erscheint sobald man eine ungültige Seite betritt. ;)

Lg,
Manuel ;-]
Benutzeravatar
Manuel
Site Admin
 
Beiträge: 8680
Registriert: 10.12.2004
Wohnort: Asbach

Beitragvon Dac-XP am 27.01.2006, 22:01

Es tut mir leid! Ich habe mal wider den dümmsten PHP-Fehler begangen, den ich meiner Meinung nach machen kann. Ich habe ganz einfach POST und GET verwechselt.
Bild
Benutzeravatar
Dac-XP
Mitglied
 
Beiträge: 1882
Registriert: 23.06.2005
Wohnort: Mönchengladbach / NRW

Beitragvon Manuel am 27.01.2006, 22:08

Stimmt, darüber hab ich gar nicht wirklich nachgedacht... *g*

Dafür weiss ich nie, ob ich ['variable'] oder [variable] schreiben muss...weil bei $_GET[] macht man es mit ' und bei mysqlspalte[] ohne, oder? ;)

Lg,
Manuel ;-]
Benutzeravatar
Manuel
Site Admin
 
Beiträge: 8680
Registriert: 10.12.2004
Wohnort: Asbach

Beitragvon Dac-XP am 27.01.2006, 22:12

ich versteh nicht was du meinst mit mysqlspalte[]...

Ich lese die Daten einer Tabelle wie folgt aus:

Code: Alles auswählen
$query = "SELECT new_id FROM dxp_news WHERE new_date <= '$date'";
$erg = mysql_query($query)

while($obj = mysql_fetch_object($erg))
  {
    echo "$obj->new_id";
  }


Das ist meine Methode, und die funktioniert bisher auch ganz gut, bis auf dass die ein paar zentel Millisekunden langsamer ist als "mysql_fetch_row".
Bild
Benutzeravatar
Dac-XP
Mitglied
 
Beiträge: 1882
Registriert: 23.06.2005
Wohnort: Mönchengladbach / NRW

Beitragvon Manuel am 28.01.2006, 01:50

Nun gut, wie man das macht ist denke ich Geschmacksache. Vielleicht weiss Rene ja, was da wirklich der effizientere Weg ist.

Ich mache es immer auf diese Weise:
Code: Alles auswählen
$daten = mysql_fetch_array($result);
$name = $daten[name];
Benutzeravatar
Manuel
Site Admin
 
Beiträge: 8680
Registriert: 10.12.2004
Wohnort: Asbach

Beitragvon TakaBo am 28.01.2006, 14:12

Eine kleine Verbesserung:

Da es einfacher ist, ein Attribut über dessen Namen aus einem Tupel zu lesen und man dadurch Fehler vermeiden kann, sollte man schreiben:
Code: Alles auswählen
$daten = mysql_fetch_assoc($result);
$name = $daten['name'];


Der Vorteil ist u.a. dass man in der Reihenfolge der Attribute (Tabellenspalten) nicht festgelegt sein muss. Oder man stelle sich den Fall vor, man hat eine Tabelle festgelegt mit:

Code: Alles auswählen
index  : name         : typ
0      : ID           : int8
1      : kundennummer : varchar(10)
2      : email        : varchar(40)
3      : passwd       : varchar (30)


Im späteren Verlauf klatscht man sich an den Kopf und denkt: Die Daten sind doch redundant. Der Kunde kann sich doch auch über seine eMail authentifizieren anstatt über eine abstrakte Kundennummer. Nun löscht man die Kundennummer wieder. Hätte man über einen Index zugegriffen, würden jetzt möglicherweise größere Refakturierungsarbeiten anstehen, da alle benutzten Indexe auf falsche Attribute zeigen würden. Mit einem Assoziativen Array ist sowas jedoch kein Problem.

Code: Alles auswählen
$daten = mysql_fetch_assoc($result);
$email = $daten['email'];


anstatt

Code: Alles auswählen
$email_idx =2;
$daten = mysql_fetch_array($result);
$email_str = $daten[$email_idx];


Gruss Chris
Wir leben nicht um zu glauben, sondern um zu lernen.
Benutzeravatar
TakaBo
Mitglied
 
Beiträge: 176
Registriert: 25.04.2005
Wohnort: Hamburg


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste