[PHP] Include wordt meerdere keren uitgevoerd*

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben voor een vriend van mij een website aan het maken in php.

Ik heb header.php een footer.php

Daarnaast heb ik dan een main.php en nog een paar pagina's.

via
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
switch ($_GET['p']) {
   case 'index':
      include ('main.php');
   case 'music':
      include ('music.php'); 
      break;
   case 'links':
      include ('links.php');
      break;
   case 'informatie':
      include ('informatie.php');
      break;
   case 'about':
      include ('about.php'); 
      break;    
}
?>

roep ik dan elke pagina apart aan

het vreemde is nu dat de voorpagina gewoon goed is. precies zoals hij moet maar als je dan bv naar de pagina music gaat je de main pagina nog een keertje onderaan de site te zien krijgt.

de site is www.maydayproductions.nl/francois/index.php

Acties:
  • 0 Henk 'm!

  • Gadgets
  • Registratie: Juni 2006
  • Laatst online: 19-09 23:03
Debuggen, je eerste main knalt er door heen, je hebt geen break staan!! 8)

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

1. lekkere titel, verzin voortaan een beter beschrijvende titel ;)

2. Waar hoort mijn topic? -> Programming dus ;)

3. [code=php][/] ;)

4. Je snapt zelf dat we hierdoor eigenlijk niks weten, zitten er cross-references in de diverse PHP's, kan je het probleem isoleren, weet je het verschil tussen http://nl2.php.net/include-once en http://nl2.php.net/include?

5. Debuggen

[ Voor 10% gewijzigd door BtM909 op 19-03-2008 15:37 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
zag het maar ook met die break erbij heb ik het probleem
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
switch ($_GET['p']) {
   case 'index':
      include ('main.php');
      break;
   case 'music':
      include ('music.php'); 
      break;
   case 'links':
      include ('links.php');
      break;
   case 'informatie':
      include ('informatie.php');
      break;
   case 'about':
      include ('about.php'); 
      break; 
    
}

Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 21:30

Sebazzz

3dp

Klopt, en zet een 'default:' voor de index.

Check ook even je XHTML:
XML:
1
<a id="lala_gif" http://85.147.168.97:8010/listen.pls">

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • Arethusa
  • Registratie: December 2003
  • Laatst online: 19-09 15:38

Arethusa

Niet die server

Op regel 3 omtrent $timeout$ gaat het ook mis volgens IE7.

I've been mad for fucking years, absolutely years, been over the edge for yonks.
Vinyl: Discogs


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Arethusa schreef op woensdag 19 maart 2008 @ 15:42:
Op regel 3 omtrent $timeout$ gaat het ook mis volgens IE7.
dat mag volgens mij niets te doen hebben dat hij de pagina meerdere malen laat zien. Als ik

code:
1
2
3
4
   default:
      include ('main.php');
      break;
}


erbij zet dan gaat zelfs de index pagina in de stress

weird.

Acties:
  • 0 Henk 'm!

  • Arethusa
  • Registratie: December 2003
  • Laatst online: 19-09 15:38

Arethusa

Niet die server

Dat weet ik ;) Ik wilde je alleen even meedelen dat daar ook een foutje zit.

[ Voor 70% gewijzigd door Arethusa op 19-03-2008 15:48 ]

I've been mad for fucking years, absolutely years, been over the edge for yonks.
Vinyl: Discogs


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
:) tnx :D

Acties:
  • 0 Henk 'm!

  • AaroN
  • Registratie: Februari 2001
  • Laatst online: 16-08-2023

AaroN

JayGTeam (213177)

default is altijd de laatste optie he, dus je hoeft geen break te doen daar.

JayGTeam (213177)


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
AaroN schreef op woensdag 19 maart 2008 @ 15:49:
default is altijd de laatste optie he, dus je hoeft geen break te doen daar.
schiet mij maar lek :)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
switch ($_GET['p']) {
   case 'index':
      include ('main.php');
      break;
   case 'music':
      include ('music.php'); 
      break;
   case 'links':
      include ('links.php');
      break;
   case 'informatie':
      include ('informatie.php');
      break;
   case 'about':
      include ('about.php'); 
      break;
   default:
      include ('main.php');    
    
}
?>


