Page 1 sur 2

Les sessions, pbl...

Posté : 08 août 2005, 10:54
par wadzar
Salut!

C'est pas parceque j'ai posté un message dans les offres d'emploi que j'ai abandonné mon apprentissage!

Donc j'ai un problème avec les sessions:


J'ai 3 fichiers (je vais vous les donner en entier): login.htm, login.php, et espace_membre.php.

Dans l'ordre:

Login.htm

Code : Tout sélectionner

<html> <head> <title>Bienvenue sur BatlleForConquest!</title> </head> <body> <form action="login.php" method='post'> <table align="center" border="0"> <tr> <td>Pseudo :</td> <td><input type="text" name="login" maxlength="250"></td> </tr> <tr> <td>Mot de passe:</td> <td><input type="password"name="pass" maxlength="10"></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="log in"></td> </tr> </table> </form> </body> </html>
Login.php
         <html>
         <head>
         <title>Verification...</title>
         </head>
         <body>
         



<?

mysql_connect("localhost", "battleforconquest", "******") // connexion à la BDD

mysql_select_db("battleforconquest")

if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
  extract($_POST);
  // on recupère le password de la table qui correspond au login du visiteur
  $sql = "select pwd from tbl_user where login='".$login."'";
  $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

  $data = mysql_fetch_assoc($req);

  if($data['pwd'] != $pass) {
    echo '<p>Mauvais login / password. Merci de recommencer</p>';
    include('login.htm'); // On inclus le formulaire d'identification
    exit;
  }
  else {
    session_start();
    $_SESSION['login'] = $login;
    
    echo 'Vous etes bien logué';
    // ici vous pouvez afficher un lien pour renvoyer
    // vers la page d'accueil de votre espace membres 
  }    
}
else {
  echo '<p>Vous avez oublié de remplir un champ.</p>';
   include('login.htm'); // On inclut le formulaire d'identification
   exit;
}


?>
 
         </body>
         </html> 
espace_membre.php
         <html>
         <head>
         <title>Espace membre!</title>
         </head>
         <body>
         

// Protéger une page (verif.php) 
 
<?
session_start();

/* 
si la variable de session login n'existe pas cela siginifie que le visiteur 
n'a pas de session ouverte, il n'est donc pas logué ni autorisé à
acceder à l'espace membres
*/
if(!isset($_SESSION['login'])) {
  echo 'Vous n\'êtes pas autoriser à acceder à cette zone';
  include('login.htm');
  exit;
}
?>   

<? echo "Salut! Vous êtes bien sur votre espace membre!"; ?>

         </body>
         </html> 
Et Dans ma BDD nommée battleforconquest chez FREE, j'ai bien une table dans tbl_user avec les pseudo, login et password des membres...


Dés que j'entre mes coordonnées dans login.htm et que je fait entrer, ça me met:
Parse error: parse error, unexpected T_STRING in /var/www/free.fr/7/0/battleforconquest/login/login.php on line 14


Je sais, c'est long mais j'ai pensé qu'il vous fallait tout. :oops:


Merci d'avance, et
@+
Wadzar

Posté : 08 août 2005, 11:13
par david96
J'ai pas encore analysé à donf, mais déjà tu as oublié dans la partie Php les ; :)

Posté : 08 août 2005, 11:18
par raptor
C'est effectivement le probleme à mon avis ;)

Posté : 08 août 2005, 11:23
par Cyrano
Non seulement c'est ça,mais il y a en plus un autre problème: en cas de mauvais login/mot de passe, la formule qui consiste à faire un include du fichier login.htm va ruiner un peu le code html complet puisque c'est une page complète en html incluant les balises <html>, <head> etc... à l'intérieur d'une page contenant elle même déjà ces éléments...

Méthode à revoir : pourquoi ne pas traiter le tout sur une seule page .php ?

Posté : 08 août 2005, 12:13
par wadzar
Pour le ; ==> J'ai honte! :roll: :roll:


Bah en fait je pensait faire une page Index.htm, puis dedans un lien vers login.htm, etc...

Posté : 08 août 2005, 16:33
par wadzar
ben j'ai rajouté les ;, mais j'ai toujours un probleme. un vrai :shock: . un gros :shock: . un qui fait peur :shock: . avec des lignes de bug partout. :shock:

Lol.

En fait maintenant ça marche, sauf que ça me met:
Warning: session_start(): open(/var/www/free.fr/7/0/battleforconquest/sessions/sess_7f14bc916324bfbc8bcbc737627e25da, O_RDWR) failed: No such file or directory (2) in /var/www/free.fr/7/0/battleforconquest/login/login.php on line 30

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /var/www/free.fr/7/0/battleforconquest/login/login.php:10) in /var/www/free.fr/7/0/battleforconquest/login/login.php on line 30

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/free.fr/7/0/battleforconquest/login/login.php:10) in /var/www/free.fr/7/0/battleforconquest/login/login.php on line 30
Vous etes bien logué
Warning: Unknown(): open(/var/www/free.fr/7/0/battleforconquest/sessions/sess_7f14bc916324bfbc8bcbc737627e25da, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/www/free.fr/7/0/battleforconquest/sessions) in Unknown on line 0
Dés que je me logue.

C'est grave docteur? :?


@+
Wadzar

PS: je remarque tout de même que dans le tas il y a :"Vous etes bien logué"...

Posté : 08 août 2005, 16:36
par Cyrano
Sur free.fr, il faut créer un répertoire à la racine de ton site nommé "sessions" : l'as-tu bien créé ?

Posté : 08 août 2005, 17:01
par wadzar
Ah? ben vous pouvez aller voir sur http://battleforconquest.free.fr

Mais je n'ai jamais entendu cette histoire de dossier sessions. Moi j'ai juste mis ça dans un dossier "login".

Posté : 08 août 2005, 17:27
par wadzar
De mieux en mieux, il y a de moins en moins de lignes dans les erreurs lol.

Maintenant ça me met:
Warning: mysql_connect(): Access denied for user 'battleforconquest'@'212.27.40.179' (using password: YES) in /var/www/free.fr/7/0/battleforconquest/sessions/login/login.php on line 12

Warning: mysql_select_db(): A link to the server could not be established in /var/www/free.fr/7/0/battleforconquest/sessions/login/login.php on line 14

Warning: mysql_query(): A link to the server could not be established in /var/www/free.fr/7/0/battleforconquest/sessions/login/login.php on line 20
Erreur SQL !
select pwd from tbl_user where login='wadzar'
Access denied for user 'battleforconquest'@'212.27.40.179' (using password: YES)

Posté : 08 août 2005, 17:28
par Cyrano
Il manque un mot de passe pour l'accès à MySQL dans ta config de fichiers.

Posté : 08 août 2005, 17:44
par wadzar
Comment ça? Bah nan, dans login.php lors de la connexion j'ai bien mis localhost, battleforconquest et mon mdp...


EDIT: ATTENTION: gars trés con! Oui bon mon mot de passe était pas le bon, j'en avait changé entre-temps!Image


Bon ok pour le mot de passe, mais j'ai encore quelques bugs!

Maintenant ça me met:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /var/www/free.fr/7/0/battleforconquest/sessions/login/login.php:10) in /var/www/free.fr/7/0/battleforconquest/sessions/login/login.php on line 30

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/free.fr/7/0/battleforconquest/sessions/login/login.php:10) in /var/www/free.fr/7/0/battleforconquest/sessions/login/login.php on line 30
Vous etes bien logué
:?

Posté : 08 août 2005, 17:51
par Cyrano
Warning: mysql_connect(): Access denied for user 'battleforconquest'@'212.27.40.179' (using password: YES) in /var/www/free.fr/7/0/battleforconquest/sessions/login/login.php on line 12
Je l'invente pas, c'est ton serveur qui te le dit... :-k

Posté : 08 août 2005, 17:52
par wadzar
J'ai édité mon message precedent.

Posté : 08 août 2005, 17:56
par Cyrano
Well, on progresse. Il reste que tu envois du contenu au navigateur avant ton session_start() : ça peut être un simple espace en début de fichier juste avant un <?php par exemple. Dès cet instant, ton script se bloque.

Vérifie soigneusement ce que tu envoies.

Posté : 08 août 2005, 18:12
par wadzar
Well, on progresse.
Lol certainement plus lentement que surment :roll: :wink: .

Donc si j'ai bien compris ce qui nous interresse est dans login.php et c'est precisement:
<?

mysql_connect("localhost", "battleforconquest", "******") // connexion à la BDD

mysql_select_db("battleforconquest")

if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
  extract($_POST);
  // on recupère le password de la table qui correspond au login du visiteur
  $sql = "select pwd from tbl_user where login='".$login."'";
  $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

  $data = mysql_fetch_assoc($req);

  if($data['pwd'] != $pass) {
    echo '<p>Mauvais login / password. Merci de recommencer</p>';
    include('login.htm'); // On inclus le formulaire d'identification
    exit;
  }
  else {
    session_start();
    $_SESSION['login'] = $login; 
Mais j'y pense, j'utilise notepad et il met un espace devant chaque ligne, c'est peut-être ça. J'essaye...