[PHP] Global troubles

Pagina: 1
Acties:

Onderwerpen


  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ik heb net gelezen dat $_GET etc gebruikt dienen te worden in nieuwe versies van php voor het maken van scripts.

Het heeft iets met globals etc te maken?

Nou heb ik in mij CMS op de bovenste regel van de index file die alles opbouwt dit staan:

PHP:
1
2
$submenu=$_GET['submenu']; 
$menu=$_GET['menu'];


En ik kijk vervolgens of dit in de URL staat om daar een actie op te ondernemen, namelijk een menu item te laten zien of een submenu item.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (!empty($submenu)) 
{ 

// submenu pagina ophalen

} else if (!empty($menu)) { 

// menu pagina ophalen

} else { 

//frontpage tonen als er nix in de url staat

}


Dit werkt op een server waar het nu draait prima alleen op mijn nieuwe test server krijg ik deze melding op alle plekken waar ik variabelen gebruik die met de eerste 2 regels van mijn script te maken hebben deze dus:
PHP:
1
2
$submenu=$_GET['submenu']; 
$menu=$_GET['menu'];


De melding is de volgende:

Undefined index: menu
Undefined index: submenu

Komt dit doordat ik de eerste 2 regels code verkeerd heb ??

Verwijderd

Ik denk dat je error_reporting(E_ALL); aanstaat.
Als je dat weg doet moet het normaal wel werken.

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
hmm ok zal daar eens naar kijken, als er trouwens:
PHP:
1
2
3
4
<?
$submenu=isset($_GET['submenu']); 
$menu=isset($_GET['menu']);
?>

van maak houden de troubles ook op..

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:05

crisp

Devver

Pixelated

Verwijderd schreef op 25 december 2003 @ 13:32:
Ik denk dat je error_reporting(E_ALL); aanstaat.
Als je dat weg doet moet het normaal wel werken.
Dat is symptoom bestrijding en verre van netjes. Als je het netjes wilt doen gebruik je zoiets:

PHP:
1
$submenu = isset($_GET['submenu') ? $_GET['submenu'] : '';

Intentionally left blank


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
Waarom gebruik je niet gewoon $_GET['submenu'] in plaats van een kopietje hiervan?

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Hoe bedoel je dat? Dat doe ik ook, maar daar onstaan de fouten door.

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
Het lijkt er nu op dat je de var $_GET['submenu'] wilt gaan kopiëren en die verder in je script als $submenu wilt gaan gebruiken terwijl dit helemaal niet nodig is. Zeker als je bijvoorbeeld de variable in een functie wilt gaan gebruiken, dan is het fijner dat het een global is.

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ik heb de code 1 keer bovenaan mijn pagina staan, zodat ik kan kijken of er een menu of submenu item opgevraagt wordt, zo niet dan laat ie de frontpage zien.

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
PHP:
1
2
3
4
5
if(isset($_GET['submenu'])){
    showsubmenu();
}else{
    showfrontpage();
}

Daar is die $submenu toch helemaal niet nodig? In de functie submenu weet je namelijk al dat de $_GET['submenu'] bestaat.

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Je bedoelt dat dit stukkie:
PHP:
1
2
3
4
<? 
$submenu=isset($_GET['submenu']); 
$menu=isset($_GET['menu']); 
?> 

ook wel weg kan ?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:05

crisp

Devver

Pixelated

soms wil je voor de duidelijkheid en onderhoudbaarheid maar op 1 plek je query-parameters uitvragen en in de rest van je script alleen met eigen variabelen werken; dan is zo'n script ook makkelijker aan te passen voor oudere PHP versies...

Intentionally left blank


Verwijderd

ViNyL schreef op 25 december 2003 @ 13:48:
Je bedoelt dat dit stukkie:
PHP:
1
2
3
4
<? 
$submenu=isset($_GET['submenu']); 
$menu=isset($_GET['menu']); 
?> 

ook wel weg kan ?
Ja, kan weg. Als je in de rest van het script gewoon $_GET['bla'] gebruikt, dan héb je de waarden toch al.

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Dit is wel opgelost het enige wat overblijft als melding is ook een:

undefined index: titel

Ik gebruik namelijk maar een pagina om alle variables die ik opvraag in weer te geven

Zo staat bijvoorbeeld in de layout
code:
1
 <h1><?php echo "$pagtitel"; ?><?php echo "$titel"; ?></h1>


Als er een pagina of subpagina wordt weergeven gebruikt het de variabele $pagtitel

Wordt de frontpage weergegeven dan $titel.
Ik krijg nu dus die melding omdat iedere keer slechts een van de 2 in gebruik is. Makkelijkste oplossing zou zijn om van beide $titel of $pagtitel te maken. Maar hoe zou je dit anders op kunnen lossen?

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
crisp schreef op 25 december 2003 @ 13:49:soms wil je voor de duidelijkheid en onderhoudbaarheid maar op 1 plek je query-parameters uitvragen en in de rest van je script alleen met eigen variabelen werken; dan is zo'n script ook makkelijker aan te passen voor oudere PHP versies...
Als je een script compitabel wilt maken voor oudere versies dan is dit inderdaad wel een goed idee, maar of dat tegenwoordig nog nodig is betwijfel ik. Alleen in hele speciale gevallen kun je de $_GET en $_POST array's niet gebruiken. Persoonlijk zou ik niet gebruik maken van een host waar dat niet mogelijk is.
ViNyL schreef op 25 december 2003 @ 13:55:Dit is wel opgelost het enige wat overblijft als melding is ook een:
undefined index: titel
Ik gebruik namelijk maar een pagina om alle variables die ik opvraag in weer te geven

Zo staat bijvoorbeeld in de layout
code:
1
 <h1><?php echo "$pagtitel"; ?><?php echo "$titel"; ?></h1>
Volgens mij ben jij goed bezig met verschillende layers in je scripts!
Als je in je business layer eens dit plaatst:
PHP:
1
$pageheader=(isset($_GET['page'])) ? 'pagtitel:'.$_GET['page'] : 'algemene titel';

Door de algemene naam pageheader kun je hierin vanalles plaatsen. In je layout krijg je dus:
PHP:
1
 <h1><?php echo $pageheader; ?></h1>


Met de [ php ] tags ipv de [ code ] tags krijg je mooiere kleurtjes 8)

[ Voor 53% gewijzigd door djluc op 25-12-2003 14:04 ]

Pagina: 1