Problème de session : sortie html avant un session_start (V2)

Répondre
bounn
le 04/02/2005 à 14:17
bounn
Re bonjour, voici mon souci apres mon probleme de sessions start, j'ai décidé de faire mon code comme ceci, ce qui est meme plus simple:
<?php
// on teste si le visiteur a soumis le formulaire
if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
// on teste l'existence de nos variables. On teste également si elles ne sont pas vides
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm']))) {
// on teste les deux mots de passe
if ($_POST['pass'] != $_POST['pass_confirm']) {
$erreur = 'Les 2 mots de passe sont différents.';
}
else {
$base = mysql_connect ('localhost', '****', '****');
mysql_select_db ('test', $base);

// on recherche si ce login est déjà utilisé par un autre membre
$sql = 'SELECT count(*) FROM membre WHERE login="'.addslashes($_POST['login']).'"';
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error());
$data = mysql_fetch_array($req);

if ($data[0] == 0) {
$sql = 'INSERT INTO membre VALUES("", "'.addslashes($_POST['login']).'", "'.md5(addslashes($_POST['pass'])).'")';
mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error());

session_start();
$_SESSION['login'] = $_POST['login'];
header('Location: membre.php');
exit();
}
else {
$erreur = 'Un membre possède déjà ce login.';
}
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
?>
<html>
<head>
<title>Inscription</title>
</head>

<body>
Inscription à l'espace membre :
<form action="inscription.php" method="post">
Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo stripslashes(htmlentities(trim($_POST['login']))); ?>">
Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo stripslashes(htmlentities(trim($_POST['pass']))); ?>">
Confirmation du mot de passe : <input type="password" name="pass_confirm" value="<?php if (isset($_POST['pass_confirm'])) echo stripslashes(htmlentities(trim($_POST['pass_confirm']))); ?>">
<input type="submit" name="inscription" value="Inscription">
</form>
<?php
if (isset($erreur)) echo '',$erreur;
?>
</body>
</html>



et voici mon erreur : Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/free.fr/9/0/ledey.florian/test/index.php:5) in /var/www/free.fr/9/0/ledey.florian/test/index.php on line 47

Warning: Cannot modify header information - headers already sent by (output started at /var/www/free.fr/9/0/ledey.florian/test/index.php:5) in /var/www/free.fr/9/0/ledey.florian/test/index.php on line 49
bounn
le 04/02/2005 à 14:27
bounn
je me suis tromper de code le voici

<?php
session_start();
if (!isset($_SESSION['login'])) {
header ('Location: connection.php');
exit();
}
?>
<table width="100%">
<tr>
<td colspan="3">
<?
// On inclue le haut de la page
include("haut.php");
?>
</td>
</tr>
<tr>
<td width="20%">
<?
// Puis on inclue le menu
include("menu.php");
?>
</td>
<td>
<?
// Maintenant on met le code de notre page (ce qu'on veut)
// Ce code peut bien entendu contenir du PHP comme du HTML
?>
<html>
<head>
<title>Espace membre</title>
</head>
<body>
<h1 align="center"><u><i><font face="Alfredo's Dance" size="4">Bienvenue sur
blaguer.fr.st</font></i></u></h1>
<center>
<img border="0" src="penser.gif" width="429" height="400"></p>
Bienvenue <?php echo htmlentities(stripslashes(trim($_SESSION['login']))); ?> !<br /
<a href="deconnexion.php">Déconnexion</a>
<p align="left"><b><u>Intro:</u></b></p> Ce site est à votre service. Il est
la pour vous détendre, vous faire rire et passer du bon temps. Toutes les
remarques ou critiques sont les bienvenues aussi, car elles permettront d'améliorer
le site.<p align="center"><u><b>
--------------------------------------------------------------------------</b></u></p>
<p>&nbsp;</p>
<p><u><b>Les News:</b></u></p>
<? mysql_connect("localhost", "**", "**"); // Connexion à MySQL
mysql_select_db("***");

$reponse = mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT 0,1"); // Requête SQL

