[PHP] switch array value

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb voor een error handler alle values en waardes in een array gezet. hiervoor wordt binnen index.php met $_GET['p'] bepaalt wat wordt geprint. hiervoor gebruik ik dus iets wat lijkt op
PHP:
1
2
3
4
5
6
<?
switch($_GET['p']) {
  case'home':
  break;
}
?>

dat werkt dus allemaal

hieronder staan dus alle waardes in een array, zo dus:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?
function calcPage ($page, $subpage) {
  switch($page) {
   /* -- knip -- */
    $errorDefinition = array (
    302 => "Redirect",
    400 => "Bad Request",
    401 => "Authorization Required",
    402 => "Payment Required",
    403 => "Forbidden",
    404 => "File Not Found",
    405 => "Method Not Allowed",
    406 => "Not Acceptable",
    407 => "Proxy Authentication Required",
    408 => "Request Time-out",
    409 => "Conflict",
    410 => "Gone",
    411 => "Length Required",
    412 => "Precondition Failed",
    413 => "Request Entity Too Large",
    414 => "Request-URI Too Large",
    415 => "Unsupported Media Type",
    500 => "Internal Server Error",
    501 => "Method Not Implemented",
    502 => "Bad Gateway",
    503 => "Service Temporarily Unavailable",
    504 => "Gateway Time-out",
    505 => "HTTP Version Not Supported"
    );

    foreach($errorDefinition as $errorid => $errorvalue) {
      case $errorid:
        $pagina = '
        <div id="infopagina">
          <h1>'.$errorid.'</h1>
          <p>'.$errorvalue.'</p>
        </div>
        ';
        break;
    }

?>

echter zover ik dit begrijp ie dus case $errorid APART van de switch waarbinnen de foreach nog staat. hoe krijg ik dit zodat deze het wel herkent?

Acties:
  • 0 Henk 'm!

Verwijderd

In een switch() blok mogen alleen case blokken staan. Je syntax klopt dus niet.

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Verwijderd schreef op zaterdag 01 april 2006 @ 17:30:
In een switch() blok mogen alleen case blokken staan. Je syntax klopt dus niet.
behalve dat is de code structuur ook vrij euh nutteloos..

waarom in godesnaam een case statement?

wat is er mis met zoiets:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
$errorDefinition = array (
    302 => "Redirect",
    400 => "Bad Request",
    401 => "Authorization Required",
    402 => "Payment Required",
    403 => "Forbidden",
    404 => "File Not Found",
    405 => "Method Not Allowed",
    406 => "Not Acceptable",
    407 => "Proxy Authentication Required",
    408 => "Request Time-out",
    409 => "Conflict",
    410 => "Gone",
    411 => "Length Required",
    412 => "Precondition Failed",
    413 => "Request Entity Too Large",
    414 => "Request-URI Too Large",
    415 => "Unsupported Media Type",
    500 => "Internal Server Error",
    501 => "Method Not Implemented",
    502 => "Bad Gateway",
    503 => "Service Temporarily Unavailable",
    504 => "Gateway Time-out",
    505 => "HTTP Version Not Supported"
);

foreach($errorDefinition as $errorid => $errorvalue) {
    if ($huidigepaginaheaderding == $errorid) {
        $pagina = '
        <div id="infopagina">
          <h1>'.$errorid.'</h1>
          <p>'.$errorvalue.'</p>
        </div>';
        $hebgehadvarblaat = true;
    }
}

if ($hebgehadvarblaat) {
    echo $pagina;
    exit;
}

//hier je normale code


trouwens denk ik dat de texten als 'Gateway Time-out' en 'page not found' enzo ook wel ergens op te vragen moeten zijn (heb het niet uitgezocht, maar dat lijkt me logisch)

[ Voor 59% gewijzigd door BasieP op 01-04-2006 17:38 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Die switch doet inderdaad in zijn geheel niks. :? Ik weet niet wat jij voor ogen hebt dat er moet gebeuren, maar zonder die hele switch doet je code gewoon netjes wat jij wil. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Of beter nog, zoiets:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$errorDefinition = array (
    302 => "Redirect",
    400 => "Bad Request",
    401 => "Authorization Required",
    402 => "Payment Required",
    403 => "Forbidden",
    404 => "File Not Found",
    405 => "Method Not Allowed",
    406 => "Not Acceptable",
    407 => "Proxy Authentication Required",
    408 => "Request Time-out",
    409 => "Conflict",
    410 => "Gone",
    411 => "Length Required",
    412 => "Precondition Failed",
    413 => "Request Entity Too Large",
    414 => "Request-URI Too Large",
    415 => "Unsupported Media Type",
    500 => "Internal Server Error",
    501 => "Method Not Implemented",
    502 => "Bad Gateway",
    503 => "Service Temporarily Unavailable",
    504 => "Gateway Time-out",
    505 => "HTTP Version Not Supported"
);

$pagina = '
        <div id="infopagina">
          <h1>'.$huidigepaginaheaderding.'</h1>
          <p>'.$errorDefinitions[$huidigepaginaheaderding].'</p>
        </div>';

Den ben je ook direct van die onnodige loop af :P

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Wolfboy schreef op zaterdag 01 april 2006 @ 17:38:
Of beter nog, zoiets:

Den ben je ook direct van die onnodige loop af :P
true :) stukken beter idd

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
zoals de /*-- knip -- */ al aangeeft staan er meerdere pagina's tussen (al de content staat dus binnen 1 file). ik wil niet include($_GET['p]) gebruiken want dan heb je nogal een overdreven groot risico op veiligheidslekken :P

bijvoorbeeld
PHP:
1
2
3
4
5
switch($page) {
  case 'home': 
  $pagina = 'home pagina etc.';
  break;
}

dat is waar het op slaat ;)

waar ik nu aan denk tho is de errorhandler laten gaan naar index.php?p=error&d=404 etc en dan
PHP:
1
2
3
4
5
case 'error':
  if($subPage staat in array (ofzo)) {
  $pagina = '<h1>'.$subPage.'</h1>
  <p>'.$errorDefinitions[$subPage].'</p>';
 }

alleen hoe check ik of die in de array staat,... foreach? :P

edit: in_array natuurlijk 8)7 ik ga ff kijken of het werkt, moment ;)

[ Voor 25% gewijzigd door Verwijderd op 01-04-2006 18:06 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
k laatste post voor deze thread dan :]
mocht het iemand verder interresseren (zoekfunctiegebruikers :> ), dit is hoe ik 'm heb opgelost:

die errorDefinition definitie staat BUITEN de switch{} maar binnen de function (dus net boven de switch definitie :] omdati k anders errors kreeg enzo dus mocht het blijkbaar niet :P.
in_array werkt blijkbaar niet door hoe de array is opgestelt, dus het is opgelost met deze code
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
    case 'error':
      foreach($errorDefinition as $errorid => $errorvalue) {
        if($errorid == $subpage) {
        $pagina = '
        <div id="infopagina">
          <h1>'.$errorid.'</h1>
          <p><strong>'.$errorvalue.'</strong><br />probeer terug te gaan naar de vorige pagina. mocht de error zich herhalen neem met ons <a href="?p=contact">contact</a> op.</p>
        </div>
        ';
        continue(2);
        }
      }
      break;

opzich kan er nog wel een else bij voor unknown error, maar zal hopelijk niet voorkomen :P

Acties:
  • 0 Henk 'm!

Verwijderd

in_array() werkt inderdaad niet voor associatieve arrays, daarvoor heb je array_key_exists() nodig.
http://nl3.php.net/manual/en/function.array-key-exists.php

Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Verwijderd schreef op zaterdag 01 april 2006 @ 18:33:
in_array() werkt inderdaad niet voor associatieve arrays, daarvoor heb je array_key_exists() nodig.
http://nl3.php.net/manual/en/function.array-key-exists.php
Er is nog een andere mogelijkheid (die bij mij de voorkeur heeft)

if(isset($array[$key]))

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

Verwijderd

Wolfboy schreef op zaterdag 01 april 2006 @ 18:41:
Er is nog een andere mogelijkheid (die bij mij de voorkeur heeft)

if(isset($array[$key]))
En die is vaak minder geschikt, want die returnt false als een key wel bestaat, maar de bijbehorende waarde null is.

Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Verwijderd schreef op zaterdag 01 april 2006 @ 19:34:
[...]

En die is vaak minder geschikt, want die returnt false als een key wel bestaat, maar de bijbehorende waarde null is.
Hmm dat wist ik niet :P
Dat probleem ben ik tot nu toe dan ook nog niet tegengekomen (anders had ik het wel gemerkt na een tijdje debuggen :+)

Maargoed, over het algemeen lijkt het me eerder een handig iets, als de waarde van het item null is dan zal het meestal toch niet van belang zijn, al is het wel een goed punt om op te letten.

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wolfboy schreef op zaterdag 01 april 2006 @ 20:49:
[...]
Hmm dat wist ik niet :P
Dat probleem ben ik tot nu toe dan ook nog niet tegengekomen (anders had ik het wel gemerkt na een tijdje debuggen :+)

Maargoed, over het algemeen lijkt het me eerder een handig iets, als de waarde van het item null is dan zal het meestal toch niet van belang zijn, al is het wel een goed punt om op te letten.
if(strlen($array[$key])>0) dan? :]

Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Probeer dat maar eens bij een key die _niet_ bestaat met error_reporting op 2047 (of 2048 als je php5 gebruikt)
Daar krijg je dus een mooie notice mee ;)

Blog [Stackoverflow] [LinkedIn]

Pagina: 1