8792 sujets

Développement web côté serveur, CMS

J'ai réalisé un ensemble de scripts qui marchaient très bien ... jusqu'à ce que j'installe des sessions PHP.

Dans le fichier ci-dessous par exemple, le script se déroule très bien, sauf le header : il ne l'exécute plus. Le résultat est une page totallement blanche (au niveau du code HTML)

<?php
// Déclaration du niveau d'autorisation requis pour cette page
	$autorisation = 3;
session_start();

	if(!isset($_SESSION['login'])) {
		header('location: ../prive/identification.php');
		exit;
	}
	
	$niveau = ($_SESSION['niveau']);
	if($niveau < $autorisation) {
		header('location: ../prive/niveau.php');
		exit;
	}

// Déclaration des paramètres de connexion
	include '../general/connexion.php';

// Connexion au serveur
	mysql_connect(hote, utilisateur, motdepasse) or die("erreur de connexion au serveur");
	mysql_select_db(bdd) or die("erreur de connexion a la base de donnees");

// Lancement de la requete pour supprimer une fiche
	$requete ='DELETE from evaluation_structure WHERE id="'.$_GET['identification'].'"';
		
// on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die)
	mysql_query($requete) or die('Erreur SQL !'.$requete.'<br />'.mysql_error());

// on ferme la connexion à la base
	mysql_close();

// on redirige le visiteur vers la page d'où il vient
	header('location: evaluations.php');
		
// on termine le scrit courant
	exit();
	
?>

Modifié par Bepimaco (01 Nov 2005 - 15:29)
Bonjour,
Est-tu bien sûr qu'il n'y a aucune sortie HTML ? print, echo, ...
fais aussi attention aux espaces blancs avant <?php, c'est souvent la cause du problème.
Si tu codes en utf8, fais attention qu'il n'y ait pas de prologue identifiant ce jeu de caractères
J'ai tout revérifié, je ne vois aucun echo, code HTML ni affichage. Ce qui me surprends, c'est que les premiers header fonctionnent. Si l'utilsateur n'est pas enregistré, ilest refirigé vers la page d'identification.

En ce qui concerne utf8, je ne connais pas : je ne dois donc pas l'utiliser ...

Pas d'esapce ni de lignes avant le PHP ...

J'avoue que je sèche
Re-bonsoir

En enlevant toute la première partie, ça marche (du début à // paramètres de connexion)

Ce sont donc les sessions qui bloquent ! Je ne peux pas avoir une page sécurisée + un header ...
Modifié par Bepimaco (01 Nov 2005 - 18:35)
Quand je dis espace blanc, c'est : espace, tabulation, retour de ligne, ...
imagine le truc tout con :

<?php
.....
?>
<?php
.....
?>

et ben le retour de ligne entre ?> et <?php compte aussi !!
Je débarque en ne sachant pas si tu as résolu ton pb.

Peut-être as-tu malgré tout une sortie html, si l'un des "or die()" s'active, c'est à dire en cas d'erreur de traitement.

Ce qui expliquerait que les premiers headers fonctionnent, mais qu'une erreur de traitement ultérieure émettant du html inactive le dernier header.

Je n'ai jamais eu d'incompatibilité entre sessions et redirections par header.

A côté de la plaque ?
Smiley smile
Salut,
Je vais essayer d'apporter ma contribution. Lors de session, il faut que le "session_start()" soit la toute première ligne de ton code sous peine de problème de header justement.

tu as ça :
a écrit :
<?php

// Déclaration du niveau d'autorisation requis pour cette page

$autorisation = 3;

session_start();


Il faut :

<?php
session_start();


// Déclaration du niveau d'autorisation requis pour cette page

	$autorisation = 3;


Il ne faut même pas de retour chariot avec le session_start(). J'ai rencontré ce problème plusieurs fois.

Mais peut être que ce n'est pas ça ton problème, car en théorie il devrait te mettre un header already sent ou un truc du genre comme message d'erreur.


J'édite vite fait pour rajouter un ptit truc.

Je vois que tu utilise des header ("Location :....)

Essai à la place de mettre un javascript pour voir si ça vient pas de ça. Je me souviens plus exactement du code pour remplacer l'url mais ça serait du style :

print ("<script>document.location.replace('tapage');</script>");


Je sais qu'il faut éviter d'utiliser du javascript quand on le peut, mais ça me parait être une bonne alternative si tu veux débogguer ton code.
Modifié par trigun (24 Nov 2005 - 10:33)