headers already sent

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Enrico van der List

Enrico van der List

29/10/2014 00:24:12
Quote Anchor link
Hoi ben momenteel een site aan het maken en ik krijg de volgende melding. Waarom linkt hij niet naar een andere pagina? want ik heb deze script al eens eerder gebruikt en daar kreeg ik geen melding.
Warning: Cannot modify header information - headers already sent by (output started at /public/sites/www......php:40) in /public/sites/www. ....php on line 82
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
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
108
109
110
<?php
    session_start();
    include('../mysql_connect.php');

    if(isset($_SESSION['ingelogd'])){
        //header('location: member.php');
        
    } else{
?>


<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>title</title>

<link href="css/normalize.css"/>
<link href="css/main.css" rel="stylesheet" type="text/css" media="screen"/>

</head>

<body>
<header>
    <div class="center">
        <div class="title">
            <h1> title</h1>
        </div>
    </div>

</header>

<div id="container">
    <div id="main">
        <div class="title">
            <h1>Log in</h1>
        </div>
    
    <div class="main_text">
        <div id="login">
                    <?php
                        if(isset($_POST['hidden'])){
                            
                            // variable
                            $username = $_POST['gebruikersnaam']; // username
                            $password = $_POST['wachtwoord']; // wachtwoord
                            
                            $username = mysql_real_escape_string($username);    //sql injection
                            $password = mysql_real_escape_string($password);    //sql injection
                            
                            //$password = md5_file($password); // wachtwoord versleutelen


                            
                            $sql =     "SELECT * FROM Leden WHERE gebruikersnaam='$username' AND wachtwoord='$password'"; // wordt gecontroleerd of er een wachtwoord en gebruikersnaam bestaat
                            $query = mysql_query ($sql);
                            
                            $inloggegevens = mysql_fetch_array($query);
                            
                            $voornaam = $inloggegevens['voornaam'];
                            $achternaam = $inloggegevens['achternaam'];
                            $email = $inloggegevens['email'];
                            $gebruiker = $inloggegevens['gebruikersnaam'];
                            $password =  $inloggegevens['wachtwoord'];
                            
                            $num = mysql_num_rows($query);

      
                            if($num == 1){    // wanneer alles hieronder klopt ben je ingelogd
                                // Ingelogd

                                
                                $_SESSION['gebruikersnaam'] = $gebruiker;    // controleert username
                                $_SESSION['wachtwoord'] = $password;
                                $_SESSION['voornaam'] = $voornaam;
                                $_SESSION['achternaam'] = $achternaam;
                                $_SESSION['email'] = $email;
                                                                
                                $_SESSION['id'] = 5;//$fetch['id'];        // controleer id
                                $_SESSION['ingelogd'] = true;    // wanneer je ingelogd bent
                                
                                if($_SESSION['gebruikersnaam']== "admin"){ // controleer of de gebruiker is of een admin
                                    header('location: admin.php');
                                }
else{
                                    header('location: member.php');        // ga je naar de pagina member.
                                
                                echo "Ingelogd";    }
                            }

                            else{
                                echo " Gebruikersnaam of Wachtwoord is verkeerd!! <br>";    // anders is het wachtwoord of gebruikersnaam verkeer of sta je nog niet in de database.
                                echo "<a href='index.php'>Terug</a>";                        // ge je weer terug naar de pagina
                            }
                        }

                        else{
                    ?>

                    
         <form action='index.php' method='POST'>
                            
         <input type='text' name='gebruikersnaam' value="gebruikersnaam"/><br>
         <input type='password' name='wachtwoord' value="wachtwoord"/><br>
         <input type='hidden' name='hidden'>
         <input type='submit' value='Inloggen' class="btn blue">
         </form>
         <?php    
         }
         }

         ?>

        </div>
    </div>
</div>

</body>
</html>
Gewijzigd op 29/10/2014 00:27:39 door Enrico van der List
 
PHP hulp

PHP hulp

23/02/2025 07:19:53
 
Ozzie PHP

Ozzie PHP

29/10/2014 00:36:15
Quote Anchor link
Voordat je headers verstuurt mag er geen informatie naar de client (browser) worden verstuurd, en dat doe jij wel. Daarom krijg je die melding. Het versturen van headers moet je dus doen, voordat je ook maar 1 teken html-code genereert.
 
