Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1242 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  php4 -> php5 probleme sessions

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

php4 -> php5 probleme sessions

n°1399625
manuzed
Posté le 03-07-2006 à 16:38:29  profilanswer
 

Bonjour,
 
Petit historique avant la question,
j'ai fait un site en php/mysql avec formulaire, mot de passe et tout le toutim...
Tout marche niquel... En fait tout marchait niquel quand j'etais sous easyphp (apache 1.3 et php4)
 
Voulant pousser le vice plus loin, j'ai installé apache 2, php5, mysql 4.1.2(?) et bien sur phpmyadmin.
Il semble que tout fonctionne correctement, mon phpinfo() s'affiche niquel. J'ai installé ma base de données avec
phpmyadmin.
Sur mon site, il y a donc un formulaire ou on rentre le login et le Mot de Passe, qui renvoie vers membres_identification.php et c'est la mon probleme. Depuis mes changements de config (php5?)
lorsque je valide j'arrive sur une page blanche SANS AUCUNE ERREUR et c'est terminé!
Je me suis dit que code était bon en php4 mais pas en en php5 peut etre.
 Voici mon code d'identification (a supposer que ce soit cela l'explication!):
 
<?php  
 
include ("connexion.php" );
 
//passage des variables en variables courtes
$login = $_POST['login'];
$pass = $_POST['pass'];
 
// On selectionne quand le champ login correspond au login entré
// et le champ passe au pass entré.
$sql = "SELECT * FROM liste_membres WHERE login='$login' and pass=sha1('$pass')";
 
// On execute la requête de selection
$resultat = mysql_query($sql);
 
// On compte le nombre de ligne des resultats
// 1 : si valide ou 0 si aucun login ne correspond
$exist = mysql_numrows($resultat);
 
// Si la variable $exist = 0 --> login inexistant ou mauvais mot de passe
if(!$exist) {
    // On affiche ce message d'erreur
    echo "<h1>Veuillez vérifier vos données</h1>";
     
    // On inclut le formulaire d'identification
    include("membres_form_identification.php" );
}
 
// Sinon, si le login et pass sont valides
else {
 
 // On ouvre la session
 session_start();
 
 // On enregistre la variable login qu'on fera passer sur ttes les pages
 session_register("login" );
 
 //on incremente la variable de session avec la valeur entrée par l'utilisateur dans le formulaire
 $_SESSION['login']=$login;
 
 //On incrémente la table historique des connexions
 
 $sql = "SELECT * FROM historique_connectes WHERE login='$login' ";
 
 // On execute la requête de selection
 $resultat = mysql_query($sql);
 
 // On compte le nombre de ligne des resultats
 // 1 : si valide ou 0 si aucun login ne correspond
 $exist = mysql_numrows($resultat);
 
 // On affiche
 ?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>ACCUEIL</title>
       <link href="styles/membres.css" rel="stylesheet" type="text/css">
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
   </head>
   <body>
   
<div id="en_tete">
   
</div>
 
<div id="menu">
<?php
// Puis on inclue le menu
include("membres_menu.php" );
?>
</div>
 
<div id="corps">
ICI mon site
 
</div>
 
<div id="pied_de_page">
</div>
 
 
 <?// Si la variable $exist = 0 --> le login se connecte pour la premiere fois
 if(!$exist)
  {    // On incrémente la table
   
  echo "<h1>Ceci est votre premiere connexion!</h1>";
  $sql = "INSERT INTO historique_connectes VALUES('$login',now(),curtime(),'1')";
  mysql_query($sql);
  }
 else
  {
  $sql="select * from historique_connectes where login='$login'";
  $resultat=mysql_query($sql);
  $historique = mysql_fetch_array($resultat);
  $nombre=++ $historique['nombre']; //On incrémente le nombre de connexion  de 1 à chaque connexion
  $jour=$historique['date']; //Variables courtes
  $heure=$historique['heure'];
  echo "<div class='centre'><p>Votre derniere connexion était le $jour à $heure. <br />";
  echo "Ceci est votre $nombre ème connexion à mon site ouaib.</p></div>";
   
  $sql="UPDATE historique_connectes SET date=now(),heure=curtime(), nombre='$nombre' WHERE login='$login'";
  mysql_query($sql);
  }
 
}//fermeture du else ou le login et pass sont valides
?>

mood
Publicité
Posté le 03-07-2006 à 16:38:29  profilanswer
 

n°1399640
zapan666
Tout est relatif
Posté le 03-07-2006 à 16:55:34  profilanswer
 

http://uk.php.net/manual/fr/functi [...] gister.php
 

Citation :


 Si vous voulez que votre script fonctionne indépendamment de la configuration de la directive register_globals, vous devez utiliser la variable $_SESSION. Tous les éléments de $_SESSION sont automatiquement enregistrés. Si votre script utilise session_register(), il ne fonctionnera pas dans les environnements où register_globals  est désactivée.
 
    register_globals : note importante : Depuis PHP 4.2.0, la valeur par défaut de la directive de configuration PHP register_globals vaut off. La communauté PHP vous recommande de ne pas dépendre de cette directive, mais de trouver d'autres moyens pour accéder aux données, tels que les superglobals.


 
Je suis sur que c'est ca


---------------
my flick r - Just Tab it !
n°1399651
manuzed
Posté le 03-07-2006 à 17:16:48  profilanswer
 


 
Je suis sur que c'est ca
 
