/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Switch spørgsmål
Fra : haris


Dato : 16-02-09 20:31

Hey.

Jeg er igang med at bygge min menu og indholdet med switch, og
med Birgers store hjælp, er jeg noget lidt langt.
Mit spørgsmål er:

Hvordan sætter jeg endnu en switch ind, med eget default fil.
Altså her er det, som jeg har rettet, hvor jeg har sat 1 ekstra
switch ind.

<?php
$menu = $_GET[ 'site'];
$a_cmd = $_GET[ 'cmd'];
$a_ui = $_GET[ 'ui'];
$n_id = $_GET[ 'id'];
switch ( $menu) {
   case 'fors' :
   switch ( $a_cmd) {
   case 'opret' : $inc_file = 'create.php'; break;
   case 'rediger' : $inc_file = 'edit.php'; break;
   case 'delete' : $inc_file = 'delete.php'; break;
   case 'slet_alt' : $inc_file = 'delete_all.php'; break;
   default : $inc_file = 'indhold.php';
}
case 'mov' :
switch ( $ui) {
case 'indsaet_movie' : $inc_file = 'insert_movie.php'; break;
case 'rediger_movie' : $inc_file = 'edit_movie.php'; break;
case 'slet_movie' : $inc_file = 'delete_movie.php'; break;
case 'slet_movies' : $inc_file = 'delete_allmovies.php'; break;
default : $inc_file = 'movies.php';
}
break;
case 'mov' : $inc_file = 'movies.php'; break;
case 'guid' : $inc_file = 'guides.php'; break;
case 'bestil_hp' : $inc_file = 'bestil_hp.php'; break;
case 'bestil_movie' : $inc_file = 'bestil_movie.php'; break;
case 'dl' : $inc_file = 'download.php'; break;
case 'cont' : $inc_file = 'contact.php'; break;
case 'admin' : $inc_file = 'admin.php'; break;
default : $inc_file = 'indhold.php';
}
?>
Den ekstra ting jeg har sat ind, er:
case 'mov' :
switch ( $ui) {
case 'indsaet_movie' : $inc_file = 'insert_movie.php'; break;
case 'rediger_movie' : $inc_file = 'edit_movie.php'; break;
case 'slet_movie' : $inc_file = 'delete_movie.php'; break;
case 'slet_movies' : $inc_file = 'delete_allmovies.php'; break;
default : $inc_file = 'movies.php';
}

Før jeg satte det ind, virkede alt udemærket, men der kommer
fejl. Måske er det forkert gjort?

Hvis i bliver nød til at hjemmesiden, siger til.

//Haris.

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Johan Holst Nielsen (16-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 16-02-09 20:39

haris wrote:
> Hey.
>
> Jeg er igang med at bygge min menu og indholdet med switch, og
> med Birgers store hjælp, er jeg noget lidt langt.
> Mit spørgsmål er:
>
> Hvordan sætter jeg endnu en switch ind, med eget default fil.
> Altså her er det, som jeg har rettet, hvor jeg har sat 1 ekstra
> switch ind.
>
> <?php
> $menu = $_GET[ 'site'];
> $a_cmd = $_GET[ 'cmd'];
> $a_ui = $_GET[ 'ui'];
....
> switch ( $ui) {
....

Mon den ikke skal hedde switch($a_ui) { ?

En switch i en switch er ikke smukt (synes jeg.)
For din egen skyld ville jeg gøre koden mere simpel... og overskueligt -
simpelthen ved at lave en enten den yderste switch - eller inderste
switch om til en if,elseif,else sætning (men selvfølgelig op til dig selv).

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

haris (18-02-2009)
Kommentar
Fra : haris


Dato : 18-02-09 18:35

Ingen der har noget til det?
Er det muligt på den måde, eller skal det kodes om?

//Haris.

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Johan Holst Nielsen (18-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 18-02-09 20:29

haris wrote:
> Ingen der har noget til det?
> Er det muligt på den måde, eller skal det kodes om?

Øh - jeg svarede dig 8 minutter efter du stillede spørgsmålet.

<http://groups.google.com/group/dk.edb.internet.webdesign.serverside.php/browse_thread/thread/227756342be63e4f?pli=1>

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Johan Holst Nielsen (18-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 18-02-09 20:30

haris wrote:
> Ingen der har noget til det?
> Er det muligt på den måde, eller skal det kodes om?

Eller tjek:
http://tinyurl.com/dgthgh

Der har jeg allerede svaret...

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Dan Storm (18-02-2009)
Kommentar
Fra : Dan Storm


Dato : 18-02-09 20:38

haris skrev:
> Ingen der har noget til det?

Johan kom da med en kommentar på din kode? Hvad er der i vejen med det?

> Er det muligt på den måde, eller skal det kodes om?

Johan foreslog faktisk at gøre koden mere overskuelig - det ville måske
hjælpe dig.

Min tanke har været:

<?php

class Menu
{
   
   private $menu;
   private $a_ui;
   private $incFiles;   
   private $defaultIncFile;
   
   public function __construct($menu, $a_ui)
   {
      $this->menu = $menu;   
      $this->a_ui = $a_ui;
      $this->incFiles = $this->_getIncFilesArray();
      $this->defaultIncFile = "indhold.php";
   }
   
   
   public function getIncludeFile()
   {
      
      if(!isset($this->incFiles[$this->menu]))
         return $this->defaultIncFile;
      
      if(!is_array($this->incFiles[$this->menu]))
         return $this->incFiles[$this->menu];
         
      if(!isset($this->incFiles[$this->menu][$this->a_ui]))
         return $this->incFiles[$this->menu]["default"];
      else
         return $this->incFiles[$this->menu][$this->a_ui];
      
      /* I tilfælde af alt fejler, return default filen */
      return $this->defaultIncFile;
   }
      
   private function _getIncFilesArray()
   {
   
      $incFiles = array();
      
      /* Alle filer der inkluderes grundet $menu variablen */
      $incFiles["opret"] = "create.php";
      $incFiles["rediger"] = "edit.php";
      $incFiles["delete"] = "delete.php";
      $incFiles["slet_alt"] = "delete_all.php";
      $incFiles["guid"] = "guides.php";
      $incFiles["bestil_hp"] = "bestil_hp.php";
      $incFiles["bestil_movie"] = "bestil_movie.php";
      $incFiles["dl"] = "download.php";
      $incFiles["cont"] = "contact.php";
      $incFiles["admin"] = "admin.php";
      
      /* Alle filer der inkluderes grundet $menu=mov variablen */
      $incFiles["mov"]["indsaet_movie"] = "insert_movie.php";
      $incFiles["mov"]["rediger_movie"] = "edit_movie.php";
      $incFiles["mov"]["slet_movie"] = "delete_movie.php";
      $incFiles["mov"]["slet_movies"] = "delete_allmovies.php";
      $incFiles["mov"]["default"] = "movies.php";
         
      
      return $incFiles;
      
   }
   
   
}

$menu = $_GET["site"];
$a_cmd = $_GET["cmd"];
$a_ui = $_GET["ui"];
$n_id = $_GET["id"];

$m = new Menu($menu, $a_ui);
$inc_file = $m->getIncludeFile();
   
?>

Det kan sikkert laves smartere, men denne er ret nem og hurtig at udvide.



--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Johan Holst Nielsen (18-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 18-02-09 20:57

Dan Storm wrote:
> $menu = $_GET["site"];
> $a_cmd = $_GET["cmd"];
> $a_ui = $_GET["ui"];
> $n_id = $_GET["id"];

Da cmd, ui ikke altid ser ud til at være repræsenteret ville jeg nok
skifte det ud med noget ala

$a_ui = isset($_GET['ui']) ? $_GET['ui'] : '';

osv... da vi kan opleve nogle uheldige situationer ved strict php
reporting (selvom det nok ikke er tilfældet ved nogle udbydere?).

> Det kan sikkert laves smartere, men denne er ret nem og hurtig at udvide.

Generelt tror jeg det er "overkill" at lave en class baseret løsning,
for en "nybegynder", som jeg opfatter haris som (ja, vi starter alle et
sted - det er ingen kritik af haris). Men selvfølgelig - hvis han
forstår koden er alt jo godt :)

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Dan Storm (18-02-2009)
Kommentar
Fra : Dan Storm


Dato : 18-02-09 21:07

Johan Holst Nielsen skrev:
> $a_ui = isset($_GET['ui']) ? $_GET['ui'] : '';
>
> osv... da vi kan opleve nogle uheldige situationer ved strict php
> reporting (selvom det nok ikke er tilfældet ved nogle udbydere?).

Det har du selvfølgelig ret i.
Men som du selv er inde på, så er det nok de færreste der benytter sig
af det.

> Generelt tror jeg det er "overkill" at lave en class baseret løsning,
> for en "nybegynder", som jeg opfatter haris som (ja, vi starter alle et
> sted - det er ingen kritik af haris). Men selvfølgelig - hvis han
> forstår koden er alt jo godt :)


Ja, den er nok ikke helt baseret på et begynder niveau :)
Jeg satsede på at gøre den fleksibel og nem at udvide, men umiddelbart
er det jo ikke opnået hvis ikke brugeren forstår løsningsmodellen :/


--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

haris (18-02-2009)
Kommentar
Fra : haris


Dato : 18-02-09 22:00

Johan skrev:
> > Generelt tror jeg det er "overkill" at lave en class baseret løsning,
> > for en "nybegynder", som jeg opfatter haris som (ja, vi starter alle et
> > sted - det er ingen kritik af haris). Men selvfølgelig - hvis han
> > forstår koden er alt jo godt :)

Ja, jeg er lidt halvny i php, men jeg forstår godt modellen.

Dan storm skrev:
>
> Ja, den er nok ikke helt baseret på et begynder niveau :)
> Jeg satsede på at gøre den fleksibel og nem at udvide, men umiddelbart
> er det jo ikke opnået hvis ikke brugeren forstår løsningsmodellen :/

Som jeg sagde tidligere: tak for hjælpen. Jeg skal se om det er noget jeg kan
bruge.

Haris.


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

haris (18-02-2009)
Kommentar
Fra : haris


Dato : 18-02-09 21:56

Dan storm skrev:
>
> Johan kom da med en kommentar på din kode? Hvad er der i vejen med det?

Jo, den er helt fin og tak for det Johan. Dog er jeg lidt ny indenfor den
del under "switches" og i det hele taget lidt halvny til php.

> Johan foreslog faktisk at gøre koden mere overskuelig - det ville måske
> hjælpe dig.
>
> Min tanke har været:
>
> <?php
>
> class Menu
> {
>    
>    private $menu;
>    private $a_ui;
>    private $incFiles;   
>    private $defaultIncFile;
>    
>    public function __construct($menu, $a_ui)
>    {
>       $this->menu = $menu;   
>       $this->a_ui = $a_ui;
>       $this->incFiles = $this->_getIncFilesArray();
>       $this->defaultIncFile = "indhold.php";
>    }
>    
>    
>    public function getIncludeFile()
>    {
>       
>       if(!isset($this->incFiles[$this->menu]))
>          return $this->defaultIncFile;
>       
>       if(!is_array($this->incFiles[$this->menu]))
>          return $this->incFiles[$this->menu];
>          
>       if(!isset($this->incFiles[$this->menu][$this->a_ui]))
>          return $this->incFiles[$this->menu]["default"];
>       else
>          return $this->incFiles[$this->menu][$this->a_ui];
>       
>       /* I tilfælde af alt fejler, return default filen */
>       return $this->defaultIncFile;
>    }
>       
>    private function _getIncFilesArray()
>    {
>    
>       $incFiles = array();
>       
>       /* Alle filer der inkluderes grundet $menu variablen */
>       $incFiles["opret"] = "create.php";
>       $incFiles["rediger"] = "edit.php";
>       $incFiles["delete"] = "delete.php";
>       $incFiles["slet_alt"] = "delete_all.php";
>       $incFiles["guid"] = "guides.php";
>       $incFiles["bestil_hp"] = "bestil_hp.php";
>       $incFiles["bestil_movie"] = "bestil_movie.php";
>       $incFiles["dl"] = "download.php";
>       $incFiles["cont"] = "contact.php";
>       $incFiles["admin"] = "admin.php";
>       
>       /* Alle filer der inkluderes grundet $menu=mov variablen */
>       $incFiles["mov"]["indsaet_movie"] = "insert_movie.php";
>       $incFiles["mov"]["rediger_movie"] = "edit_movie.php";
>       $incFiles["mov"]["slet_movie"] = "delete_movie.php";
>       $incFiles["mov"]["slet_movies"] = "delete_allmovies.php";
>       $incFiles["mov"]["default"] = "movies.php";
>          
>       
>       return $incFiles;
>       
>    }
>    
>    
> }
>
> $menu = $_GET["site"];
> $a_cmd = $_GET["cmd"];
> $a_ui = $_GET["ui"];
> $n_id = $_GET["id"];
>
> $m = new Menu($menu, $a_ui);
> $inc_file = $m->getIncludeFile();
>    
> ?>
>
> Det kan sikkert laves smartere, men denne er ret nem og hurtig at
udvide.
>
>
Kan godt se hvad du mener, og skal se om det er en bedre løsning. Vil det
sige, at den måde jeg byggede det op på var helt umulig eller?

Tak for det Dan. Det var en stor hjælp.

Haris.

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Johan Holst Nielsen (18-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 18-02-09 22:03

haris wrote:
> Dan storm skrev:
>>
>> Johan kom da med en kommentar på din kode? Hvad er der i vejen med det?
>
> Jo, den er helt fin og tak for det Johan. Dog er jeg lidt ny indenfor den
> del under "switches" og i det hele taget lidt halvny til php.

Uden at lyde som en sur gammel kælling, så spørg i stedet ind til hvad
det er du ikke forstår. Jeg troede du havde løst problemet, siden du
ikke svarede yderligere på mit indlæg.

Det er svært at hjælpe, når man skal gætte sig til du ikke forstod mit svar.

>> $m = new Menu($menu, $a_ui);
>> $inc_file = $m->getIncludeFile();
>>    
>> Det kan sikkert laves smartere, men denne er ret nem og hurtig at
> udvide.
>>
>>
> Kan godt se hvad du mener, og skal se om det er en bedre løsning. Vil det

Sikker? Det er rimelig afgørende. Generelt er jeg i mod løsninger, hvor
man blot for en stump kode og så sætter spørgeren det ind og så virker
det hele igen. (Ja - jeg falder selv i den fælde, at sende hele
kodestykker - men er ikke det bedste) - for så er jeg i tvivl om du rent
faktisk har lært af dit problem :) Målet med det her, er jo at du ikke
skal komme tilbage og spørge om det samme spørgsmål igen :)

