[PHP] Warning: Cannot add header information

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Een vreemd probleem met een zoek pagina. In principe werkt de zoek functie prima. Ik doe het volgende; Ik post het form naar zichzelf (search.php) met de variable 'validation' op 1. Zodat ik de ingevulde waarden kan controleren op juiste invoer enz.

De code is dan als volgt:

code:
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
<?
if ((isset ($_GET['validation']))){
$validation = $_GET['validation'];                      //CHECK IF VALIDATION MODE IS ACTIVE
}

if ($validation == 1)
    {
    //##SORT TYPE ##
    if ((isset ($_GET['sorttype']))){
    $sorttype = $_GET['sorttype'];                      //GET THE SORTTYPE FROM ADDRESS BAR
    }
    //##SORT SEPARATOR ##
    if ((isset ($_GET['sortsepa']))){
    $sortsepa = $_GET['sortsepa'];                      //GET THE SORTSEPARATOR FROM ADDRESS BAR
    }
    //## SORT VALUE ##
    if ((isset ($_GET['sortvalue']))){
    {$sortvalue = ($_GET['sortvalue']);}        //GET THE SORTVALUE FROM ADDRESS BAR
    if ($sortsepa == like){
        $sortvalue = "%$sortvalue%";}
    }
    header("location: module2.php?sorttype=$sorttype&sortvalue=$sortvalue&sortsepa=$sortsepa");
    };
?>
<h1>Foto's zoeken</h1>
<form action="search.php" method="get">
<label>Zoeken op:</label>
<select name="sorttype">
<option value="onderwerp" selected>Onderwerp
<option value="locatie">Locatie
<option value="fotograaf">Fotograaf
<option value="camera">Camera
<option value="lens">Lens
<option value="ID">Foto ID nr.
</select>
<br>
<label>welke</label>
<select name="sortsepa">
<option value="like" selected>bevatten
<option value="equal">exact bevatten
<option value="greater">groter dan
<option value="greaterequal">groter gelijk dan
<option value="smaller">kleiner dan
<option value="smallerequal">kleiner gelijk dan
</select>
<br>
<input type="text" name="sortvalue" value="" >
<input type="hidden" name="validation" value=1>
<input type="submit" value="Zoeken">
</form>


Echter wanneer is de rest van de site 'eromheen' ga zetten krijg ik de volgende foutmelding:

Warning: Cannot add header information - headers already sent by (output started at c:\phpdev\www\fotosjsy\search.php:6) in c:\phpdev\www\fotosjsy\search.php on line 27

De code is nauwelijks gewijzigd. Ik heb alleen de css er aan gehangen.

code:
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
<HTML>
<HEAD>
<LINK REL=stylesheet TYPE="text/css" HREF="style.css">
</HEAD>
<BODY>
<?
if ((isset ($_GET['validation']))){
$validation = $_GET['validation'];                      //CHECK IF VALIDATION MODE IS ACTIVE
}

if ($validation == 1)
    {
    //##SORT TYPE ##
    if ((isset ($_GET['sorttype']))){
    $sorttype = $_GET['sorttype'];                      //GET THE SORTTYPE FROM ADDRESS BAR
    }
    //##SORT SEPARATOR ##
    if ((isset ($_GET['sortsepa']))){
    $sortsepa = $_GET['sortsepa'];                      //GET THE SORTSEPARATOR FROM ADDRESS BAR
    }
    //## SORT VALUE ##
    if ((isset ($_GET['sortvalue']))){
    {$sortvalue = ($_GET['sortvalue']);}        //GET THE SORTVALUE FROM ADDRESS BAR
    if ($sortsepa == like){
        $sortvalue = "%$sortvalue%";}
    }
    header("location: module2.php?sorttype=$sorttype&sortvalue=$sortvalue&sortsepa=$sortsepa");
    };
?>
<h1>Foto's zoeken</h1>
<form action="search.php" method="get">
<label>Zoeken op:</label>
<select name="sorttype">
<option value="onderwerp" selected>Onderwerp
<option value="locatie">Locatie
<option value="fotograaf">Fotograaf
<option value="camera">Camera
<option value="lens">Lens
<option value="ID">Foto ID nr.
</select>
<br>
<label>welke</label>
<select name="sortsepa">
<option value="like" selected>bevatten
<option value="equal">exact bevatten
<option value="greater">groter dan
<option value="greaterequal">groter gelijk dan
<option value="smaller">kleiner dan
<option value="smallerequal">kleiner gelijk dan
</select>
<br>
<input type="text" name="sortvalue" value="" >
<input type="hidden" name="validation" value=1>
<input type="submit" value="Zoeken">
</form>
</BODY>
</HTML>


Ik heb al lopen zoeken naar deze foutmelding, maar het enig wat ik kan vinden is dat er geen 'lege' regels of te wel CR's mogen staan na de ?>

Heeft iemand enig idee hoe ik dit kan oplossen?