Super merci, je vais essayer ca ce soir.
 
Quand on débute, on ne se doute pas que tous les tutos ne sont pas bons à prendre(ou peut etre tout simplement trop vieux!).
 
A+
 
 
 

n°1399967
gebruik
Posté le 04-07-2006 à 09:29:29  profilanswer
 

Ton problème vient de session_start qui n'a rien à faire à cet endroit : il faut placer cette instruction au début de ton code, à la première ligne. Dès qu'un utilisateur se connecte sur ton site, un identifiant de session lui est attribué. Au login, tu vérifies comme tu l'as fait qu'il est inscrit dans la base de données, et après tu lui attribues une variable de session type $_SESSION['login']=1 ou ce que tu veux.

n°1399971
esox_ch
Posté le 04-07-2006 à 09:40:25  profilanswer
 

gebruik a écrit :

Ton problème vient de session_start qui n'a rien à faire à cet endroit : il faut placer cette instruction au début de ton code, à la première ligne. Dès qu'un utilisateur se connecte sur ton site, un identifiant de session lui est attribué. Au login, tu vérifies comme tu l'as fait qu'il est inscrit dans la base de données, et après tu lui attribues une variable de session type $_SESSION['login']=1 ou ce que tu veux.


 
Absolument pas :heink: , le session_start() tu le places où tu en as besoin , dans son cas sa place est appropriée. C 'est pas parcequ'il faut poser le session_start() avant que le headers soit envoyé qu'il faut commancer chaque fichier avec  :sarcastic:


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1400032
gebruik
Posté le 04-07-2006 à 11:12:52  profilanswer
 

Et tu définis comment une session ? Quel est l'intérêt de la déclarer en plein milieu d'une page ? Comment veux-tu gérer des superglobales de cette façon ?


Message édité par gebruik le 04-07-2006 à 11:22:18
n°1400037
esox_ch
Posté le 04-07-2006 à 11:15:26  profilanswer
 

Si tu lisais la doc avant de poser des questions tu saurais que  
 

Citation :


Note:  As of PHP 4.3.3, calling session_start() while the session has already been started will result in an error of level E_NOTICE. Also, the second session start will simply be ignored.


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1400049
gebruik
Posté le 04-07-2006 à 11:24:59  profilanswer
 

Merci, je la connais la doc...
 
Relis ce que tu cites... et explique moi comment tu gères des superglobales de cette façon, comment du gères des variables de session et pourquoi dans tous les supports, tuto, livre ou je ne sais quoi on t'invite à déclarer ta session en début de code ?
C'est la définition du mot session qui pose un problème ?

n°1400053
manuzed
Posté le 04-07-2006 à 11:27:58  profilanswer
 

Merci pour toutes vos reponses
 
la solution était la suivante:
en passant de php4(easyphp) à php5
plusieurs choses changent, mais etant débutant je ne pensais  
pas faire appel à des fonctions avancées....
 
mais une chose primordiale change: le short tag
 
dans certain de mes scripts dont mon connexion.php
il y avait des <? au lieu de <?php
et le code est tout simplement ignoré  :o  
 
Merci encore pour vos pistes de reflexion

n°1400054
gebruik
Posté le 04-07-2006 à 11:28:36  profilanswer
 

C'est quand même, reconnais-le, beaucoup plus simple de la déclarer au début et d'y coller des variables que tu peux modifier, le cas échéant, pour authentifier un utilisateur, stocker un tableau, etc.
 
Cas concret : tu fais un site de vente en ligne, comment tu gères ton panier ? En écrivant sur le disque côté serveur ? Bonjour la sécurité...

mood
Publicité
Posté le 04-07-2006 à 11:28:36  profilanswer
 

n°1400056
esox_ch
Posté le 04-07-2006 à 11:30:59  profilanswer
 

Pourquoi les tuto conseillent de le mettre à la premiere ligne :
Parcequ'ils se basent sur la supposition que le lecteur est trop stupide pour chercher une meilleure place où le mettre, ce qui se confirme souvent vu le nombre de personnes qui viennent ici en criant a cause du Headers already sent.
Pour la gestion des superglobales, je te signale que c'est pas parceque tu as pas fait un session_start() que tu ne peux pas utiliser $_POST, $_GET . Donc dans son cas specifique, où il n'as pas besoin de session_start() jusqu'a la moitier du script, c'est stupide de le mettre au debut (surtout qu'il y aura plein de gens qui n'on auront pas besoin tout cours).
Pour finir, je n'ai pas dit qu'il faut pas l'utiliser, j'ai dit qu'il faut l'utiliser au bon moment ... Enfin probablement il vaut mieux que tu continues à le mettre à la 1ere ligne ...


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1400074
gebruik
Posté le 04-07-2006 à 11:42:35  profilanswer
 

Ouais, c'est ça, je continue à le mettre en première ligne...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  php4 -> php5 probleme sessions

 

Sujets relatifs
Probleme avec shellapi.hPage valide mais problème d'affichage
Probleme avec req sql tte simpleProbleme sur petit programme de débutant
[HTML / PHP] Problème de formulaire entre 2 pagesProblème validation W3C avec Tidy validator
Problème de condition sur un COUNTProbleme pour envoyer un mail avec Excel
Problème Passage de Paramètres à une fonction Javascriptproblème de variable 2
Plus de sujets relatifs à : php4 -> php5 probleme sessions


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR