IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

headers already sent


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut headers already sent
    Bonjour,

    Sur ma page connexion.php je fais une redirection qui fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
    require('fonctionsphp.php');
    require('connect.php');
    $message = "";
    if (isset($_POST['utilisateur']))	$utilisateur = $_POST['utilisateur'];
    else $utilisateur ="";
    if (isset($_POST['password']))	$password = $_POST['password'];
    else $password ="";
    if (isset($_POST['bouton_connexion'])){
    	if ((!empty($_POST['utilisateur'])) || (!empty($_POST['password']))){
    		$passw= sha1($_POST['password']);
    		$sql = mysql_query("SELECT * FROM proprietaires WHERE user = '$utilisateur' AND pass = '$passw'");
    		if (mysql_num_rows($sql) > 0){
    			$res = mysql_fetch_array($sql);
    			$id_proprietaire = $res['id_proprietaire'];
    			$user_table = $res['user'];
    			$pass_table = $res['pass'];
    			$niveau = $res['niveau'];
    			$_SESSION['utilisateur'] = $user_table;
    			$_SESSION['id_proprietaire'] = $id_proprietaire;
    			$_SESSION['niveau'] = $niveau;
    			header('location:index.php?page=accueil');
    		}
    		else {
    			$message = "<p style='color:blue'>Nom utilisateur ou mot de passe non valide !</p>";
    		}
    	}
    }
    ?>
    <div style="margin-left:170px; margin-top:40px">
    <br />
    <form name="connexion" method="POST" action="index.php?page=connexion">
    <table border=0>
    	<tr>
    		<td align='right'>Nom utilisateur :&nbsp;</td><td><input type="text" name="utilisateur" value="<?php echo $utilisateur;?>"></td>
    	</tr>
    	<tr>
    		<td align='right'>Mot de passe :&nbsp;</td><td><input type="password" name="password" value="<?php echo $password;?>"></td>
    	</tr>
     
    	<tr height="35px" valign="bottom">
    		<td></td><td align="center"><input type="submit" name="bouton_connexion" value="valider" style="width:100px; height:20px; font-size:12px"></td>
    	</tr>
    </table>
    </form>
    <?php	echo $message;
    ?>
    </div>
    Je comprends pas pourquoi sur ma page dvd_selection.php ça ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    if (isset($_POST['valider'])){
    	if (($check == $dvd_s) && ($check==$dvd_c)){
    		echo "La version standard et collector du dvd existe déjà.<br />";
    	}
    	else if ($check == $dvd_c){
    		echo "La version collector du dvd existe déjà.<br />";
    	}
    	else if (($check<>$dvd_s) && ($check<>$dvd_c)){
    		header('location:index.php?page=add_dvd');
    	}
    }
    ?>
    <form name='select_dvd' method='POST' action='index.php?page=select_add_dvd'>
    <table border="1" style="margin-left:35px" cellpadding = 0 cellspacing= 0>
    	<colgroup width = "30px"></colgroup>
    	<colgroup width = "400px"></colgroup>
    	<colgroup width = "50px"></colgroup>
    	<colgroup width = "50px"></colgroup>
    	<colgroup width = "50px"></colgroup>
    	<tr bgcolor="gold" height="20px">
    		<td align="center">Ajout</td>
    		<td align="center">Titre</td>
    		<td align="center">standard</td>
    		<td align="center">Collector</td>
    		<td align="center">Autres</td>
    	</tr>
    <?php
    $sql = mysql_query("SELECT id_film, titre FROM films ORDER BY titre");
    $nb = mysql_num_rows($sql);
    $sqldvd = mysql_query("SELECT id_dvd, id_film, edition FROM films_dvd");
    $nbl = mysql_num_rows($sqldvd);
    	for ($a = 0; $a < $nb; $a++){
    		$id_film = mysql_result($sql,$a,"id_film");
    		$titre = mysql_result($sql,$a,"titre");
       		if ($a % 2) { 
          			$couleur = '#F0F8FF'; 
       		} else { 
          			$couleur = 'white'; 
       		} 
    		?><tr style="background-color:<?php echo $couleur;?>">
    			<td align='center'><input type="radio" name="check[]" value="<?php echo $id_film;?>" <?php if (est_selectionne_check("$id_film")) { echo 'checked'; } else if (is_array($check)){ if (in_array("$id_film",$check)) { echo 'checked'; }} ?>></td>
    		<?php
    		echo "<td>&nbsp;$titre</td>";
    		for ($b = 0; $b < $nbl; $b++){
    			$id_dvd = mysql_result($sqldvd,$b,"id_dvd");
    			$id_film_dvd = mysql_result($sqldvd,$b,"id_film");
    			$edition = mysql_result($sqldvd,$b,"edition");
    			if ($id_film_dvd == $id_film){
    				if ($edition == 'standard'){
    					echo "<td><input type='checkbox' name='dvd_s[]' value='$id_film' checked='checked'></td>";
    				}
    				else if ($edition == 'collector'){
    					echo "<td><input type='checkbox' name='dvd_c[]' value='$id_film' checked='checked'></td>";
    				}
    			}
    			else {
    				echo "<td><input type='checkbox' name='dvd[]' value=''></td>";
    			}
    		}
    		echo "</tr>";
    	}
    echo "<td align='center' colspan=4><input type='submit' name='valider' value='valider'></td></tr></table></form>";
    ?>
    Est ce que quelqu'un peut me dire la redirection avec ma page dvd_selection ne se fait pas ?
    Merci d'avance

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Par défaut
    Bonjour,

    Tu n'a pas du code en plus dans tes fichiers includes dans connexion.php?

  3. #3
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    S'il n'y a pas de message d'erreur, j'aurais tendance à dire que tu ne rentre pas dans le test.

    Pour le voir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if (isset($_POST['valider'])){
    	if (($check == $dvd_s) && ($check==$dvd_c)){
    		echo "La version standard et collector du dvd existe déjà.<br />";
    	}
    	else if ($check == $dvd_c){
    		echo "La version collector du dvd existe déjà.<br />";
    	}
    	else if (($check<>$dvd_s) && ($check<>$dvd_c)){
    		header('location:index.php?page=add_dvd');
    	}
            else
                echo "<h1>Mais qu'est-ce que je fais là ?!</h1>";
    }
    ?>

  4. #4
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    J'entre bien dans le test car si pour le même film j'ai une version standard et/ou une version collector ou les 2 , le message s'affiche.

    J'ai ajouter un test, ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    if (isset($_POST['valider'])){
    	if (($check == $dvd_s) && ($check==$dvd_c)){
    		echo "La version standard et collector du dvd existe déjà.<br />";
    	}
    	else if ($check == $dvd_s){
    		echo "La version standard du dvd existe déjà.<br />";
    	}
    	else if ($check == $dvd_c){
    		echo "La version collector du dvd existe déjà.<br />";
    	}
    	else if (($check<>$dvd_s) && ($check<>$dvd_c)){
    		header('location:index.php?page=add_dvd');
    	}
    	else { 
    		echo "<h1>Mais qu'est-ce que je fais là ?!</h1>";
    	}
    }
    j'ai toujours le message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: Cannot modify header information - headers already sent by (output started at .....)

  5. #5
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonjour,

    un petit tour la ?
    http://php.developpez.com/faq/index....s_already_sent

    Vérifies que tu n'as rien envoyé au client avant ton "if (isset($_POST['valider']))".

  6. #6
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par jml94 Voir le message
    S'il n'y a pas de message d'erreur, (...)
    Pour recevoir des conseils efficaces, il est préférable de préciser s'il y a erreur ou non.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    Citation Envoyé par jml94 Voir le message
    Pour recevoir des conseils efficaces, il est préférable de préciser s'il y a erreur ou non.
    C'est vrai que je l'avais pas donné dans mon premier post, mais je l'ai fait après.

    C'est bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: Cannot modify header information - headers already sent by (output started at C:\Weblocal\Sites\mediatheque\index.php:100) in C:\Weblocal\Sites\mediatheque\dvd\dvd_selection.php on line 37
    Le code du début de ma page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
    function est_selectionne_check($option) {
     	return (isset($_POST['check']) && in_array($option, $_POST['check']));
    }
    if (isset($_POST['check']))	$check = $_POST['check'];
    else $check = "";
    if (isset($_POST['check'])){
        for ($i = 0, $c = count($_POST['check']); $i < $c; $i++) {
            $check = "" . $_POST['check'][$i] . "";
        }
    }
    if (isset($_POST['dvd_s']))	$dvd_s = $_POST['dvd_s'];
    else $dvd_s = "";
    if (isset($_POST['dvd_s'])){
        for ($i = 0, $c = count($_POST['dvd_s']); $i < $c; $i++) {
            $dvd_s = "" . $_POST['dvd_s'][$i] . "";
        }
    }
    if (isset($_POST['dvd_c']))	$dvd_c = $_POST['dvd_c'];
    else $dvd_c = "";
    if (isset($_POST['dvd_c'])){
        for ($i = 0, $c = count($_POST['dvd_c']); $i < $c; $i++) {
            $dvd_c = "" . $_POST['dvd_c'][$i] . "";
        }
    }
    if (isset($_POST['valider'])){
    	if (($check == $dvd_s) && ($check==$dvd_c)){
    		echo "La version standard et collector du dvd existe déjà.<br />";
    	}
    	else if ($check == $dvd_s){
    		echo "La version standard du dvd existe déjà.<br />";
    	}
    	else if ($check == $dvd_c){
    		echo "La version collector du dvd existe déjà.<br />";
    	}
    	else if (($check<>$dvd_s) && ($check<>$dvd_c)){
    		header('location:index.php?page=add_dvd');
    	}
    	else { 
    		echo "<h1>Mais qu'est-ce que je fais là ?!</h1>";
    	}
    }
    J'ai regardé la faq et je vois pas où est mon problème

  8. #8
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Ton problème est dans le fichier C:\Weblocal\Sites\mediatheque\index.php à la ligne 100...

    Peux-tu nous montrer cette partie de code ?

  9. #9
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    Comme je suis un peu dubitatif devant la ligne 100
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <li><a href="Sous menu 4.2">Sous menu 4.2</a></li>
    Comme le site est en construction elle n'est pas encore utilisée.

    Pour être plus complet je joins le fichier index.php
    Fichiers attachés Fichiers attachés

  10. #10
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Comme dit dans la FAQ, on ne peut pas utiliser header() après avoir envoyé des informations au client.

    Or, dans ton script index.php, tu inclus la page "dvd/dvd_selection.php" vers la ligne 120 alors que dès la ligne 10 des données sont envoyées au client (et donc les en-têtes aussi).

    Il faut donc revoir la structure de tes pages pour faire les contrôles nécessaires et rediriger avec la fonction header avant tout envoi de données (avant la ligne 10 actuelle).

    Il y a plusieurs solutions pour cela, une des plus simples étant probablement d'utiliser des fonctions dans tes fichiers php pour gérer le contenu principal (ce qui permet d'insérer ces fichiers sans pour autant envoyer de données au client). Mais pour faciliter la maintenance de ton site, il est fortement conseillé de séparer au maximum la gestion des données (donc leurs contrôles / traitements) de l'affichage.

  11. #11
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    Citation Envoyé par Eusebe Voir le message
    Il y a plusieurs solutions pour cela, une des plus simples étant probablement d'utiliser des fonctions dans tes fichiers php pour gérer le contenu principal (ce qui permet d'insérer ces fichiers sans pour autant envoyer de données au client). Mais pour faciliter la maintenance de ton site, il est fortement conseillé de séparer au maximum la gestion des données (donc leurs contrôles / traitements) de l'affichage.
    OK pour ça, c'est vrai que pour certaines pages, j'ai des fichiers différents pour l'affichage des formulaires et le traitement.
    Donc je vais revoir ça.
    Citation Envoyé par Eusebe Voir le message
    Or, dans ton script index.php, tu inclus la page "dvd/dvd_selection.php" vers la ligne 120 alors que dès la ligne 10 des données sont envoyées au client (et donc les en-têtes aussi).
    Je vois bien la ligne 'dvd/dvd_selection.php' mais je voudrais juste que tu me dises ce que raconte la ligne 10

  12. #12
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    Citation Envoyé par Eusebe Voir le message
    Il y a plusieurs solutions pour cela, une des plus simples étant probablement d'utiliser des fonctions dans tes fichiers php pour gérer le contenu principal (ce qui permet d'insérer ces fichiers sans pour autant envoyer de données au client). Mais pour faciliter la maintenance de ton site, il est fortement conseillé de séparer au maximum la gestion des données (donc leurs contrôles / traitements) de l'affichage.
    OK pour ça, c'est vrai que pour certaines pages, j'ai des fichiers différents pour l'affichage des formulaires et le traitement.
    Donc je vais revoir ça.
    Citation Envoyé par Eusebe Voir le message
    Or, dans ton script index.php, tu inclus la page "dvd/dvd_selection.php" vers la ligne 120 alors que dès la ligne 10 des données sont envoyées au client (et donc les en-têtes aussi).
    Je vois bien la ligne 'dvd/dvd_selection.php' mais je vois pas ce que raconte la ligne 10

  13. #13
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    La ligne 10 ne "raconte" rien

    C'est justequ'à cet endroit de ton script tu fermes la balise php et commence à envoyer des données au client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    session_start();
    if(isset($_GET['deconnexion']) && $_GET['deconnexion']=="1"){
    	session_unregister('id_proprietaire');
    	session_unregister('utilisateur');
    	session_unregister('niveau');
    	session_destroy();
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    Après avoirfermé la balise (?>), dès le premier caractère (dans ton cas dès le retour à la ligne), des en-têtes HTTP sont envoyées au client.

  14. #14
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 494
    Par défaut
    Mais si tu peux utiliser header(), même à la fin si tu veux.
    Utilise ob_start() et ob_end_flush()

Discussions similaires

  1. [PHP-JS] problème headers already sent
    Par charlene44 dans le forum Langage
    Réponses: 12
    Dernier message: 14/06/2006, 13h55
  2. Réponses: 11
    Dernier message: 11/05/2006, 11h16
  3. [Cookies] cookies et 'headers already sent'
    Par wellser dans le forum Langage
    Réponses: 5
    Dernier message: 26/04/2006, 13h37
  4. [Cookies] Warning : headers already sent
    Par arti2004 dans le forum Langage
    Réponses: 8
    Dernier message: 04/04/2006, 16h31
  5. [JpGraph] Header already sent
    Par grunk dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 09/02/2006, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo