Bij "?page=" werkt de pagina niet

Pagina: 1
Acties:
  • 78 views sinds 30-01-2008

  • Beatman
  • Registratie: Oktober 2002
  • Laatst online: 07:39
Ik heb een nieuwssysteem op mijn site, en daarop vraag de nieuwscomments op met
?page=nieuwscomments&nieuwsid=##

Zodra ik een reactie wil versturen geeft hij de volgende foutmelding:

Warning: Cannot modify header information - headers already sent by (output started at /home/vvm63.nl/www/index.php:17) in /home/vvm63.nl/www/nieuwscomments.php on line 104


line 104: header("location:$_SERVER[REQUEST_URI]");


Dit gebeurt alleen als ik de pagina opvraag via ?page=. Als ik gewoon nieuwscomments.php opvraag is er niets aan de hand.
Wat is hier mis? Ik heb dit script van een andere site en niet veel verstand van php.


titel moet "[PHP]Bij "?page=" werkt de pagina niet" zijn.

[ Voor 6% gewijzigd door Beatman op 31-12-2004 12:13 ]

www.energiepionier.nl Energiebesparing, duurzaamheid en domotica


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

op regel 17 van index.php heb je al output gestuurd, dat staat toch in je foutmelding :?
en je weet toch dat je geen output mag hebben voordat je zelf headers gaat sturen ;)

  • Rone
  • Registratie: April 2002
  • Niet online

Rone

Moderator Tweaking
line 104: header("location:$_SERVER[REQUEST_URI]");

Moet hier niet URL staan?

PC1: 9800X3D + RX 9070 XT
PC2: 5800X3D + RTX 3080


  • Beatman
  • Registratie: Oktober 2002
  • Laatst online: 07:39
Maar het vage is, op regel 17 van de index.php staat

<meta name="description" content="beschrijving">

of mag dat ook niet?

www.energiepionier.nl Energiebesparing, duurzaamheid en domotica


  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 13-05 23:34

Spockz

Live and Let Live

Nee, dat is ook output.

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Beatman schreef op vrijdag 31 december 2004 @ 12:15:
Maar het vage is, op regel 17 van de index.php staat

<meta name="description" content="beschrijving">

of mag dat ook niet?
nee helemaal niks, zelfs geen spatie ;)
r00n187 schreef op vrijdag 31 december 2004 @ 12:15:
line 104: header("location:$_SERVER[REQUEST_URI]");

Moet hier niet URL staan?
Nee ;)
dit moet er staan:
PHP:
104
header('Location: '.$_SERVER['REQUEST_URI']);


URI: Uniform Resource Identifier
URL: Uniform Resource Locator

[ Voor 12% gewijzigd door Erkens op 31-12-2004 12:19 ]


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
r00n187 schreef op vrijdag 31 december 2004 @ 12:15:
line 104: header("location:$_SERVER[REQUEST_URI]");

Moet hier niet URL staan?
nee...


@ TS:
weet jij al wat deze foutmelding inhoud?
zo nee: kijk dan eens hier

zo wel:
post eens een DEEL van je code, met daarin iig regel 17 en iets daarboven, en waar jij denkt dat het fout op gaat, dan kunnen we wel even kijken

This message was sent on 100% recyclable electrons.


  • Kawa
  • Registratie: Juni 2001
  • Laatst online: 08:18
r00n187 schreef op vrijdag 31 december 2004 @ 12:15:
line 104: header("location:$_SERVER[REQUEST_URI]");

Moet hier niet URL staan?
nope

URI staat voor "Uniform Resource Identifier"

edit:
en dat is 3 ;)

[ Voor 10% gewijzigd door Kawa op 31-12-2004 12:20 ]


Verwijderd

Beatman schreef op vrijdag 31 december 2004 @ 12:15:
Maar het vage is, op regel 17 van de index.php staat

<meta name="description" content="beschrijving">

of mag dat ook niet?
Beatman > je moet begrijpen dat wij niet helderziend zijn. Relevante code posten is gewoon noodzakelijk zodat wij een beeld krijgen van wat je gedaan heb. In dit geval het je gewoon ergens al output naar de browser gestuurd (een echo is al voldoende).
De header() methode moet je dus aanroepen voordat je ook maar enige content verstuurd hebt. Op internet is hier echt genoeg over te vinden.
Lees de problemen van anderen en kijk of jij dezelfde fout hebt gemaakt.

  • Beatman
  • Registratie: Oktober 2002
  • Laatst online: 07:39
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
 $page == $_GET["page"]="";
 if ($page == "") { $page = "home"; }
 $page = $page . ".php";
 if (!file_exists($page)) { $page = "home.php"; }
?>



<html>

<head>
<meta name="description" content="beschrijving">
<link rel="stylesheet" type="text/css" href="stijl.css">


..... heel stuk verder
(Tussenin zitten allemaal tabellen en nog een include voor een random image)


<td><?php include($page); ?></td>


Het komt door deze include. Dan voert hij eerst de code uit die in de index.php staat, vervolgens begint hij pas op regel 150 de include (dus nieuwscomments.php) uit te voeren. Dat er dan allang wat output gestuur is begrijp ik, hoe hoe moet het dan?

