sessions PHP chez free - PHP - Programmation
Marsh Posté le 09-11-2004 à 09:49:19
le session_start() doit être la première instruction envoyée. rien ne doit être affiché auparavant !
Marsh Posté le 09-11-2004 à 11:27:41
Merci beaucoup pour ta reponse, mais, j'ai donc remplacer le code php par
<?
session_start();
$db = mysql_connect('sql.free.fr','base','password') or die ("erreur de connexion" );
mysql_select_db('joueurs',$db) or die ("erreur de connexion base" );
$sql = "select id,datecrea,email,pseudo,password from joueurs where pseudo = '$pseudo' AND password = '$password' AND valid= '1'";
$result = mysql_query($sql) or die("impossible d executer la requete" );
$num = mysql_numrows($result);
if ($num == 1) // le pseudo a été trouvé
{
session_register("pseudo" );
echo "<center>Bienvenu sur votre espace membre : $pseudo</center>";
$sess_nom = session_name();
$sess_id = session_id();
echo "Le nom de la session est :<br> ";
echo $sess_nom." et l'Id est : ".$sess_id."";
echo "<a href=\"page.php\">Page Essai</a>";
}
else
{
print "non ident, pas valid<br>";
}
?>
Et j'obtiens exactement la même erreur.
Merci de votre aide.
Marsh Posté le 09-11-2004 à 11:54:27
oui, bien sûr :
Identification :
<form method="post" action="login.php">
pseudo<input type="text" name="pseudo"><br>
mot de passe<input type="text" name="password"><br>
<input type="submit" name="submit" value="S'identifier">
</form>
Marsh Posté le 09-11-2004 à 12:01:09
oups, désolé, j'ai répondu trop vite.
Avant le code php, j'ai ca :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
puis le code php du message précédent
Marsh Posté le 09-11-2004 à 12:47:52
bah c pour ca! Comme l'a dit Titone il faut que session_start() soit mis avant ton <!DOCTYPE bla bla />
Marsh Posté le 09-11-2004 à 12:50:14
Citation : le session_start() doit être la première instruction envoyée. rien ne doit être affiché auparavant ! |
Ca veut dire ce que ça veut dire. Si tu as du html avant tu as affiché quelquechose.
Marsh Posté le 09-11-2004 à 12:50:55
.. Rien désolé
Marsh Posté le 09-11-2004 à 13:56:43
Parfait, merci 1 000 fois. Mais du coup, avec le lien sur la page essai, je suis sorti de la session.
Voici le code de page.php :
<?php
session_start();
$server = "sql.free.fr";
$user = "user";
$pass = "pass";
$base = "joueurs";
if(!session_is_registered(login)) {
echo "<center>Vous devez vous identifier pour accéder à cette page</center>";
}
else {
echo "<center>Bienvenu sur votre espace membre $login</center>";
}
?>
Il m'affiche systématiquement sur la page "Vous devez vous identifier pour accéder à cette page"
Autres question pendant quze j'y suis, une fois que ce premier probleme sera corrigé, et parce que je débute vraiment : comment j'affiche dans cette page par exemple le champ ID de la ligne correspondant au pseudo sur cette page ?
Marsh Posté le 09-11-2004 à 15:30:48
titione a écrit : le session_start() doit être la première instruction envoyée. rien ne doit être affiché auparavant ! |
C'est pas tout à fait exact . La première phrase est fausse, la deuxième est vraie.
Il ne faut pas que le header HTTP ait été envoyé. Or par défaut (c'est-à-dire sans bufferisation de sortie), dès que tu écris sur la sortie, ça envoie le header HTTP, d'où le message d'erreur.
Marsh Posté le 09-11-2004 à 15:44:10
Merci pour ta réponse, mais comme je te l'ai dit, je débute, et donc ta réponse, c'est du chinois pour moi ;-)
Marsh Posté le 09-11-2004 à 16:10:00
Merci, je viens de faire un grand pas en avant. Heureusement que les forums sont là et que des gens comme toi y participent ! Je vais sur httppourlesdebutants.com ??
Ou tu me donnes vraiment un coup de main ?
Marsh Posté le 09-11-2004 à 16:21:58
ReplyMarsh Posté le 09-11-2004 à 16:45:26
Ouais... Si quelqu'un d'autre à une idée...
Merci Ratibus.
Marsh Posté le 09-11-2004 à 17:12:33
oui : la même que ratibus.. ) faire un site web c'est clair que c'est marrant et tout mais c'est quand même un métier pour d'autres ce qui signifie qu'il y a un certain savoir-faire etc... bref c'est pas inné et c'est pas un truc qui se fait facilement non plus !! à partir de là si on a envie de faire un site Internet faut se donner les moyens : apprendre doucement et procéder par étape !
c'est exactement pareil que quand tu commences à refaire ta maison : le pro il fera ça à tout de vitesse, et toi tu vas en chier un peu plus, tu vas traîner sur certains trucs, tu vas te planter par moment etc...
là c'est pareil : faut commencer par les choses simples puis dès que tu as compris, les adapter à tes besoins etc.. il y a de multiples tutoriaux sur Internet qui explique relativement bien chaque petit difficulté du php/html.. à toi de voir ceux qui t'intéressent, de les faire et de les adapter à ton site !
après effectivemetn si il y a un point que tu comprends pas, le forum est là (celui là comme un autre) pour toi !
on ne peut pas sur topic de forum apprendre le html et le php de manirèe globale : on ne serait pas crédible quand tu vois qu'une formation dans ce domaine coûte environ 1500 euros et dure 5 jours !!
voilà ce que j'en pense
Marsh Posté le 09-11-2004 à 17:29:41
Moi, ce que j'en pense, c'est que ce que j'ai aprris, je l'ai appris dans les bopuquins (j'en aia caheté trois) et sur les sites d'initiation. Là, suis bloqué sur un truc, donc je demande sur un forum, un peu comme tu le dis titione... Vous n'avez pas la réponse à mon probleme, ou vous ne voulez pas la donner ?
Marsh Posté le 09-11-2004 à 21:47:47
Tition et Ratibus, je reviens vers vous : je vous ai précisé que j'étais débutant. Croyez-vous que le document sur le protocole HTTP est accessible pour un débutant ? Je viens de le lire, et évidemment, je n'ai pas compris un mot sur trois. Je pensais que la vocation des forums était d'aider les débutants de bonne volonté et non pas de les exclure sous couvert d'un certain "elitisme" ("Je vois tellement de question passer qui n'ont pas de sens quand on connait HTTP." ). Bref, j'en suis toujours au même point....
Marsh Posté le 09-11-2004 à 22:20:26
Reposte clairement le code de tes différentes pages et je t'aiderai.
Marsh Posté le 09-11-2004 à 22:31:02
Merci par avance :
A noter ici que je fais des tests pour comprendre. J'ai lu plein de trucs pour mon probleme, j'ai vraiment rien trouvé.
3 pages :
- test.html : ou tu te loggues, formulaire avec post qui pointe sur login.php
- login.php : tu es identifié ou pas avec enregistrement de ssession
page.php : page de test pour voir si la session est active.
Le code :
test.html :
Identification :
<form method="post" action="login.php">
pseudo<input type="text" name="pseudo"><br>
mot de passe<input type="text" name="password"><br>
<input type="submit" name="submit" value="S'identifier">
</form>
login.php :
<?
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?
$db = mysql_connect('sql.free.fr','user','pass') or die ("erreur de connexion" );
mysql_select_db('joueurs',$db) or die ("erreur de connexion base" );
$sql = "select id,datecrea,email,pseudo,password from joueurs where pseudo = '$pseudo' AND password = '$password' AND valid= '1'";
$result = mysql_query($sql) or die("impossible d executer la requete" );
$num = mysql_numrows($result);
if ($num == 1) // le pseudo a été trouvé
{
session_register("pseudo" );
echo "<center>Bienvenu sur votre espace membre : $pseudo</center>";
$sess_nom = session_name();
$sess_id = session_id();
echo "Le nom de la session est :<br> ";
echo $sess_nom." et l'Id est : ".$sess_id."";
echo "<a href=\"page.php\">Page Essai</a>";
}
else
{
print "non ident, pas valid<br>";
}
?>
</body>
</html>
Et la page page.php :
<?php
session_start();
$server = "sql.free.fr";
$user = "user";
$pass = "pass";
$base = "joueurs";
if(session_register(pseudo)) {
echo "<center>Bienvenu sur votre espace membre $login</center>";
echo "$email";
}
else {
echo "<center>Vous devez vous identifier pour accéder à cette page</center>";
}
?>
Merci d'avance, et desolé, je sais pas afficher mon code joliment ici.
Marsh Posté le 09-11-2004 à 22:39:19
Ne t'embete pas ratibus. les codes que je viens de te filer sont les derniers apres maintes recherches, et j'ai merde das page.php : j'ai mis login au lieu de pseudo. Je vies de modifier ce dernier point et cela semble marcher.
Merci 1 000 fois.
Marsh Posté le 10-11-2004 à 13:22:23
pour le problème des sessions j'ai eu le même problème que toi. En local avec easyphp, les sessions sont stocké dans des fichiers dans le dossiers "sessions" et sur free ça ne fonctionnait pas. J'ai créé un dossier Session à la racine du ftp et ça marche...chelou
Marsh Posté le 10-11-2004 à 13:40:06
Non, ca c'est pas chelou. J'avais fait cela aussi et dès le début. Mon probleme venait d'ailleurs.
Marsh Posté le 10-11-2004 à 14:38:30
Bravo !
Bon avec ça t'as un début de site qui te fais comprendre HTTP, HTML, PHP et MYSQL. Pas mal non ?
Une remarque toutefois :
$sql = "select id,datecrea,email,pseudo,password from joueurs where pseudo = '$pseudo' AND password = '$password' AND valid= '1'";
Cette requête est dangereuse si tu ne te protège pas contre les attaques du type "SQL injection" ( Je te laisse le soint de te renseigner sur ce point ).
Il vaut mieux faire un truc du genre :
$sql = "select id,datecrea,email,pseudo,password,valid from joueurs where pseudo = '$pseudo'";
Tu vérifie ensuite que tu récupère bien 1 et 1 seul enregistrement, que $pseudo est bien identique à celui renvoyé par la requête, idem pour le pass bien sûr et enfin pour valid.
D'autre part, vu le code, tu est en register global ON ce qui est aussi une faille E N O R M E !
Bienvenue dans un monde subtil tout plein de requin sournois
Marsh Posté le 09-11-2004 à 09:31:28
Bonjour,
Suis vraiment débutant en php.
Je souhaite faire une session chez free.
J'ai bien créer un répertoire sessions à la racine chez free.
J'ai une page HTML avec un post vers login.php pour l'identification.
Le code de la page login.php est
<?
$db = mysql_connect('sql.free.fr','base','password') or die ("erreur de connexion" );
mysql_select_db('joueurs',$db) or die ("erreur de connexion base" );
$sql = "select id,datecrea,email,pseudo,password from joueurs where pseudo = '$pseudo' AND password = '$password' AND valid= '1'";
$result = mysql_query($sql) or die("impossible d executer la requete" );
$num = mysql_numrows($result);
if ($num == 1) // le pseudo a été trouvé
{
session_start();
session_register("pseudo" );
echo "<center>Bienvenu sur votre espace membre : $pseudo</center>";
$sess_nom = session_name();
$sess_id = session_id();
echo "Le nom de la session est :<br> ";
echo $sess_nom." et l'Id est : ".$sess_id."";
echo "<a href=\"page.php\">Page Essai</a>";
}
else
{
print "non ident, pas valid<br>";
}
?>
et la page login.php m'affiche :
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /var/www/free.fr/4/4/crime.orient.express/login.php:9) in /var/www/free.fr/4/4/crime.orient.express/login.php on line 10
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/free.fr/4/4/crime.orient.express/login.php:9) in /var/www/free.fr/4/4/crime.orient.express/login.php on line 10
Merci de bien vouloir m'aider.
Et désolé si la réponse est déjà ailleurs, j'ai chercher sans résultat.
Pierre