php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 13-04-2009, 00:11
Seggl-hoch-drei
 Registrierter Benutzer
Links : Onlinestatus : Seggl-hoch-drei ist offline
Registriert seit: Sep 2007
Beiträge: 312
Seggl-hoch-drei ist zur Zeit noch ein unbeschriebenes Blatt
Standard Abbildung von URLs in der Datenbank

Hallo,

ich möchte Zur Zeit ein Menü erstellen, das im Adminbereich verwaltet werden kann. Dazu würde ich gerne auf eine MySQL-Datenbank zurückgreifen.

Zur Info: Ich verwende mein eigenes MVC-Framework. Es gibt Controller und Actions. Man kann umstellen, ob die Links mod_rewrite-mäßig ausgegeben werden, oder einfach normal mit ? und &.

Und genau hier beginnt das Problem.
Es soll nämlich die Möglichkeit geben, externe Links ins Menü einzutragen. Wenn es das nicht gäbe, würde ich einfach 2 Spalten in meiner Datenbank anlegen: Controller, Action.
Dann könnte meine Anwendung je nach mod_rewrite on/off entscheiden, wie die Links ausgegeben werden.

Aber wie lege ich dann die externen Links ab? DIe haben ja zum Teil ganz andere Formate.

Und was mache ich, wenn es mal interne Links gibt, die nicht nur so (Controller/Action.html bzw. ?controller=controller&action=action) aufgebaut sind, sondern noch weitere Parameter hinten dran haben?
Forum/Show.html?id=20

Achja, das ist kein Crossposting. (bei phpforum.de gibt es einen ähnlichen Thread, der geht aber mehr um die Logik der Vererbung im Menü)
Hier möchte ich gute Möglichkeiten finden, die URLs in einer Datenbank zu verwalten.

MfG
Seggl
Mit Zitat antworten
  #2 (permalink)  
Alt 13-04-2009, 00:25
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Varchar fertig.
Mit Zitat antworten
  #3 (permalink)  
Alt 13-04-2009, 00:26
Seggl-hoch-drei
 Registrierter Benutzer
Links : Onlinestatus : Seggl-hoch-drei ist offline
Registriert seit: Sep 2007
Beiträge: 312
Seggl-hoch-drei ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Klar, das wäre die einfachste Lösung.
Aber was ist, wenn ich jetzt alle Links so eintrage, dass sie mod_rewrite vorraussetzen?

Später will ich aber mod_rewrite deaktivieren, aus welchem grund auch immer.

Dann müsste ich alle Links umschreiben.

gibt es keine bessere Möglichkeit?
Mit Zitat antworten
  #4 (permalink)  
Alt 13-04-2009, 01:39
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

table menu_item
id
controller
action

table menu_item_params
menu_item_id
key
value


Der Link ?controller=foo&action=bar&id=1 wird durch die folgenden Datensätze repräsentiert:

menu_item( 1, 'foo', 'bar )
menu_item_params( 1, 'id', '1' )

Für externe URLs hast du eine weitere Tabelle, die über ein Feld url verfügt. Fertig. Das ist die von dir mündlich erstellte Struktur einmal festgehalten.
Mit Zitat antworten
  #5 (permalink)  
Alt 13-04-2009, 13:43
Seggl-hoch-drei
 Registrierter Benutzer
Links : Onlinestatus : Seggl-hoch-drei ist offline
Registriert seit: Sep 2007
Beiträge: 312
Seggl-hoch-drei ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ok, danke

Klingt nach komplizierten Abfragen.

Würdet ihr das wirklich so lösen?
Kann doch nicht sein, dass ich der erste bin, der das Problem hat

Seggl-hoch-drei
Mit Zitat antworten
  #6 (permalink)  
Alt 13-04-2009, 16:58
Peacie
 Registrierter Benutzer
Links : Onlinestatus : Peacie ist offline
Registriert seit: Nov 2003
Beiträge: 341
Peacie ist zur Zeit noch ein unbeschriebenes Blatt
Peacie eine Nachricht über ICQ schicken Peacie eine Nachricht über AIM schicken Peacie eine Nachricht über Yahoo! schicken
Standard

ich denke, das problem ist eher nicht in der db zu suchen, sondern in dem modul, welches die links wieder entgegen nimmt.

Forum/Show.html?id=20
ist eh ein halbherziges rewrite

ein link in der form
Forum/Show.html/id=20,foo=2,foo2=x

wenn der link auch genau so in der db steht, kann er ja unbearbeitet durchs rewrite laufen
wenn deine struktur es vorsieht das der erste parameter immer der controller und der 2. die action ist, lässt sich das doch recht einfach auflösen
explode / auf den ganzen string, explode , auf die ergebnisse des ersten
und ein explode = auf den 2.


ich benutze diese art von rewrite in mehreren projekten und fahre damit ganz gut

so in etwa lässt sich das umwandeln
PHP-Code:
$uri="Forum/Show.html/id=20,foo=2,foo2=x";
$uri_arr=explode("/",$uri);

while (list (
$uri_key$uri_val) = each ($uri_arr))  

    if(
$uri_val<>"")
    {
        
$uri_arr_new[$uri_key]=explode(".",$uri_arr[$uri_key]);
        
$uri_arr[$uri_key]=$uri_arr_new[$uri_key][0];
    }
    
$temp_arr=explode(",",$uri_arr[$uri_key]);
    while (list (
$key$val) = each ($temp_arr))  
    {
        if (
stristr($val,"="))
        {
            
$temp_arr2=explode("=",$val);
            
$params[$temp_arr2[0]]=$temp_arr2[1];
        }
    } 
}
$params['controller']=$uri_arr[0];
$params['action']=$uri_arr[1];
$get_uri="?";
while (list (
$key$val) = each ($params))  
{
    
$get_uri.="&".$key."=".$val;

EDIT:
Ich hab das ganze nochmal verändert:
$params['controller']=$uri_arr[0];
$params['action']=$uri_arr[1];
müssen ans ende, damit auch uris ohne weitere angaben gelten

__________________
Mibau Datendesign - Online Ferienwelt

Geändert von Peacie (13-04-2009 um 17:36 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 13-04-2009, 17:11
Peacie
 Registrierter Benutzer
Links : Onlinestatus : Peacie ist offline
Registriert seit: Nov 2003
Beiträge: 341
Peacie ist zur Zeit noch ein unbeschriebenes Blatt
Peacie eine Nachricht über ICQ schicken Peacie eine Nachricht über AIM schicken Peacie eine Nachricht über Yahoo! schicken
Standard

eventuell noch zur erklärung des codes.

ich definiere die actions bzw controller in meinen projekten nicht fest.

ich habe schematas in arrayform vorliegen, die die stellen definieren.

PHP-Code:
$uri_schema[0]=["Controller"];
$uri_schema[1]=["Action"]; 
in deinem beispiel
__________________
Mibau Datendesign - Online Ferienwelt
Mit Zitat antworten
  #8 (permalink)  
Alt 13-04-2009, 23:51
Seggl-hoch-drei
 Registrierter Benutzer
Links : Onlinestatus : Seggl-hoch-drei ist offline
Registriert seit: Sep 2007
Beiträge: 312
Seggl-hoch-drei ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke!

Soll ich also die Links in der Form

Controller/Action.html?weitere=parameter&und=so

ablegen und dann bei Bedarf umwandeln?
Wäre halt rechenintensiv, aber eine andere Lösung fällt mir auch nicht ein.

Simon
Mit Zitat antworten
  #9 (permalink)  
Alt 14-04-2009, 00:00
Peacie
 Registrierter Benutzer
Links : Onlinestatus : Peacie ist offline
Registriert seit: Nov 2003
Beiträge: 341
Peacie ist zur Zeit noch ein unbeschriebenes Blatt
Peacie eine Nachricht über ICQ schicken Peacie eine Nachricht über AIM schicken Peacie eine Nachricht über Yahoo! schicken
Standard

Controller/Action.html?weitere=parameter&und=so

das wäre ja eine halb rewrite und halb get methode

ich habe auch nur einen ansatz aus meiner engine genommen und schnell mal zusammengecodet.

eigentlich gehts nur um das prinzip:
Controller/Action/weitere=parameter,und=so

könnte man halt nach meiner methode recht fix wieder umbauen in einen get parameter link.

rechenintensiv ist das ganze bei ein paar links sicher nicht. und wenn du mal 1000 links in mod rewrite hast und dich entschliessen solltest auf get umzuändern, kannst du mit der gleichen methode ja alle links in der datenbank damit aktualisieren.

jede methode kann man ja umdrehen

das einzige was mich halt stört ist, das du in deinen beispielen beides kombinierst.
entweder rewrite oder alles per get.
ist halt meine meinung

ich benutze in meinen projekten die das system benutzen nirgendwo auch nur einen get parameter

/nachtrag

die form, die du in der datenbank abspeicherst sollte die am meissten verwendete sein um die rechenzeit so kurz wie möglich zu halten.
__________________
Mibau Datendesign - Online Ferienwelt

Geändert von Peacie (14-04-2009 um 00:04 Uhr)
Mit Zitat antworten
  #10 (permalink)  
Alt 14-04-2009, 06:12
eRoZion
 Registrierter Benutzer
Links : Onlinestatus : eRoZion ist offline
Registriert seit: Jan 2003
Ort: Magdeburg(S-A)
Beiträge: 150
eRoZion ist zur Zeit noch ein unbeschriebenes Blatt
eRoZion eine Nachricht über ICQ schicken
Standard

Ich würde die URIs so anlegen:
Code:
/controller/action/param1/foo/param2/bar/
Dann kann man alles ganz einfach mit explode zerlegen und weiterverarbeiten. Oder man wendet Reguläre Ausdrücke auf die Zeichekette an. Oder oder ...

Warum verwendet man nicht einfach das Zend Framework?
__________________
Internet-Explorer User und stolz drauf! :P
Mit Zitat antworten
  #11 (permalink)  
Alt 14-04-2009, 09:56
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Wie die Links jetzt im Rewrite aussehen ist doch Wumpe. Tatsache ist einfach, das Seggl jetzt die Möglichkeit hat, die Links in die Komponenten zu zerlegen und in die Datenbank zu packen, oder die Links als reine URL abzulegen. Ersteres ist ganz normal normalisiert, zweiteres ist sicherlich schneller. Ist halt die Frage, was Seggl damit so vor hat. Sollen nämlich einzelne Linkkomponenten ausgetauscht werden, ohne Rücksicht auf die Rewrite-Methode, ist die normalisierte Form vorzuziehen. Werden die Links einmal eingepflegt und danach nicht wieder angefasst, ist die zweite Methode sicher sinniger.
Mit Zitat antworten
  #12 (permalink)  
Alt 14-04-2009, 09:59
Peacie
 Registrierter Benutzer
Links : Onlinestatus : Peacie ist offline
Registriert seit: Nov 2003
Beiträge: 341
Peacie ist zur Zeit noch ein unbeschriebenes Blatt
Peacie eine Nachricht über ICQ schicken Peacie eine Nachricht über AIM schicken Peacie eine Nachricht über Yahoo! schicken
Standard

wie ich bereits sagte, wie man die links speichert ist völlig latte.
die auflösung ist wichtig.

meine form benutze ich halt um eine trennug zwischen controllern und parametern zu haben.

Zitat:
Warum verwendet man nicht einfach das Zend Framework?
weil man nicht muss
__________________
Mibau Datendesign - Online Ferienwelt
Mit Zitat antworten
  #13 (permalink)  
Alt 15-04-2009, 00:58
Seggl-hoch-drei
 Registrierter Benutzer
Links : Onlinestatus : Seggl-hoch-drei ist offline
Registriert seit: Sep 2007
Beiträge: 312
Seggl-hoch-drei ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Weil Zend zu überladen ist.
Und ich hasse es, wenn man mich ständig davon abbringen will, mein eigenes FW zu programmiere. So lernt man nunmal am allermeisten über MVC und alles, was dazu gehört.

-----
Ich hätte noch ne Idee (danke an Creator)

Wie wäre es, wenn ich die Tabelle so aufbaue?

link_id | controller | action | params

Bei Params lade ich einfach ein serialisiertes Array rein.
Da meine Link-Generator sowieso so arbeitet:

PHP-Code:
FW_Tools::getInternalURL("controller""action", array("more" => "params""und" => "so weiter")) 
Da könnte ich ja das
PHP-Code:
array("more" => "params""und" => "so weiter")) 
Serialisieren.

Was haltet ihr davon?
Mit Zitat antworten
  #14 (permalink)  
Alt 15-04-2009, 01:01
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Was haltet ihr davon?
Nichts, das ist nämlich voll Banane! Das spricht gegen jede vernünftige Normalisierung. Dann lieber direkt den Link als Zeichenkette.
Mit Zitat antworten
  #15 (permalink)  
Alt 15-04-2009, 01:04
Peacie
 Registrierter Benutzer
Links : Onlinestatus : Peacie ist offline
Registriert seit: Nov 2003
Beiträge: 341
Peacie ist zur Zeit noch ein unbeschriebenes Blatt
Peacie eine Nachricht über ICQ schicken Peacie eine Nachricht über AIM schicken Peacie eine Nachricht über Yahoo! schicken
Standard

/agree PHP-Desaster

sobald du mal auf die idee kommen solltest einen zweiten controller oder eine subaction zu nutzen, hampelst du die irgendwie in die parameter.
klare trennung zwischen steuerung und parametern, aber nicht soviel zerhäckseln
__________________
Mibau Datendesign - Online Ferienwelt
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 04:28 Uhr.