[ Voor 66% gewijzigd door Beatman op 31-12-2004 12:30 ]

www.energiepionier.nl Energiebesparing, duurzaamheid en domotica


Verwijderd

Je kan je output bufferen met ob_start. Ik wil je er ook nog even op wijzen, dat de code die je gebruikt grote beveiligingsproblemen met zich meebrengt. Een mogelijke aanvaller kan elke pagina includen die hij maar wil.

  • StevenK
  • Registratie: Februari 2001
  • Laatst online: 09:30
Het komt door deze include. Dan voert hij eerst de code uit die in de index.php staat, vervolgens begint hij pas op regel 150 de include (dus nieuwscomments.php) uit te voeren. Dat er dan allang wat output gestuur is begrijp ik, hoe hoe moet het dan?
Door eerst te leren programmeren voor je code gaat kloppen :(

Je vraagt nu aan ons hoe jouw programma dat niet werkt, waarvan we de code niet hebben, zou moeten gaan werken, terwijl je zelf al aangeeft dat je niet snapt waar je mee bezig bent.

Overigens, als ik 't zo zie, probeer jij in een HTML pagina een php pagina waar een redirect in zit te includen.

Dat gaat echt niet werken, omdat bij een include er alleen de header van de hoofdpagina (in dit geval index.php) gezonden wordt en die kan niet vanuit de andere pagina (nieuwsdinges.php) aangepast worden.

[ Voor 13% gewijzigd door StevenK op 31-12-2004 12:37 ]

Was advocaat maar vindt het juridische nog steeds leuk. Doet tegenwoordig iets in de metaal.


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
nou zoals al gezegt kan ik nu zo php code en dus ook gewoon console commands uitvoeren op jouw server, dus dit is absoluut niet veilig.

ik zou even op php.net of op phpfreakz.nl een tuturial zoeken waarin uitgelegt word hoe je een nieuwssite ofzo maakt

ten eerste heb je daar al geen header functie voor nodig, en ten tweede is include niet zo zeer bedoelt voor dynamisch includen, en al helemaal niet als je er niet bij nadenkt wat er dan allemaal kan gebeuren.

ook is een kleine howto zoeken over het 'header' gebeuren wel handig voor je.
een header is dus iets wat BOVENAAN je file geplakt zit, en wat dus informatie geeft over die file,
wanneer je dus header location wijzigt gaat ie dus een andere file pakken om te openen (had je wel door denk ik) maar elke file heeft maar 1!!! header, dus je kan alleeen VOOR dat je info stuurt (dus je file zelf) de header sturen.
je kan dus niet halverwege in je file een keer een header gaan wijzigen, dit kan gewoon niet.

je zou idd, zoals hierboven is gezegt kunnen proberen met ob_start() enzo te werken, maar ik raad je veel harder aan om je code te rebuilden, en iets fatsoenlijks te maken, ipv deze (toch niet zo lekkere) code aan elkaar te gaan plakken met houtje touwtje oplossingen

This message was sent on 100% recyclable electrons.


  • Skaah
  • Registratie: Juni 2001
  • Niet online
PHP:
104
header('Location: '.$_SERVER['REQUEST_URI']);
Wat is dat nou weer voor debiel commando onbegrijpelijke instructie? Stuur de browser verder naar een andere pagina, namelijk deze pagina waar hij nu is. Een soort serverside-pushed-F5.

[ Voor 12% gewijzigd door Skaah op 31-12-2004 12:59 ]


  • Beatman
  • Registratie: Oktober 2002
  • Laatst online: 07:39
Okee, ik weet genoeg. Ik ga me wat meer in php verdiepen, én een beter script zoeken.

Daarnaast valt er op mijn domein alleen te includen met pagina's in hetzelfde domein. Dit is beveiligd op de server.

Ik zal mijn volledige code hieronder tóch nog even plaatsen:

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php
ob_start();
include ('config.php');
include ('./gastenboek/ubb.php');
$query=mysql_query("SELECT * FROM nieuws where id='$nieuwsid'") or die(mysql_error());   
$obj=mysql_fetch_object($query);     
$bericht=htmlspecialchars($obj->bericht);
$bericht=nl2br($bericht);
$bericht = wordwrap($bericht, 60, "\n", 1 );
    set_smilies($bericht);

 echo "<div align=left><font face=verdana size=-1>Home ></font></div><br>"; 

 echo "<b><font face=Verdana color=#000066 size=4>&nbsp;&nbsp;&nbsp; Nieuws</font></b></p>";

?>   
<div align="center">
  <table width="89%" border="1" cellspacing="1" cellpadding="2" bordercolor="#666666" bgcolor="#000000" style="border-collapse: collapse">
    <tr bgcolor="#999999"> 
      <td width="50%">
        <font face="Verdana, Arial, Helvetica, sans-serif" style="font-size: 9pt">Onderwerp:
&nbsp;<?php echo"$obj->onderwerp"; ?></font></td>
      <td width="50%">
        <font face="Verdana, Arial, Helvetica, sans-serif" style="font-size: 9pt">Geplaatst 
        op:&nbsp;<?php echo"$obj->datum"; ?></font></td>
    </tr>
    <tr bgcolor="#CCCCCC"> 
      <td colspan="2">
      <font face="Verdana, Arial, Helvetica, sans-serif" size="-1"><?php echo"$bericht"; ?>
      </font></td>
    </tr>
    <tr bgcolor="#CCCCCC"> 
      <td colspan="2" bgcolor="#999999">
      <font face="Verdana, Arial, Helvetica, sans-serif" style="font-size: 9pt">
                Geplaatst 
        door:&nbsp;</font><font face="Verdana, Arial, Helvetica, sans-serif" size="-1"><?php echo"<a href=mailto:$obj->emailadres><font color=\"#000080\">
        $obj->naam</font></a>"; ?></font></td>
    </tr>
  </table>
</div>
<br>
<hr width="89%" color="black">
<br>
<?php  
$query=mysql_query("SELECT * FROM nieuwscomments WHERE nieuwsid='$nieuwsid'") or die(mysql_error());   
while($obj= mysql_fetch_object($query)) {
$bericht=htmlspecialchars($obj->bericht);
$bericht=nl2br($bericht);
$bericht = wordwrap($bericht, 60, "\n", 1 );
$aantal=mysql_num_rows($query);  
    set_smilies($bericht);
if ($aantal > 0) {  
?>  
<div align="center">
  <table width="89%" border="1" cellspacing="1" cellpadding="2" bordercolor="#666666" bgcolor="#000000" style="border-collapse: collapse">
    <tr bgcolor="#999999"> 
      <td width="50%">
        <font face="Verdana, Arial, Helvetica, sans-serif" style="font-size: 9pt">
        Geplaatst 
        door:&nbsp; 
        <?php echo"<a href=mailto:$obj->emailadres><font color=\"#000080\">
        $obj->naam</font></a>"; ?>
        </font></td>
      <td width="50%">
        <font face="Verdana, Arial, Helvetica, sans-serif" style="font-size: 9pt">
        Geplaatst 
        op:&nbsp; 
        <?php echo"$obj->datum - $obj->tijd"; ?>
        </font></td>
    </tr>
    <tr bgcolor="#CCCCCC"> 
      <td colspan="2"> <font face="Verdana, Arial, Helvetica, sans-serif" size="-1"> 
        <?php echo"$bericht"; ?>
        </font></td>
    </tr>
  </table>
</div>
<br>
<?php
  }
}
?> 
<?php      
$datum = date("d/m/Y");   
$tijd = date("H:i");
  
if ($_POST['Submit']) {  

  if ($_POST['berichtreactie'] == "")   
    $error = "Je moet een bericht invullen"; 
  if ($_POST['emailadres'] =="")
    $error = "Je moet je e-mailadres invullen"; 
  if ($_POST['naam'] =="")
    $error = "Je moet je naam invullen";
  
  if (!$error) {
    
    $query ="INSERT INTO nieuwscomments (naam, tijd, datum, bericht, 
nieuwsid, emailadres) VALUES ('$naam', '$tijd', '$datum', '$berichtreactie', 
'$nieuwsid', '$emailadres')";  

    mysql_query($query) or die (mysql_error()); 
  
    header("location:$_SERVER[REQUEST_URI]"); 
    
  } else if ($error) {  
?>

www.energiepionier.nl Energiebesparing, duurzaamheid en domotica


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Skaah schreef op vrijdag 31 december 2004 @ 12:57:
[...]

Wat is dat nou weer voor debiel commando onbegrijpelijke instructie? Stuur de browser verder naar een andere pagina, namelijk deze pagina waar hij nu is. Een soort serverside-pushed-F5.
nu je het zegt :D
ik nam het gewoon over 8)7
Als je wilt refreshen stuur je een refresh header imo :P

  • Beatman
  • Registratie: Oktober 2002
  • Laatst online: 07:39
Okee, het is opgelost _/-\o_


Bovenaan de index.php ook het volgende neer gezet.

PHP:
1
2
3
ob_start();
include ('config.php');
$query=mysql_query("SELECT * FROM nieuws where id='$nieuwsid'") or die(mysql_error());

www.energiepionier.nl Energiebesparing, duurzaamheid en domotica


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Je moet je POST vars ook even checken en niet blindelings in een query gooien, dat is vragen om security exploits...

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 11:43

gorgi_19

Kruimeltjes zijn weer op :9

Mja, dit topic heeft zo weinig zin. :) Om te beginnen geven we geen support op scripts van anderen. Verder is "headers already sent"-foutmelding een vrij bekende en al vaker voorgekauwd wat hier de oorzaak van is (geen content sturen naar de browser voordat alle header informatie verstuurt is).

Als laatste nog SQL Injection mogelijkheden, waardoor je database plat gegooid kan worden.
Zie ook P&W FAQ - De "quickstart" voor de eisen die we stellen aan een topic.

[ Voor 13% gewijzigd door gorgi_19 op 01-01-2005 10:06 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1

Dit topic is gesloten.