// On fait une boucle pour lister tout ce que contient la table :
while ($news = mysql_fetch_array($reponse) )
{
?>
<br><b><u>Sujet:</u><?echo $news['titre'];?></b><br><p>
<? echo $news['contenu'];?><br></p>
<p align="right"><i><font color="#FFFFFF">Posté par <? echo $news['auteur'];?> le <? echo $news['date'];?></font></p></i>
<?
}
mysql_close(); // Déconnexion de MySQL
?>Pour consuler les 30 dernières News c'est <a href=news.php>ici</a>
</font>
<p align="center"><u><b>
--------------------------------------------------------------------------</b></u></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; </p>
<center><SCRIPT LANGUAGE="JavaScript"
SRC="http://www.maxiservices.net/lastpost/lastpost.php?id=8323"></SCRIPT> &nbsp;<p>&nbsp;</p>
<p align="center"><u><b>
--------------------------------------------------------------------------</b></u></p>

<!-- Début du code i-trafic.com -->
<script language="Javascript" src="http://www.i-trafic.com/cpt.php?a=2081&txt=no""></script>
<!-- Fin du code i-trafic.com -->

</body>
</html>
zebden
le 04/02/2005 à 14:49
zebden
T'as quoi avant ton session_start ?

header,setcookie et session_start() , pas d'html avant, espace entre les les balises "?> <?php" compris (considéré comme un \n HTML).
zebdinou pour les intimes / Blog : http://www.zebden.fr
bounn
le 04/02/2005 à 14:53
bounn
j'ai rien compris a ta reponse, en tous cas un truc qui est sur, c'est que j'ai supprimer ma parti "news" qui etait dans ligne d'erreur et je me retrouve encore avec la meme erreur a la meme ligne sauf que cette fois c'est qu'un script java.
LA GLOBULE
le 04/02/2005 à 15:01
LA GLOBULE
Il ne faut rien afficher avant le session_start, meme pas un script javascript.
bounn
le 04/02/2005 à 15:03
bounn
donc je ne peu rien fair ecar tout mon site est en includ
LA GLOBULE
le 04/02/2005 à 15:04
LA GLOBULE
Si, faut retoucher le code de l'espace membre, et ne pas juste le copier coller.
zebden
le 04/02/2005 à 15:04
zebden
Si tu met ton session_start tout en haut sans HTML , javascript et tout ... ^_^
zebdinou pour les intimes / Blog : http://www.zebden.fr
bounn
le 04/02/2005 à 15:28
bounn
bon pour eviter de polluer un autre question que voici:

Voila je souhaiterai savoir si il exite un moyen de faire un truc du genre :

visiteur voir le dernier mess ==> clic sur suivant et apparait alors l'avant dernier et ainsi de suite.

pour le moment mon code s'arret a la
<? mysql_connect("localhost", "**", "**"); // Connexion à MySQL
mysql_select_db("***");

$reponse = mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT 0,1"); // Requête SQL

// On fait une boucle pour lister tout ce que contient la table :
while ($news = mysql_fetch_array($reponse) )
{
?>
<br><b><u>Sujet:</u><?echo $news['titre'];?></b><br><p>
<? echo $news['contenu'];?><br></p>
<p align="right"><i><font color="#FFFFFF">Posté par <? echo $news['auteur'];?> le <? echo $news['date'];?></font></p></i>
<?
}

mysql_close(); // Déconnexion de MySQL
il me reste manque plus que la possibilité d'afficher l'avant dernier, et ainsi de suite ca je souhait en avoir qu'un par page.


merci de votre aide
LA GLOBULE
le 04/02/2005 à 15:41
LA GLOBULE
Si tu mets qu'une news par page, ton while ne sert pas à grand chose.

Ensuite, il te suffit juste de mettre un lien précédent avec un paramètre qui va influencer ton LIMIT, exemple :

<?php
if (!isset($_GET['p'])) $_GET['p'] = 0;
$_GET['p']++;
echo '<a href="index.php?p='.$_GET['p'].'">Précédent</a>';
?>


Ensuite, tu utilises ce $_GET['p'] pour jouer sur ton LIMIT.

<?php
$sql = 'SELECT * FROM news ORDER BY id DESC LIMIT '.$_GET['p'].',1';
?>


Mais attention, au bout d'un moment, il n'y aura pas plus de news, il faut donc tester la validite de ton $_GET['p'] (de meme, il faut aussi tester qu'il contient bien que des chiffres).

PS : le sujet n'ayant rien à voir avec ton problème de session, tu aurais pu en créer un nouveau :/
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours