Les sessions, pbl...

Eléphanteau du PHP | 39 Messages

08 août 2005, 10:54

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

Eléphanteau du PHP | 24 Messages

08 août 2005, 11:13

J'ai pas encore analysé à donf, mais déjà tu as oublié dans la partie Php les ; :)

Mammouth du PHP | 543 Messages

08 août 2005, 11:18

C'est effectivement le probleme à mon avis ;)

Mammouth du PHP | 19672 Messages

08 août 2005, 11:23

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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 39 Messages

08 août 2005, 12:13

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...

Eléphanteau du PHP | 39 Messages

08 août 2005, 16:33

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é"...

Mammouth du PHP | 19672 Messages

08 août 2005, 16:36

Sur free.fr, il faut créer un répertoire à la racine de ton site nommé "sessions" : l'as-tu bien créé ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 39 Messages

08 août 2005, 17:01

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".

Eléphanteau du PHP | 39 Messages

08 août 2005, 17:27

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)

Mammouth du PHP | 19672 Messages

08 août 2005, 17:28

Il manque un mot de passe pour l'accès à MySQL dans ta config de fichiers.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 39 Messages

08 août 2005, 17:44

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é
:?
Modifié en dernier par wadzar le 08 août 2005, 17:51, modifié 1 fois.

Mammouth du PHP | 19672 Messages

08 août 2005, 17:51

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
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 39 Messages

08 août 2005, 17:52

J'ai édité mon message precedent.

Mammouth du PHP | 19672 Messages

08 août 2005, 17:56

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 39 Messages

08 août 2005, 18:12

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...