Grz,

Jura

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Er is dus al output (<html> tag etc.) verstuurt, voor jij je headers verstuurt. Dat mag dus niet :)

Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Een quote van http://www.php.net/header:
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.
Jij hebt al output voor je een header verstuurt, dat is bij jou dit stukje:
code:
1
2
3
4
5
<HTML>
<HEAD>
<LINK REL=stylesheet TYPE="text/css" HREF="style.css">
</HEAD>
<BODY>

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thx jongens...

Ik zat ondertussen zelf verder te zoeken (kan niet stil blijven zitten hè) En ik vond dezelfde info. Misschien een beetje te vroeg geweest met posten, maar begon een beetje frusti projectje te worden.

Voor de volledigheid, de code is nu als volgt:
code:
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
<?
if ((isset ($_GET['validation']))){
$validation = $_GET['validation'];                      //CHECK IF VALIDATION MODE IS ACTIVE
}

if ($validation == 1)
    {
    //##SORT TYPE ##
    if ((isset ($_GET['sorttype']))){
    $sorttype = $_GET['sorttype'];                      //GET THE SORTTYPE FROM ADDRESS BAR
    }
    //##SORT SEPARATOR ##
    if ((isset ($_GET['sortsepa']))){
    $sortsepa = $_GET['sortsepa'];                      //GET THE SORTSEPARATOR FROM ADDRESS BAR
    }
    //## SORT VALUE ##
    if ((isset ($_GET['sortvalue']))){
    {$sortvalue = ($_GET['sortvalue']);}        //GET THE SORTVALUE FROM ADDRESS BAR
    if ($sortsepa == like){
        $sortvalue = "%$sortvalue%";}
    }
    header("location: module2.php?sorttype=$sorttype&sortvalue=$sortvalue&sortsepa=$sortsepa");
    };
?>
<HTML>
<HEAD>
<LINK REL=stylesheet TYPE="text/css" HREF="style.css">
</HEAD>
<BODY>
<h1>Foto's zoeken</h1>
<form action="search.php" method="get">
<label>Zoeken op:</label>
<select name="sorttype">
<option value="onderwerp" selected>Onderwerp
<option value="locatie">Locatie
<option value="fotograaf">Fotograaf
<option value="camera">Camera
<option value="lens">Lens
<option value="ID">Foto ID nr.
</select>
<br>
<label>welke</label>
<select name="sortsepa">
<option value="like" selected>bevatten
<option value="equal">exact bevatten
<option value="greater">groter dan
<option value="greaterequal">groter gelijk dan
<option value="smaller">kleiner dan
<option value="smallerequal">kleiner gelijk dan
</select>
<br>
<input type="text" name="sortvalue" value="" >
<input type="hidden" name="validation" value=1>
<input type="submit" value="Zoeken">
</form>
</BODY>
</HTML>

Acties:
  • 0 Henk 'm!

  • AlexAuto
  • Registratie: Februari 2001
  • Laatst online: 20-09 21:34

AlexAuto

Parttime Tweaker

Regel 6: if ($validation == 1)
Als '$_GET['validation'])' niet is geset dan wordt $validation ook niet geset. Gevolg: foutmelding en cannot add header-foutmelding omdat er al output is geweest in de vorm van een NOTIFY-foutmelding.

Je moet een 'else'-statement aanmaken waarin je $validation ook een waarde meegeeft.

[Edit]
Ik heb dit topic een paar keer doorgelezen maar kan - behalve die parse-error - niet achterhalen wat niet werkt..? :?

[ Voor 22% gewijzigd door AlexAuto op 10-04-2005 11:13 . Reden: Aanvulling ]


Acties:
  • 0 Henk 'm!

  • SH4D3H
  • Registratie: Juni 2004
  • Laatst online: 27-02 23:46
Zo kan het ook:
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php ob_start(); ?>
<HTML>
<HEAD>
<LINK REL=stylesheet TYPE="text/css" HREF="style.css">
</HEAD>
<BODY>
<?
if ((isset ($_GET['validation']))){
$validation = $_GET['validation'];                      //CHECK IF VALIDATION MODE IS ACTIVE
}

if ($validation == 1)
    {
    //##SORT TYPE ##
    if ((isset ($_GET['sorttype']))){
    $sorttype = $_GET['sorttype'];                      //GET THE SORTTYPE FROM ADDRESS BAR
    }
    //##SORT SEPARATOR ##
    if ((isset ($_GET['sortsepa']))){
    $sortsepa = $_GET['sortsepa'];                      //GET THE SORTSEPARATOR FROM ADDRESS BAR
    }
    //## SORT VALUE ##
    if ((isset ($_GET['sortvalue']))){
    {$sortvalue = ($_GET['sortvalue']);}        //GET THE SORTVALUE FROM ADDRESS BAR
    if ($sortsepa == like){
        $sortvalue = "%$sortvalue%";}
    }
    header("location: module2.php?sorttype=$sorttype&sortvalue=$sortvalue&sortsepa=$sortsepa");
    };
?>
<h1>Foto's zoeken</h1>
<form action="search.php" method="get">
<label>Zoeken op:</label>
<select name="sorttype">
<option value="onderwerp" selected>Onderwerp
<option value="locatie">Locatie
<option value="fotograaf">Fotograaf
<option value="camera">Camera
<option value="lens">Lens
<option value="ID">Foto ID nr.
</select>
<br>
<label>welke</label>
<select name="sortsepa">
<option value="like" selected>bevatten
<option value="equal">exact bevatten
<option value="greater">groter dan
<option value="greaterequal">groter gelijk dan
<option value="smaller">kleiner dan
<option value="smallerequal">kleiner gelijk dan
</select>
<br>
<input type="text" name="sortvalue" value="" >
<input type="hidden" name="validation" value=1>
<input type="submit" value="Zoeken">
</form>
</BODY>
</HTML>
<?php ob_end_flush(); ?>


Edit: PHP highlighting toegevoegd.

[ Voor 46% gewijzigd door SH4D3H op 10-04-2005 11:40 ]


Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 21-09 00:18
SH4D3H, dat is eigenlijk omslachtig,
even mierenneuken :P

PHP:
1
2
3
4
5
6
7
8
if (isset($_GET['validation']) AND intval($_GET['validation']) == 1)
{
   bla bla;
}
else
{
   bla bla;
}

en die ob meuk vertraagt 't aardig..

[ Voor 16% gewijzigd door simon op 10-04-2005 11:41 ]

|>


Acties:
  • 0 Henk 'm!

  • SH4D3H
  • Registratie: Juni 2004
  • Laatst online: 27-02 23:46
Dat ob meuk is het enige dat ik toevoegde ;)
En ja het vertraagd, maar meestal kun je dat verwaarlozen;
of het parsen in 0.01 of 0.1 seconde gebeurt, maakt voor de bezoeker ook weinig uit :)

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

SH4D3H schreef op zondag 10 april 2005 @ 11:51:
Dat ob meuk is het enige dat ik toevoegde ;)
En ja het vertraagd, maar meestal kun je dat verwaarlozen;
of het parsen in 0.01 of 0.1 seconde gebeurt, maakt voor de bezoeker ook weinig uit :)
Maar voor de totale belasting van de server wel :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

als je output buffering nodig hebt om foutmeldingen te vermijden zou ik toch nog eens naar de logische upbouw van je script kijken. Over het algemeen is je allerlaatste stap pas het verzenden van de data, dat doe je vaak niet tussendoor ook al.

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

Verwijderd

Zet even een "die;" achter je "header". Als je de gebruiker doorstuur, waarom moet de rest van de pagina nog verwerkt worden?

code:
1
2
 header("location: module2.php?sorttype=$sorttype&sortvalue=$sortvalue&sortsepa=$sortsepa");
die;

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op zondag 10 april 2005 @ 12:24:
Zet even een "die;" achter je "header". Als je de gebruiker doorstuur, waarom moet de rest van de pagina nog verwerkt worden?

code:
1
2
 header("location: module2.php?sorttype=$sorttype&sortvalue=$sortvalue&sortsepa=$sortsepa");
die;
mee eens, hoewel ik zelf uit praktische overwegingen altijd een exit() gebruik.
Ik weet dat die() en exit() precies hetzelfde is, alleen die() gebruik ik alleen tijdens het debuggen, om het script te killen op een bepaald punt, met een search/replace kan ik dan achteraf eenvoudig deze debug zooi verwijderen/vervangen :)
overigens ben ik ook van mening dat om je code duidelijk leesbaar te houden de haakjes gewoon erbij moet zetten ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Als je de gebruiker doorstuur, waarom moet de rest van de pagina nog verwerkt worden?
Omdat de pagina eerst wordt aangeroepen zonder variabelen. Daarna post de pagina naar zichzelf om de ingevoerde variabelen te valideren en eventueel toevoegingen te doen. Bijvoorbeeld als de search optie is "like" dan wordt de search string %$search%

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op zondag 10 april 2005 @ 12:39:
[...]


Omdat de pagina eerst wordt aangeroepen zonder variabelen. Daarna post de pagina naar zichzelf om de ingevoerde variabelen te valideren en eventueel toevoegingen te doen. Bijvoorbeeld als de search optie is "like" dan wordt de search string %$search%
en daar maak je een denkfout ;)
aangezien je een redirect header stuurt, wil je op dat punt je script beeindigen, immers je stuurt de user door naar een "andere" pagina. En dus dien je je script daar te stoppen. PHP doet dan namelijk niet zelf :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ok, thx allemaal voor de replies.

exit();

[ Voor 55% gewijzigd door Verwijderd op 10-04-2005 13:30 ]

Pagina: 1