Page 1 sur 2

Variable SESSION, gros problème!

Posté : 13 sept. 2007, 16:21
par SniP_78
Bonjour a tous, je ne comprend pas, tous marcher nikel, et d'un coup un gros problème est apparu, dans le formulaire de connection, Je rentre mon mot de passe, mon login, je me connect, le message qui dit "Bonjour SniP_78" s'affiche, je change de page et plus de session !!!

J'ai chercher sur tous les forum et je n'est rien trouvé qui ma aider a régler mon problème.

Page de connection:
<code type="php">
<?php 
$pseudo = htmlentities($_POST["pseudo"]);
$mdp = htmlentities($_POST["mdp"]);
 
$affichagetitre = "Connection de l'utilisateur";
 
 
$requete="SELECT * FROM user WHERE login = '".$pseudo."'"; // requête 
  $result = mysql_query($requete, $connection) or die($requete . " - " . mysql_error());
 
  //si la requête s'est bien pass&eacute;e
  if(mysql_num_rows($result) > 0)
{ 
  
  while($data = mysql_fetch_array($result)) 
  { 
  if ($data['mdp'] == $mdp)
  {
 
  $_SESSION['pseudo'] = $data['login'];
  $_SESSION['iduser'] = $data['id'];
    if ($data['admin'] == "true")
  {
    $_SESSION['admin'] = "true";
  }
  $today = date("j/n/Y - H:i:s");
  $requete = "UPDATE `user` SET `derniereconnect` = '".$today."'  WHERE id = '".$_SESSION['iduser']."'";
$result = mysql_query($requete, $connection) or die($requete . " - " . mysql_error());
  $affichage = "<br> <br> Vous voila maintenent connecter sur ".$_SESSION['pseudo'].".";
$connecteformhide = 'false';
$member = "true";
}
  else
{ 
$affichage =  "Mot de passe non valide"; 
}
  } 
  
   
}
  else
{ 
$affichage =  "Nom d'utilisateur non valide"; 
}
?>
<meta http-equiv="refresh" content="5;URL=accueil.astucepourtous.html" />
</code>
Haut de toute les page:
<? 
@session_start();
 
 
if($_SESSION["iduser"] == "" and $_SESSION["pseudo"] == "")
{       
 
$member = "false";
}
else
{
$member = "true";
}
 
?>

Voila un exemple qui montre qu'il y'a vraiment un problème:

http://www.astucepourtous.fr/test.php
<?
session_start();
 
$_SESSION["iduser"] = "10";
$_SESSION["pseudo"] = "Test";
 
 
?>

http://www.astucepourtous.fr/test2.php
<?
session_start();
 
 
 
echo $_SESSION["pseudo"].$_SESSION["iduser"];
?>

(je présise que je suis chez 1and1)


Voila, je ne comprend pas, page pour tester:

http://www.astucepourtous.fr/ (Login: x244 Mot de passe: x244 )

Posté : 13 sept. 2007, 16:39
par Ryle
Euh pour ma part lorsque je lance test.php puis test2.php j'ai rien qui s'affiche...

et si tu virais le @ devant le session_start() ("un message d'erreur étant fait pour indiquer les erreurs" - dixit ouckileou :)), que tu évitais d'utiliser les short open tags "<?" et leur préférais un "<?php" normal ?

Je ne connais pas 1&1, mais ne faut il pas créer un dossier "sessions" à la racine du site comme chez beaucoup d'autres hébergeurs ?

Posté : 13 sept. 2007, 16:47
par jojolapine
HS: "commantaire" => "commentaire"

Posté : 13 sept. 2007, 16:53
par Ryle
HS: à ce compte là.. "plain d'astuces" => "plein d'astuces", "ect." => "etc.", "Membres inscrit" => "Membres inscrits", .... :)

Posté : 13 sept. 2007, 16:58
par jojolapine
HS: toi non plus tu sais pas quoi faire de ton aprem :langue: ?

Posté : 13 sept. 2007, 17:06
par orgerix
Il me semble que session_start() n'est aps dans la page de connexion.

Posté : 13 sept. 2007, 17:43
par Invité
Euh pour ma part lorsque je lance test.php puis test2.php j'ai rien qui s'affiche...

et si tu virais le @ devant le session_start() ("un message d'erreur étant fait pour indiquer les erreurs" - dixit ouckileou :)), que tu évitais d'utiliser les short open tags "<?" et leur préférais un "<?php" normal ?

Je ne connais pas 1&1, mais ne faut il pas créer un dossier "sessions" à la racine du site comme chez beaucoup d'autres hébergeurs ?

C'est sa le problème, les page test.php, le code est pas faut et sa ne marche pas, les session ne marche pas sur l'hébergement alors qui y'a une semaine tous marché et je n'est rien touché depuis.

J'ai fait tous ce que tu a dit, et rien ne change, je ne comprend pas.

ps1: Les faute d'orthographe je les corrigerai après
ps2: Je répète que toute les page de mon site on comme première ligne:
<? 
@session_start();
 
 
if($_SESSION["iduser"] == "" and $_SESSION["pseudo"] == "")
{       
 
$member = "false";
}
else
{
$member = "true";
}
 
?>

Posté : 13 sept. 2007, 18:02
par Ryle
Essaye d'ajouter un phpinfo() dans une de tes pages de test et regarde ce qui est indiqué au niveau du modules des sessions... on y verra peut être quelque chose ?

Posté : 13 sept. 2007, 18:23
par SniP_78
Voila la page avec le PHP info:

http://www.astucepourtous.fr/test3.php

Posté : 13 sept. 2007, 20:12
par Invité
Personne ne peut m'aider?

Posté : 13 sept. 2007, 20:54
par Cyrano
Sois discipliné dans ta manière de coder et tu auras moins de mal à débugguer.

Petit ménage : le second script définissant si la variable $member doit être à true ou false :
<?php
session_start();

$member = (empty($_SESSION["iduser"]) || empty($_SESSION["pseudo"])) ? false : true;
?>
Tu noteras qu'on évite les short_open_tag(). D'après ton phpinfo, ce n'est pas indispensable, mais c'est une sécurité de plus.

Et on VIRE le "@" devant le session_start() : s'il y a une erreur, il faut la voir et le savoir pour la corriger, pas la masquer avec un cache-misère.

Le premier script maintenant : on aligne le code proprement et on oublie pas de relancer aussi la session. Et on vire les balises <code> qui n'on pas grand chose à faire là :
<?php 
session_start();
$pseudo = htmlentities($_POST["pseudo"]);
$mdp    = htmlentities($_POST["mdp"]);

$affichagetitre = "Connection de l'utilisateur";


$requete="SELECT * FROM user WHERE login = '".$pseudo."'"; // requête
$result = mysql_query($requete, $connection) or die($requete . " - " . mysql_error());

//si la requête s'est bien pass&eacute;e
if(mysql_num_rows($result) > 0)
{
    while($data = mysql_fetch_array($result))
    {
        if ($data['mdp'] == $mdp)
        {

            $_SESSION['pseudo'] = $data['login'];
            $_SESSION['iduser'] = $data['id'];
            if ($data['admin'] == "true")
            {
                $_SESSION['admin'] = true;
            }
            $today = date("j/n/Y - H:i:s");
            $requete = "UPDATE `user` SET `derniereconnect` = '".$today."'  WHERE id = '".$_SESSION['iduser']."'";
            $result = mysql_query($requete, $connection) or die($requete . " - " . mysql_error());
            $affichage = "<br> <br> Vous voila maintenent connecter sur ".$_SESSION['pseudo'].".";
            $connecteformhide = false;
            $member = true;
        }
        else
        {
            $affichage =  "Mot de passe non valide";
        }
    }


}
else
{
    $affichage =  "Nom d'utilisateur non valide";
}
?>
<meta http-equiv="refresh" content="5;URL=accueil.astucepourtous.html" />
Petit détail : on met $var = true et non $var = "true" : c'est un booléen, pas une chaine de caractère. Le seul auquel j'ai laissé les guillemets, c'est celui en provenance de la base de données.

Teste déjà ça.

Posté : 15 sept. 2007, 11:29
par SNiP_78
Désolé mais sa beug toujours, sa a rien changé.

Moi je pense pas que le problème vienne du script mais de l'hebergeur et des session, quoi je ne comprend pas mais tous marcher nickel avec ce code, sa marché plus du jour au lendemain sans même que je touche au code.

Merci de me dire pourquoi si quelqu'un a encore une idée pour m'aider.

Posté : 15 sept. 2007, 12:09
par Aureusms
J'ai eu un problème équivalent avec mon éditeur Php qui me m'était des caractères avant <?php.
As tu récemment changé d'éditeur ?

Posté : 15 sept. 2007, 12:26
par SniP_78
Oui, la je suis sur Notepad++ et avan sur Adobe Dreamweaver CS3, je vais regarder si sa vien de sa

Posté : 15 sept. 2007, 12:29
par Invité
Rien ne change