geeft dubbele pagina's nu, ook op de voorpagina. als ik default weghaal is de voorpagina weer goed.

Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
misschien moet je ietsiepietsie meer code posten, want dit is bijna hetzelfde als:
ik krijg bij de waarde van $a een waarde van 12, maar moet 13 zijn:
code:
1
2
3
4
5
6
if ($jaap == $joop) {
     $b = 45;
}

print "a=" . $a;
print "b=" . $b;


m.a.w. hier kunnen we weinig mee...

[ Voor 7% gewijzigd door P.O. Box op 19-03-2008 15:53 ]


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op woensdag 19 maart 2008 @ 15:36:
zag het maar ook met die break erbij heb ik het probleem
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
switch ($_GET['p']) {
   case 'index':
      include ('main.php');
      break;
   case 'music':
      include ('music.php'); 
      break;
   case 'links':
      include ('links.php');
      break;
   case 'informatie':
      include ('informatie.php');
      break;
   case 'about':
      include ('about.php'); 
      break; 
    
}
Dan zit kennelijk het probleem niet in 'deze' switch case.

Voor de rest is het koffiedik kijken.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
zal eens de boel opnieuw gaan opzetten. zoek mij wezeloos zo.

Acties:
  • 0 Henk 'm!

  • SinergyX
  • Registratie: November 2001
  • Laatst online: 20:50

SinergyX

____(>^^(>0o)>____

Denk eerder dat je bij de footer moet gaan kijken, klopt het ook dat er diverse malen <body> </body> tags in de code zitten? :X

Bouw het anders eerst helemaal op zonder al die extra zut, koppelingen en advertenties. Dan klaar, dan pas content gaan invoegen.

[ Voor 34% gewijzigd door SinergyX op 19-03-2008 15:57 ]

Nog 1 keertje.. het is SinergyX, niet SynergyX
Im as excited to be here as a 42 gnome warlock who rolled on a green pair of cloth boots but was given a epic staff of uber awsome noob pwning by accident.


Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 21:26
Dit lijkt me tussen haakjes iets mooier:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
switch ($_GET['p']) {
   case 'index':
      include ('main.php');
      break;
   case 'music':
      include ('music.php'); 
      break;
   case 'links':
      include ('links.php');
      break;
   case 'informatie':
         include ('informatie.php');
        break;
   case 'about':
      include ('about.php'); 
      break; 
   default:
      header( 'HTTP/1.0 404 Not Found' );
      include( '404.php' );
      break;
}

Anders als er een dood linkje ergens staat, wordt het èn door de zoekmachine geïndexeerd èn snapt die bezoeker maar niet waarom die telkens op de index komt.

En als je echt niet kan vinden waar het zit, kan je ook nog van alle includes include_once kunnen maken.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

doeternietoe schreef op woensdag 19 maart 2008 @ 16:01:
Dit lijkt me tussen haakjes iets mooier:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
switch ($_GET['p']) {
   case 'index':
      include ('main.php');
      break;
   case 'music':
      include ('music.php'); 
      break;
   case 'links':
      include ('links.php');
      break;
   case 'informatie':
         include ('informatie.php');
        break;
   case 'about':
      include ('about.php'); 
      break; 
   default:
      header( 'HTTP/1.0 404 Not Found' );
      include( '404.php' );
      break;
}

Anders als er een dood linkje ergens staat, wordt het èn door de zoekmachine geïndexeerd èn snapt die bezoeker maar niet waarom die telkens op de index komt.

En als je echt niet kan vinden waar het zit, kan je ook nog van alle includes include_once kunnen maken.
Include_once gaat niet werken. Aangezien hij op de music pagina ook de main pagina include.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 21:26
LuCarD schreef op woensdag 19 maart 2008 @ 16:03:
[...]


Include_once gaat niet werken. Aangezien hij op de music pagina ook de main pagina include.
Tja, volgens mij kunnen we ook niet zo goed ruiken wat erop andere pagina's gebeurd. :)

Maar de TS zou ik het meest willen aanraden om z'n structuur eens wat te herzien. Je moet überhaubt niet tegen dit probleem aanlopen...

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

LuCarD schreef op woensdag 19 maart 2008 @ 16:03:
Include_once gaat niet werken. Aangezien hij op de music pagina ook de main pagina include.
Jawel hoor, want die include in de switch wordt niet uitgevoerd als de juiste case niet wordt bereikt.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb de fout al gevonden :D eikel die ik ben. in de index.php had ik ook de main.php ge-include :D

ik had dus niet
code:
1
2
<?php include("header.php"); ?>
<?php include("footer.php"); ?>


maar
code:
1
2
3
<?php include("header.php"); ?>
<?php include("main.php"); ?>
<?php include("footer.php"); ?>


gedaan. lekker snugger

[ Voor 54% gewijzigd door Verwijderd op 19-03-2008 17:45 ]


Acties:
  • 0 Henk 'm!

  • DutchCommando
  • Registratie: November 2000
  • Laatst online: 20:36
Sebazzz schreef op woensdag 19 maart 2008 @ 15:37:
Klopt, en zet een 'default:' voor de index.
Als een waarde bekend is is het best practice om deze ook te specificeren. Anders verlies je een stukje documentatie. Immers, weet jij als je over een half jaar terug kijkt op die code nog dat default eigenlijk de case voor 'index' is? Ook raak je een mogelijkheid kwijt voor een stukje fout detectie (default kan in dit geval gebruikt worden voor fouten).

Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Als je nu eens de bestandnaam dezelfde waarde geeft (voor .php) als de waarde die je gebruikt voor _GET['p']

PHP:
1
2
3
$valid_options = ('index','music','links','informatie','main');
$inc = (in_array($_GET['p'],$valid_options)) ? $_GET['p'] : 'main' ;
include($inc.'php');

Dan ben je een stuk sneller klaar en makkelijk uitbreidbaar als steeds een case toevoegen.

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

Verwijderd

Sowieso een best practice:

Gebruik altijd require_once, tenzij iets ofwel mág misgaan, of iets meerdere keren mág worden geïnclude. Er is geen enkele reden om de functie include te gebruiken als bovenstaande niet zo is.
mocean schreef op woensdag 19 maart 2008 @ 20:39:
Als je nu eens de bestandnaam dezelfde waarde geeft (voor .php) als de waarde die je gebruikt voor _GET['p']

PHP:
1
2
3
$valid_options = ('index','music','links','informatie','main');
$inc = (in_array($_GET['p'],$valid_options)) ? $_GET['p'] : 'main' ;
include($inc.'php');

Dan ben je een stuk sneller klaar en makkelijk uitbreidbaar als steeds een case toevoegen.
Of bijvoorbeeld:
PHP:
1
2
3
4
5
6
if ( array_key_exists ( 'p', $_GET )
   && preg_match ( '~^[a-z]+([a-z-][a-z]+)*$~', $_GET['p'] )
   && is_file ( $file = './includes/' . $_GET['p'] . '.php' )
) {
   require_once ( $file );
}

Hoef je niet steeds je bestand aan te passen, maar kun je gewoon nieuwe scripts in die directory mikken. Hoe je het exact doet is niet boeiend. Dat je het veilig en gemakkelijk maakt wél.

[ Voor 65% gewijzigd door Verwijderd op 19-03-2008 20:47 ]


Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 21:26
Verwijderd schreef op woensdag 19 maart 2008 @ 20:41:
Sowieso een best practice:

Gebruik altijd require_once, tenzij iets ofwel mág misgaan, of iets meerdere keren mág worden geïnclude. Er is geen enkele reden om de functie include te gebruiken als bovenstaande niet zo is.
Om eerlijk te zijn lijkt me nog beter: Zorg dat include_once nooit echt nodig is. De meeste constructies waarbij (onbedoeld) hetzelfde bestand twee keer wordt geïnclude, zijn niet moeders mooiste.
Pagina: 1