php4 -> php5 probleme sessions - PHP - Programmation
Marsh Posté le 03-07-2006 à 16:55:34
http://uk.php.net/manual/fr/functi [...] gister.php
Citation : |
Je suis sur que c'est ca
Marsh Posté le 03-07-2006 à 17:16:48
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+
Marsh Posté le 04-07-2006 à 09:29:29
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.
Marsh Posté le 04-07-2006 à 09:40:25
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 , 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
Marsh Posté le 04-07-2006 à 11:12:52
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 ?
Marsh Posté le 04-07-2006 à 11:15:26
Si tu lisais la doc avant de poser des questions tu saurais que
Citation : |
Marsh Posté le 04-07-2006 à 11:24:59
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 ?
Marsh Posté le 04-07-2006 à 11:27:58
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é
Merci encore pour vos pistes de reflexion
Marsh Posté le 04-07-2006 à 11:28:36
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é...
Marsh Posté le 04-07-2006 à 11:30:59
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 ...
Marsh Posté le 04-07-2006 à 11:42:35
Ouais, c'est ça, je continue à le mettre en première ligne...
Marsh Posté le 03-07-2006 à 16:38:29
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
?>