Geef variable later een waarde

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Thomas de Roo

Thomas de Roo

30/10/2010 17:23:06
Quote Anchor link
Al mijn bestanden worden bij gebruik in index.php geincludeerd.
Voor de include staat dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
//Set pagetitle
$pagetitle = "Taartjes, koekjes weet ik veel";
//There is the header!
theme_header();
?>


In de functie theme_header(); wordt
'<title>'.$pagetitle.'</title>';
naar het scherm geschreven.

Hoe zou ik deze title later nog kunnen veranderen, zonder javascript, want nu gebruik ik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
echo '<script language="javascript">
document.title = "'
.$boardtitle.'";
</script>'
;
?>
 
PHP hulp

PHP hulp

05/11/2024 16:33:34
 
Kasper Heyndrickx

Kasper Heyndrickx

30/10/2010 17:30:18
Quote Anchor link
http://php.net/manual/en/language.functions.php

Zoals hier staat misschien?
Note that a function that calls a variable by reference CANNOT be used recursively, it will generate a CGI error (at least on my windows platform).
Thus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$foo
= 0;
function
bar(&$foo){
    $foo++;
    echo $foo."\n";
    if($foo < 10)
        bar($foo);
}

?>

Will NOT work.
Instead, you should just use global variables.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$foo
= 0;
function
bar(){
    global $foo;
    $foo++;
    echo $foo."\n";
    if($foo < 10)
        bar($foo);
}

?>

This, of course, assuming that you need to use $foo in other functions or parts of code. Otherwise you can simply pass the variable regulary and there should be no problems.

Of iets dergelijks, zie de website

mvg Kasper
Gewijzigd op 30/10/2010 17:31:04 door Kasper Heyndrickx
 
Joren de Wit

Joren de Wit

30/10/2010 17:31:11
Quote Anchor link
Door eerst alle PHP logica uit te voeren en dan pas de HTML naar de browser te sturen. Dus met andere woorden, door je theme_header() op een andere plaats in je script aan te roepen...
 

30/10/2010 17:32:00
Quote Anchor link
Template engine maken.
Eerst voor je alle logica uit. Dus data uit de db trekken e.d.
Dan pas stop je het in een pagina.
 
Thomas de Roo

Thomas de Roo

30/10/2010 17:32:56
Quote Anchor link
En zou die plaats voor
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
ob_flush();
?>

kunnen zijn?
 
Joren de Wit

Joren de Wit

30/10/2010 17:35:37
Quote Anchor link
Waarom gebruik je output buffering als ik vragen mag. Ik hoop niet dat je dat doet om 'headers already sent' foutmeldingen te voorkomen?

Als je dat wel doet, ben je niet juist bezig. Die foutmeldingen worden namelijk veroorzaakt doordat de volgorde in je script niet klopt. Je output dan waarschijnlijk al HTML terwijl er nog PHP logica uitgevoerd moet worden waarin een header gewijzigd wordt. Kortom, zorg dat je scripts goed in elkaar zitten: eerst alle PHP logica en dan pas output genereren.
 
Thomas de Roo

Thomas de Roo

30/10/2010 17:44:17
Quote Anchor link
En zou ik in het geval van de header fouten ook van Smarty gebruik kunnen maken?
 

30/10/2010 17:45:15
Quote Anchor link
Thomas de Roo op 30/10/2010 17:44:17:
En zou ik in het geval van de header fouten ook van Smarty gebruik kunnen maken?


Dan moet je nog steeds zorgen dat je geen output hebt naar de browser.
 
Joren de Wit

Joren de Wit

30/10/2010 17:46:14
Quote Anchor link
De header fouten hebben niets met smarty te maken, maar puur met de fout dat jij output verstuurt voordat je een functie als header() of session_start() aanroept. Het gebruik van smarty lost deze fouten echt niet zomaar op.

Uiteraard is het gebruik van een template engine wel een aanrader om je output te verzorgen. Het geeft je een grotere mate van flexibiliteit.
Gewijzigd op 30/10/2010 17:46:40 door Joren de Wit
 
Thomas de Roo

Thomas de Roo

30/10/2010 17:53:10
Quote Anchor link
Oke, maar hoe scheid ik de headers zodat ze voor de output komen, op sommige gevallen kan ik niet anders :'(
 
Joren de Wit

Joren de Wit

30/10/2010 17:58:52
Quote Anchor link
Hoezo kan je niet anders? In plaats van de output naar de browser te sturen kun je deze altijd tijdelijk in een variabele opslaan en de inhoud van deze variabele pas aan het eind van het script naar de browser sturen...
 
Thomas de Roo

Thomas de Roo

30/10/2010 18:06:35
Quote Anchor link
Is dat niet precies wat ob_start(); ob_flaush(); doet? :P

Toevoeging op 30/10/2010 20:10:35:

Volstaat een globale $output variable die in index.php wordt geechoëd tussen de header en footer in?
 
Joren de Wit

Joren de Wit

30/10/2010 21:14:09
Quote Anchor link
Output buffering is niet de juiste methode om je header already sent foutmeldingen op te lossen aangezien je het eigenlijke probleem, een verkeerde logica in je scripts, niet oplost...

Een globale $output variabele kan volstaan, maar je zult vanzelf zien dat dit op een gegeven moment te beperkt is. Je wilt waarschijnlijk op meer vlakken kunnen bepalen hoe je output eruit ziet en dan is 1 enkele variabele niet handig. Dit is precies waar het gebruik van een template engine uitkomst biedt...
 
Thomas de Roo

Thomas de Roo

30/10/2010 21:17:36
Quote Anchor link
Oke, ik zal er eens naar kijken, maar voor nu volstaan ob_start(); en ob_flush();
Die functies bestaan immers ook niet voor niks, toch? D:
Gewijzigd op 30/10/2010 21:18:07 door Thomas de Roo
 
Joren de Wit

Joren de Wit

30/10/2010 21:26:33
Quote Anchor link
De keuze is aan jou, maar ik zou toch het probleem zelf oplossen en niet ob_start() als lapmiddel gebruiken.
 

30/10/2010 21:35:16
Quote Anchor link
Output buffering is er voor zoals het zegt bufferen van output.
Dat is dus wat anders dan het 'oplossen' van scriptfouten.
Je kunt altijd wel je cookies (headers w/e) voor je html krijgen.

Dus, om headers already sent fouten te voorkomen hoor je geen output buffer te gebruiken.
 
Thomas de Roo

Thomas de Roo

30/10/2010 22:03:01
Quote Anchor link
Het hoort niet, maar het werkt.
Het gaat hier om duizenden regels code.

Vanaf nu zal ik met nieuwe code de headers voor de output houden.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.