Enrico van der List

Enrico van der List

29/10/2014 00:42:30
Quote Anchor link
maar hoe kan het dan wel dat het werkte bij een andere login?
 
Ozzie PHP

Ozzie PHP

29/10/2014 00:43:50
Quote Anchor link
Geen idee. Misschien stonden je foutmeldingen uit. Hoe je het nu doet, klopt het in ieder geval niet.
 
Enrico van der List

Enrico van der List

29/10/2014 00:51:09
Quote Anchor link
daar schiet ik nog niet echt mee op om eerlijk te zijn
 
Ozzie PHP

Ozzie PHP

29/10/2014 00:58:10
Quote Anchor link
>> daar schiet ik nog niet echt mee op om eerlijk te zijn

Dan moet je aangeven waar je wel iets mee opschiet. Wat begrijp je niet?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

29/10/2014 01:31:06
Quote Anchor link
even anders gezegd:

regel 10 t/m 39 moet je onder de php code met je header() functies plaatsen.

Die paar echo 's die er dan staan die verander je naar een variabele die je dan later tussen je html uit spuugt.

http://www.phphulp.nl/php/tutorial/php-algemeen/header-already-sent/738/header-already-sent/1961/
http://www.phphulp.nl/php/forum/topic/warning-cannot-modify-header-information-headers-already-sent-by/93500/
http://open.phphulp.nl/php/forum/topic/error/92611/last/

wat ook al helpt is als je in de include files de ?> weg laat.
Gewijzigd op 29/10/2014 01:51:08 door Frank Nietbelangrijk
 
Obelix Idefix

Obelix Idefix

29/10/2014 10:51:50
Quote Anchor link
Enrico van der List op 29/10/2014 00:51:09:
daar schiet ik nog niet echt mee op om eerlijk te zijn

Als je met Google zoekt op de foutmelding kom je heel veel topics tegen. Ook op dit forum komt de vraag regelmatig naar voren. Beetje zoekwerk had je dus al een antwoord kunnen opleveren.

Wat betreft je code:

Waar controleer je of $_POST['gebruikersnaam'] en $_POST['wachtwoord'] bestaan?
Waarom maak je een nieuwe variabele aan voor beide? Laat je daarna nog een keer een bewerking er op los (die overigens in een query hoort).
Een password hoeft geen mysql_real_escape_string, omdat je een wachtwoord beveiligd zou moeten opslaan.
Het password beveilig je momenteel niet?! MD5 is overigens een oude, onveilige, manier.
Waarom Select * en niet een veld/de velden benoemen?
Doorgaans wordt geadviseerd om variabelen buiten quotes te houden.
mysql komt te vervallen. Kijk naar mysqli of PDO.
Waar is de foutafhandeling bij je query?
Waarom mysql_fetch_array en geen mysql_fetch_assoc? Je gebruikt de array namelijk niet.
Wat is het nut van het aanmaken van alle variabelen op regels 58/62?
Je gaat overigens daarna pas kijken of er 1 resultaat is? Waarom doe je dat niet eerder (voor je al die variabelen (onnodig) aanmaakt)?
Waarom zet je al die gegevens in een sessie? Zeker wachtwoord hoort er niet in thuis (en het nut van een emailadres in een sessie zie ik ook nog niet direct).
Na een header is het advies om exit() te gebruiken.

Er is regelmatig discussie over, maar in het verleden werd in HTML " gebruikt en PHP '
 
Kenny iets

kenny iets

29/10/2014 17:51:44
Quote Anchor link
moet header
nooit met EXIT; worden afgesloten ?
 
Ivo P

Ivo P

29/10/2014 18:06:37
Quote Anchor link
hangt van je header af

na header('Content-Type: application/pdf'); heeft exit niet zo veel zin: je breekt je script af voor er output is.

als je een redirect gebruikt, is het wel handig als je script niet verder loopt terwijl de browser opweg is naar een volgend avontuur.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
header('Location: http://example.com'); // full url is eigenlijk required
unlink('somefile.txt');
echo 'file gewist';
?>


Dit zou best eens tot het wissen van de betreffende file kunnen leiden, zonder dat je de melding zag
 



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.