Versio

Cannot modify header information

Overzicht Reageren

Pagina: 1 2 3 volgende »

Maurice vB

Maurice vB

30/12/2010 13:51:23
Quote Anchor link
Hallo iedereen,

Ik ben bezig met een site die in meerdere talen kan worden weergegeven.
Op mijn localhost werkt alles maar zodra ik hem upload krijg ik de error:

Warning: Cannot modify header information - headers already sent by (output started at /customers/mbdesigner.nl/mbdesigner.nl/httpd.www/Fair/functions/main.functions.php:119) in /customers/mbdesigner.nl/mbdesigner.nl/httpd.www/Fair/pages/dynamic/language.php on line 32

(regel 119 in main.functions.php is het sluit teken van PHP ( ? > ) en op regel 32 in language.php staat: setcookie("language", 'nl', mktime(18, 30, 0, 5, 12, 2020));)

Hoe het werkt:

Er staat ergens een URL die er zo uit ziet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<a href="?page=language&language=nl&page2=<?php echo $_GET['page']; ?>">VLAGGETJE NEDERLANDS</a>


Hij wordt dan doorverwezen naar de language.php pagina:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
if (!isset($frame_check)){ header('location: ../../index.php'); }

if (!isset($_GET['language']) || empty ($_GET['language']))
{

    echo '<b>'.LANGUAGE.'</b>';
    echo "<br/><br/>";
    echo NOLANGUAGE;
}

else
{
    $language = $_GET['language'];
    switch ($language)
    {

        // Standaard
        default:
        if (!isset($_COOKIE['language']))
        {

            setcookie("language", 'nl', mktime(18, 30, 0, 5, 12, 2020));
        }

        else
        {
            setcookie("language", "", time()-3600);
            setcookie("language", 'nl', mktime(18, 30, 0, 5, 12, 2020));
        }

        echo '<meta http-equiv="refresh" content="0;URL=?page='.$_GET['page2'].'" />';
        break;
        
        // Nederlands
        case 'nl':
        if (!isset($_COOKIE['language']))
        {

            setcookie("language", 'nl', mktime(18, 30, 0, 5, 12, 2020));
        }

        else
        {
            setcookie("language", "", time()-3600);
            setcookie("language", 'nl', mktime(18, 30, 0, 5, 12, 2020));
        }

        echo '<meta http-equiv="refresh" content="0;URL=?page='.$_GET['page2'].'" />';
        break;    
        
        // Engels
        case 'en':
        if (!isset($_COOKIE['language']))
        {

            setcookie("language", 'en', mktime(18, 30, 0, 5, 12, 2020));
        }

        else
        {
            setcookie("language", "", time()-3600);
            setcookie("language", 'en', mktime(18, 30, 0, 5, 12, 2020));
        }

        echo '<meta http-equiv="refresh" content="0;URL=?page='.$_GET['page2'].'" />';
        break;    
        
        // Duits
        case 'de':
        if (!isset($_COOKIE['language']))
        {

            setcookie("language", 'de', mktime(18, 30, 0, 5, 12, 2020));
        }

        else
        {
            setcookie("language", "", time()-3600);
            setcookie("language", 'de', mktime(18, 30, 0, 5, 12, 2020));
        }

        echo '<meta http-equiv="refresh" content="0;URL=?page='.$_GET['page2'].'" />';
        break;    
    }
}


?>


En als de cookie is geplaatst/gezet gaat hij weer naar de pagina waar je op stond (is $_GET['page2']) En op die pagina staat bovenaan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php check_language(); // Taal zoeken ?>


Die hoort bij de functie:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function check_language()
{

    // Bestaat de cookie met de language waarde (nl,en of de)
    if (!isset($_COOKIE['language']))
    {

        require_once('languages/nl.php');
    }

    else
    {
        require_once('languages/'.$_COOKIE['language'].'.php');
    }    
}

?>


Hopelijk snapt iemand er nog iets van en kan hij/zij mij helpen.

Alvast bedankt!

Edit: Sporen van 'weinig kennis' verwijderd. --> MD5 troep
Gewijzigd op 30/12/2010 14:05:24 door Maurice vB
 
PHP hulp

PHP hulp

24/05/2012 00:12:43
Gesponsorde koppelingen:
 
Karl Karl

Karl Karl

30/12/2010 13:53:27
Quote Anchor link
wtf is dit voor onzin:
case ''.md5('en').'':
 
Maurice vB

Maurice vB

30/12/2010 13:55:13
Quote Anchor link
Karl Karl op 30/12/2010 13:53:27:
wtf is dit voor onzin:
case ''.md5('en').'':


Haha, ja dat was/is een test om er voor te zorgen dat de pagina niet zichtbaar is. Maar dat maakt voor de fout niks uit. Ik verzin daar nog een andere oplossing voor.
Gewijzigd op 30/12/2010 13:55:51 door Maurice vB
 
Karl Karl

Karl Karl

30/12/2010 13:56:09
Quote Anchor link
Die onzin duid er bij mij al op dat je scripting kennis niet erg groot is.
Vanwaar die quotes?
 
Maurice vB

Maurice vB

30/12/2010 13:58:45
Quote Anchor link
Karl Karl op 30/12/2010 13:56:09:
Die onzin duid er bij mij al op dat je scripting kennis niet erg groot is.
Vanwaar die quotes?


Oke.

Bij case bedoel je? Omdat in mijn vorige script (van een tijd geleden) een string stond tussen ''. Dus ik heb het er gewoon tussen gezet. Maar het kan dus schijnbaar ook zonder?
Gewijzigd op 30/12/2010 13:58:58 door Maurice vB
 
Karl Karl

Karl Karl

30/12/2010 14:02:03
Quote Anchor link
Wat doet de . operator, die plakt variabelen e.d. aan elkaar.
Dus wat zeg jij ?
plak NIKS aan een md5-string met NIKS erachter.
Know your basics!
 
Maurice vB

Maurice vB

30/12/2010 14:06:41
Quote Anchor link
Karl Karl op 30/12/2010 14:02:03:
Wat doet de . operator, die plakt variabelen e.d. aan elkaar.
Dus wat zeg jij ?
plak NIKS aan een md5-string met NIKS erachter.
Know your basics!


Ik weet wat ze betekenen. Ik heb er alleen niet bij stil gestaan. Ik heb de code van eerder gewoon overgenomen..
(ik heb de MD5 onzin zoals jij dat noemt verwijderd.)
 
Karl Karl

Karl Karl

30/12/2010 14:10:36
Quote Anchor link
Ik zeg niet dat je die md5 zooi niet moet gebruiken, ik zeg dat hoe je het deed onzinnig was.
 
Maurice vB

Maurice vB

30/12/2010 14:15:02
Quote Anchor link
Karl Karl op 30/12/2010 14:10:36:
Ik zeg niet dat je die md5 zooi niet moet gebruiken, ik zeg dat hoe je het deed onzinnig was.


Ooh oke. Maar hoe moet ik het dan doen?

Ik moet even terug komen op wat ik eerder in het topic over de PHP Hulp slogan zei; Ik had misschien genuanceerder moeten reageren. Je bent gewoon duidelijk, en of je daar nou op zit te wachten of niet, het helpt wel. Nou zeg ik dit niet omdat ik wil dat je me nu helemaal gaat helpen maar omdat ik het nu anders ervaar

Maar nu weer ontopic.
 
Pim -

Pim -

30/12/2010 14:15:29
Quote Anchor link
Maar dit alles heeft niet zo veel met de gestelde vraag te maken...

Het betekent dat er al text (of witruimte) geëchod is voordat je die redirect doet. Om dit tegen te gaan moet je die dus allemaal weghalen en zorgen dat de < ?php tag altijd op het eerste karakter in de pagina staat.
Gewijzigd op 30/12/2010 14:15:45 door Pim -
 
Karl Karl

Karl Karl

30/12/2010 14:17:17
Quote Anchor link
Wat ook een manier is om nergens meer php sluit tags te doen.
Die md5's moet je gewoon doen zonder die quotes er omheen.
0+2+1+0 = 3, dus kan je ook 2+1=3 doen.
 
Maurice vB

Maurice vB

30/12/2010 14:26:11
Quote Anchor link
Pim - op 30/12/2010 14:15:29:
Maar dit alles heeft niet zo veel met de gestelde vraag te maken...

Het betekent dat er al text (of witruimte) geëchod is voordat je die redirect doet. Om dit tegen te gaan moet je die dus allemaal weghalen en zorgen dat de < ?php tag altijd op het eerste karakter in de pagina staat.


Dat is raar want die 'language check' staat bovenaan op de index pagina (waar door middel van require_once andere pagina's in geladen worden). Dit staat bovenaan op de index:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
session_start();
ini_set('display_errors', 'On');
error_reporting(E_ALL);
require_once('functions/main.functions.php');
check_language(); // Taal kijken
connect(); // Connectie met de database;
if (!isset($_COOKIE['language'])){ $language = 'nl';}else{ $language = $_COOKIE['language'];}
if (!isset($_GET['page'])) { $page = md5("home"); }else { $page = $_GET['page']; }
?>

<!DOCTYPE html PUBLIC "......


En die error verschijnt in language.php (ook hier is nog niks geëchod, zie hierboven de code van language.php)

Dus dat is vreemd. :S
(Ik krijg de code trouwens ook als ik de meta-tag refresh weg haal)


Karl Karl op 30/12/2010 14:17:17:
Wat ook een manier is om nergens meer php sluit tags te doen.
Die md5's moet je gewoon doen zonder die quotes er omheen.
0+2+1+0 = 3, dus kan je ook 2+1=3 doen.


oke bedankt! Ik zal het veranderen. :)
Gewijzigd op 30/12/2010 14:27:38 door Maurice vB
 
Kris Peeters

Kris Peeters

30/12/2010 14:46:43
Quote Anchor link
Gewoon even melden:

if (!isset($_GET['language']) || empty ($_GET['language']))

De functie empty() doet al een isset() controle.

Dit
if (empty ($_GET['language']))
volstaat
 
- SanThe -

- SanThe -

30/12/2010 15:10:20
Quote Anchor link
Maurice vB op 30/12/2010 14:26:11:
En die error verschijnt in language.php (ook hier is nog niks geëchod, zie hierboven de code van language.php)


Daar staan heel wat echo's in.
 
Maurice vB

Maurice vB

30/12/2010 15:12:39
Quote Anchor link
- SanThe - op 30/12/2010 15:10:20:
Maurice vB op 30/12/2010 14:26:11:
En die error verschijnt in language.php (ook hier is nog niks geëchod, zie hierboven de code van language.php)


Daar staan heel wat echo's in.


Maar die worden toch niet 'uitgevoerd' voor de redirect?
 
Mike Smit

Mike Smit

30/12/2010 15:14:28
Quote Anchor link
Je mag helemaal geen output hebben voor een header in php.
 
- SanThe -

- SanThe -

30/12/2010 15:16:42
Quote Anchor link
Ik denk dat je in main.functions.php moet zoeken.
 
Karl Karl

Karl Karl

30/12/2010 15:18:22
Quote Anchor link
- SanThe - op 30/12/2010 15:16:42:
Ik denk dat je in main.functions.php moet zoeken.


Ja.
En hij geeft aan dat het op de laatste regel is, dus php zal wel moeilijk doen rond de ? >
 
Maurice vB

Maurice vB

30/12/2010 15:22:09
Quote Anchor link
Maar er wordt gesproken over header(), maar die gebruik ik toch alleen in language.php bovenaan? verder nergens, en daarboven word niks geëchod..
 
Kris Peeters

Kris Peeters

30/12/2010 15:23:40
Quote Anchor link
In Drupal laten ze die laatste ?> gewoon altijd weg in php files waar functies staan.
 
Mike Smit

Mike Smit

30/12/2010 15:24:18
Quote Anchor link
Laat anders je main.functions.php eens zien? Mogelijk heb je daarin output boven een header.
 

Pagina: 1 2 3 volgende »



Overzicht Reageren