Page 1 sur 1

[Script PHP] Pseudos-frames et espace membres

Posté : 02 avr. 2006 à 12:39
par boguet
Bonjour à tous !

Alors j'ai un problème avec mon script d'espace membre. En fait, c'est parce que j'utilise des pseudos-frames et j'ai des erreurs avec les session_start();

Je vous donne le code d'erreur déjà :

Code : Tout sélectionner

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /media/160go/hebergement/login/index.php:17) in /media/160go/hebergement/login/login.php on line 19

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /media/160go/hebergement/login/index.php:17) in /media/160go/hebergement/login/login.php on line 19

Warning: Cannot modify header information - headers already sent by (output started at /media/160go/hebergement/login/index.php:17) in /media/160go/hebergement/login/login.php on line 21
Ligne 19 - 21 de login.php :

Code : Tout sélectionner

session_start();
$_SESSION['login'] = $_POST['login'];
header('Location: membre.php');

Voilà merci à ceux qui peuvent m'aider !

A bientôt.

Posté : 02 avr. 2006 à 12:56
par spitfire pat
ce ne sont pas les lignes 19-21 de login.php qui importent

c'est parce que login/index.php a affiché quelque chose en ligne 17 que cette erreur survient

Posté : 02 avr. 2006 à 12:59
par boguet
spitfire pat a écrit :ce ne sont pas les lignes 19-21 de login.php qui importent

c'est parce que login/index.php a affiché quelque chose en ligne 17 que cette erreur survient

Code : Tout sélectionner

17. <?php 
18. include('menu1.htm'); 
19. ?>

Posté : 02 avr. 2006 à 13:08
par Fly
session_start() dois être appelé avant tout affichage, quand t'inclus ton menu ça l'écris.
Ça dois être la toute première instruction de ta page.
http://php.net/session_start

Posté : 03 avr. 2006 à 16:42
par boguet
Fly a écrit :session_start() dois être appelé avant tout affichage, quand t'inclus ton menu ça l'écris.
Ça dois être la toute première instruction de ta page.
http://php.net/session_start
Ok merci pour ta réponse !

Mais alors, dans quelle page inclure le session start ?

Voici mon code de pseudos-frames (index.php) :

Code : Tout sélectionner

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title>.Titre.</title>
  <link href="css/style.css" type=text/css rel=stylesheet>
</head>

<body>

<div id="banniere"></div>
 
  <div id="colonne">

    <div class="menu">
    
<?php 
  include('menu1.htm'); 
?>

</div>

    <div class="menu">
    
<?php 
  include('menu2.php'); 
?>

</div>


</div>


<div id="principal">


<?php
$page_go = FALSE;
if ( isset( $_GET['page'] ) and !empty( $_GET['page'] ) ) {
    switch( $_GET['page'] ) {

        case 'accueil' : $page_go = 'accueil.php'; break;      
    }
    if( !empty( $page_go ) and file_exists( $page_go ) ) {
        include( $page_go );
    } elseif( $page_go === FALSE ) {
        echo'<p align="center">...</p>';
    }
}
else {
        // Ici on met la page par défaut
    include( 'page.php' );
}
?>

</div>

<div id="pied">Copyright...br />
</div>

</body>
</html>
Alors si je mets la session au début de la page index.php :

Code : Tout sélectionner

<?php
session_start();
if (!isset($_SESSION['login'])) {
    header ('Location: login.php');
    exit();
}
?>
He ben ça ne vas pas logiquement donc, comment faire ?

Merci pour ta réponse.

Posté : 06 avr. 2006 à 16:28
par boguet
Je me permet un petit "up" car je n'ai pas très bien compris la doc. que tu m'a fournie.

Merci.

Posté : 06 avr. 2006 à 20:12
par shadowfr
Mettre le session_start au début de ta page index ^^

Code : Tout sélectionner

index.php

Code : Tout sélectionner

<?php
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

.....
headers already sent by (output started
Cette erreur la je la rencontre souvent dans mes scripts
J'ai trouvé, il y a longtemps, un moyen de la corriger

Il suffit de mettre tout en haut de ta page d'index, avant même un session_start, ce code :

ob_start();

et tout en bas :

ob_end_flush();

(j'avoue ne pas trop comprendre pourquoi, mais ça marche, c'est le principal :lol: )

Posté : 07 avr. 2006 à 16:47
par boguet
Salut !

Merci beaucoup pour ta réponse ! J'ai pu finir mon espace membre de A à Z aujourd'hui !

Merci mille fois...

Posté : 07 avr. 2006 à 21:42
par boguet
Euh encore juste un truc...

J'ai une rubrique sur laquelle j'aimerais mettre une protection pour les non-inscrits. Je m'explique :

J'aimerais restreindre l'accès à une rubrique. Seul les membres enregistrés peuvent y accéder. Donc, sur la page je mets que le visiteur doit être enregistré pour accéder à la rubrique, jusque-là, aucun problème.

Mais, si le visiteur s'est déjà inscrit, je mets mon formulaire d'identification. Lorsque il se connecte, il va directement être redirigé sur la bonne rubrique et non sur l'accueil de l'espace membre.

Comment faire ??

Posté : 08 avr. 2006 à 11:36
par Vlad Tepesch
Comme sur phpbb :)

Avec un champ caché :

<input type="hidden" name="redirect" value="./page.php" />

Au moment où tu fabrique le formulaire, tu regarde c'est quelle page qu'il essaie d'afficher, et tu le met à la place de page.php.

Ensuite, quand tu traite le formulaire, si le login est bon, tu n'as plus qu'à faire :

header('location:'.$_POST['redirect']);