> sige, at den måde jeg byggede det op på var helt umulig eller?

Nej - på ingen måde. Vil tro de fleste (i hvert fald mindre) websites
benytter en løsning ala din... At bygge det op i class'es så
struktureret som Dan viser, er noget man meget sjældent ser i
private/mindre websites - dog relativt tit i større websites.

Dit problem var - for det virkede - højest sandsynligt blot at du havde
hentet $_GET['ui'] ned i $a_ui - men forsøgte at køre en switch på $ui.
Det ville *kun* virke hvis register_globals (en konfigurationsparameter
der default er off nu om dage) var on (dvs. at du kan kalde GET og POST
parametre uden at bruge $_GET eller $_POST array'et.).

Ellers ville din kode virke.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

haris (19-02-2009)
Kommentar
Fra : haris


Dato : 19-02-09 16:15

Johan skrev:

> Uden at lyde som en sur gammel kælling, så spørg i stedet ind til hvad
> det er du ikke forstår. Jeg troede du havde løst problemet, siden du
> ikke svarede yderligere på mit indlæg.

Mit spørgsmål var, om hvorfor min switch ikke helt virkede. Måske formulerede
jeg mig ikke ordenligt.

> Sikker? Det er rimelig afgørende. Generelt er jeg i mod løsninger, hvor
> man blot for en stump kode og så sætter spørgeren det ind og så virker
> det hele igen. (Ja - jeg falder selv i den fælde, at sende hele
> kodestykker - men er ikke det bedste) - for så er jeg i tvivl om du rent
> faktisk har lært af dit problem :) Målet med det her, er jo at du ikke
> skal komme tilbage og spørge om det samme spørgsmål igen :)

Som jeg tidligere sagde, er jeg ny indenfor switch. Nej, jeg spørger ikke
efter en kode for bare at kunne blive færdig. Jeg kunne ikke finde fejlen i
min switch, og derfor skrev jeg.

> Dit problem var - for det virkede - højest sandsynligt blot at du havde
> hentet $_GET['ui'] ned i $a_ui - men forsøgte at køre en switch på $ui.
> Det ville *kun* virke hvis register_globals (en konfigurationsparameter
> der default er off nu om dage) var on (dvs. at du kan kalde GET og POST
> parametre uden at bruge $_GET eller $_POST array'et.).

Det var det var problemet, og det er nu løst (en fejl af min). Tak for hjælpen
og undskyld for misforståelsen.

Haris.

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Johan Holst Nielsen (19-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 19-02-09 16:45

haris wrote:
> Johan skrev:
>
>> Uden at lyde som en sur gammel kælling, så spørg i stedet ind til hvad
>> det er du ikke forstår. Jeg troede du havde løst problemet, siden du
>> ikke svarede yderligere på mit indlæg.
>
> Mit spørgsmål var, om hvorfor min switch ikke helt virkede. Måske formulerede
> jeg mig ikke ordenligt.

Svarede jeg faktisk på aller øverste linje jeg skrev...

Henviste til din linje

switch($ui) {
som skulle ændres til
switch($a_ui) {

- og så kom jeg blot med lidt velmende råd derefter.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste