Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/08/2012, à 14:45

Vuel

[Résolu]PHP - header qui marche (curieusement) entre balises HTML

Bonjour à tous !

Désolé pour ce titre un peu farfelu, je cherche à comprendre le pourquoi du comment de l'header PHP :

Je vous explique le soucis :

J'ai un formulaire de connexion basique sous un serveur WAMP à mon boulot et sur mon movamp perso :

connexion.php

<?php
include('include.php')
$error = "";
if(isset($_POST["login"]) && isset($_POST["pass"])) { 
	$login = mysql_real_escape_string ($_POST['login']);
	$pass = mysql_real_escape_string (sha1($_POST ['pass']));
	
		
$resultat_login= mysql_query("SELECT * FROM profil WHERE login = '$login' AND pass = '$pass');
$done= mysql_fetch_array($resultat_login);

if (!empty($done['login'])) 
{
	$_SESSION['user'] = $done['login'];
	header("Location:accueil.php");
	} 
        else 
        {
	$error="Mauvais identifiant et/ou mot de passe";
	}

}
?>
<center>
	<h1 class="titleindex" >administration</h1>

	<div id="global">
		<form method='post' action='#'>
			<fieldset>
				<p class="error" id="error">{$error}</p>
				<legend class="titlelegend">Authentification</legend>
					<label class="labelindex" for = 'login'> email </label>
					<input class="inputindex" type ='text' name = 'login' id ='login'></input><br/>			
					<label class="labelindex" for = 'pass'> Mot de passe </label>
					<input class="inputindex" type ='password' name = 'pass' id ='pass'></input><br/>
					<br/>
					<input class="connectindex" type='submit' action='Envoyer' value="Connexion"><br/>
			</fieldset>
		</form>
	</div>
</center>

Je ne vous cache aps que dans l'include il y a toutes les balises html avec le JS :

include.php

session_start();
include("BDD.php");
<head>
	<link rel='stylesheet' media='screen' href='../css/style.css' />
	<script type='text/javascript' src='../js/verification.js'></script>
</head>

Nous serrons je pense d'accord de dire que normalement, à cause de l'include, le header du connexion.php devrait me retourner la traditionnel :

Warning: Cannot modify header information - headers already sent by

Et bien sur le serveur wamp la redirection ce fait bien alors que je devrais avoir l'erreur, qui apparait bien sur le movamp !

Je pense que ça vient du serveur car le code que je vous expose est très simplifié comparé au mien, mais je retrouve le même problème, celui-ci marche sous wamp alors que je devrais avoir l'erreur  hmm.

J'ai fais plusieurs test du genre simplement :

include("include.php");
header("Location:test.php");

A chaque fois tout fonctionnes sur le WAMP.



Si quelqu'un a une piste je suis preneur car rien n'est marqué dans la doc et rien sur internet me permet de penser que l'header peut être mit après du HTML.

Merci de votre lecture


edit :

Même avec ce bout de cote la redirection ce fait hmm

<html>
<head>
<title> Coucou</title>


<body>
<?php 

header("Location:test.php");
?>
</body>
</html>

Dernière modification par Vuel (Le 28/08/2012, à 09:23)

Hors ligne

#2 Le 27/08/2012, à 14:54

Mathieu147

Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML

Bonne question! Ça m'intéresse aussi.

Tu as une faute de frappe dans ta requête SQL (ANS → AND)


Pffff…

Hors ligne

#3 Le 27/08/2012, à 14:56

Vuel

Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML

Merci, j'ai refait un code vite fait pour illustrer smile.

En tout cas, je n'ai rien trouvé nulle part, site Français/Anglais, doc PhP, rien hmm

Hors ligne

#4 Le 27/08/2012, à 15:00

pires57

Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML

tu as essayer de remplacer ton include par un require_once?
si mes souvenir sont bon ton "!empty" vérifie ici que ta variable n'est pas une chaine vide or elle ne l'es pas dans ton exemple si tu tape ton mot de passe.

Dernière modification par pires57 (Le 27/08/2012, à 15:08)


Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn

Hors ligne

#5 Le 27/08/2012, à 15:09

Vuel

Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML

La même chose, la redirection ce fait sous wamp, l'erreur apparait sous movamp.

Ce n'est pas le !empty qui me pose soucis smile et je le fais sur un retour du fetch_array, je verifie que mon tableau $done['login'] n'est pas vide

Dernière modification par Vuel (Le 27/08/2012, à 15:11)

Hors ligne

#6 Le 27/08/2012, à 15:19

Netux

Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML

En effet...


Laptop ASUS X73SV: Intel Core i5-2430M @ 2,4GHz ~ 3,1GHz + Intel HD 3000 / NVIDIA GT 540M + 6Go RAM + 2 X 640 Go
OS: Ubuntu 12.10 64bits + Kali Linux 1.0.2 64bits

Hors ligne

#7 Le 27/08/2012, à 15:27

pires57

Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML

tu n'as aucun message d'erreur dans le fichier d'erreur d'apache?


Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn

Hors ligne

#8 Le 27/08/2012, à 15:28

ssdg

Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML

Perso, je partirait sur une histoire de mise en cache de la page. J'ai déjà eu un collègue qui connaissait le PHP du point de vue technique mais qui était un peu déraisonnable qui disait:
Tu veux mettre une redirection en plein milieu d'une page de 500Mo? (j'exagère un peu dans ma reconstitution)
Facile! Active le cache et met ton php_header en plein milieu.

À partir de ça, j'aurais tendance à me dire que ce qui se passe est:
1) je commence à remplir mon cache
2) je met mon php_header, ça passe et le header part en premier
3) j’atteins la limite du cache et le début de la page est écrit dans le flux réseau.

Un phénomène similaire peut se voir avec un programme en C qui écrirait dans stderr et stdout. (les sorties standard et d'erreur)

Edit: pour ceux qui cherchent une erreur, si c'est bien ça, ne cherchez pas, ce n'en est pas une, c'est juste une abomination que permet PHP et qui est très bien documentée. (pourquoi abomination? parceque les headers sont la couverture de la page à venir. Si le client reçoit la couverture au fur et à mesure de la lecture de la page, elle ne sert plus à rien. (image alternative: on a d'abord l'enveloppe dans les mains avant de lire le courrier qui est dedans)

Dernière modification par ssdg (Le 27/08/2012, à 15:31)


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#9 Le 27/08/2012, à 15:34

Jules Petibidon

Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML

A vue de pied, c'est sûrement une directive de configuration de WAMP, à voir peut être dans le phpinfo. Soit une directive concernant l'output buffering, soit même un auto prepend file qui déclenche l'output buffering (moins probable)

Hors ligne

#10 Le 27/08/2012, à 15:55

Vuel

Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML

pires57 -> aucune erreur coté wamp, en tout cas rien de visible

ssdg -> comme je l'ai expliqué j'ai essayé de le faire avec des pages très minimaliste en prenant soin de faire un ctrl+F5 à chaque rechargement  et j'avais toujours le même soucis.

Julmes Petibidon -> Qu'est ce que je dois chercher exactement ? Une commande dans le php info qui me permettrais de faire des redirections magiques hmm ? Comment vérifier cette hypothése ?

Merci de vos réponses

Hors ligne

#11 Le 27/08/2012, à 16:09

mazarini

Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML

Voir dans php.ini le paramètre : output_buffering
Si tu ne veux/peux pas  modifier php.ini, utilise la fonction ob_start() en début de script.

De mémoire, le même problème se produit avec les cookies.

Sur le principe le mieux est de faire le traitement puis d'afficher la page. Pas de problème dans ce cas.


S'il existait une école de la politique, les locaux devraient être édifiés rue de la Santé. Les élèves pourraient s'habituer. (Pierre Dac)

Hors ligne

#12 Le 27/08/2012, à 16:20

Vuel

Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML

Jules Petibidon et Mazarini on vue juste, en activant l'output_buffering dans le movamp la redirection ce fait bien.

Donc, est-ce une bonne chose de l'activer ou pas ?!

Et si on l'active est-ce une bonne choses de profiter pour faire les redirections en header() ?!

Merci de vos réponses

Dernière modification par Vuel (Le 27/08/2012, à 16:43)

Hors ligne

#13 Le 27/08/2012, à 17:02

Jules Petibidon

Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML

Non, c'est une très mauvaise chose.
Et c'est une vaste connerie de WAMP de l'activer par défaut
Le mieux serait de le désactiver dans le php.ini de WAMP, et de modifier ton code en conséquence si tu plantes.

Hors ligne

#14 Le 27/08/2012, à 17:03

mazarini

Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML

J'ai l'habitude de faire du buffering et en cas d'erreur, j'annule la sortie en cours et j'affiche la page d'erreur.

Par contre, je ne commence l'affichage qu'après la fin des traitements.


S'il existait une école de la politique, les locaux devraient être édifiés rue de la Santé. Les élèves pourraient s'habituer. (Pierre Dac)

Hors ligne

#15 Le 28/08/2012, à 09:20

Vuel

Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML

D'accord merci pour vos réponses, je vais me documenter sur l'OB et du coup je pense remanier mon code smile
Sujet résolut ^^

Hors ligne